[{"data":1,"prerenderedAt":175749},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-python-jiao-cheng\u002Fch6-shu-ju-rong-qi":3,"wiki-doc-nav":3248},{"id":4,"title":5,"body":6,"description":3241,"extension":3242,"meta":3243,"navigation":300,"path":3244,"seo":3245,"stem":3246,"__hash__":3247},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":8,"toc":3222},"minimark",[9,13,18,22,25,142,145,149,152,261,264,268,271,337,340,378,381,396,400,477,480,535,538,611,614,703,713,771,775,826,829,856,859,982,986,989,1036,1039,1104,1107,1111,1114,1179,1182,1213,1216,1255,1259,1262,1271,1274,1400,1403,1444,1448,1451,1464,1506,1509,1527,1534,1537,1604,1607,1701,1705,1708,1761,1764,1792,1795,1827,1830,1850,1853,1885,1888,1924,1928,1931,1955,1958,1982,1985,2009,2013,2016,2157,2160,2240,2243,2328,2332,2335,2385,2388,2431,2434,2458,2460,2484,2487,2545,2548,2614,2618,2621,2624,2665,2668,2727,2730,2777,2780,2813,2816,2820,3162,3166,3197,3201,3218],[10,11,5],"h1",{"id":12},"_6-数据容器",[14,15,17],"h2",{"id":16},"_61-什么是数据容器","6.1 什么是数据容器",[19,20,21],"p",{},"数据容器用于一次保存多个数据。",[19,23,24],{},"常见容器：",[26,27,28,50],"table",{},[29,30,31],"thead",{},[32,33,34,38,41,44,47],"tr",{},[35,36,37],"th",{},"容器",[35,39,40],{},"是否有序",[35,42,43],{},"是否可变",[35,45,46],{},"是否允许重复",[35,48,49],{},"示例",[51,52,53,74,91,107,125],"tbody",{},[32,54,55,59,62,65,68],{},[56,57,58],"td",{},"list列表",[56,60,61],{},"有序",[56,63,64],{},"可变",[56,66,67],{},"允许",[56,69,70],{},[71,72,73],"code",{},"[1, 2, 3]",[32,75,76,79,81,84,86],{},[56,77,78],{},"tuple元组",[56,80,61],{},[56,82,83],{},"不可变",[56,85,67],{},[56,87,88],{},[71,89,90],{},"(1, 2, 3)",[32,92,93,96,98,100,102],{},[56,94,95],{},"str字符串",[56,97,61],{},[56,99,83],{},[56,101,67],{},[56,103,104],{},[71,105,106],{},"\"abc\"",[32,108,109,112,115,117,120],{},[56,110,111],{},"set集合",[56,113,114],{},"无序",[56,116,64],{},[56,118,119],{},"不允许",[56,121,122],{},[71,123,124],{},"{1, 2, 3}",[32,126,127,130,132,134,137],{},[56,128,129],{},"dict字典",[56,131,61],{},[56,133,64],{},[56,135,136],{},"key不允许重复",[56,138,139],{},[71,140,141],{},"{\"name\": \"小明\"}",[19,143,144],{},"Python 3.7 之后，字典保持插入顺序。",[14,146,148],{"id":147},"_62-列表list","6.2 列表list",[19,150,151],{},"列表用于保存一组有顺序的数据。",[153,154,159],"pre",{"className":155,"code":156,"language":157,"meta":158,"style":158},"language-python shiki shiki-themes github-light github-dark","names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n","python","",[71,160,161,195,226,250],{"__ignoreMap":158},[162,163,166,170,174,177,181,184,187,189,192],"span",{"class":164,"line":165},"line",1,[162,167,169],{"class":168},"sVt8B","names ",[162,171,173],{"class":172},"szBVR","=",[162,175,176],{"class":168}," [",[162,178,180],{"class":179},"sZZnC","\"小明\"",[162,182,183],{"class":168},", ",[162,185,186],{"class":179},"\"小红\"",[162,188,183],{"class":168},[162,190,191],{"class":179},"\"小刚\"",[162,193,194],{"class":168},"]\n",[162,196,198,201,203,205,209,211,214,216,219,221,224],{"class":164,"line":197},2,[162,199,200],{"class":168},"numbers ",[162,202,173],{"class":172},[162,204,176],{"class":168},[162,206,208],{"class":207},"sj4cs","1",[162,210,183],{"class":168},[162,212,213],{"class":207},"2",[162,215,183],{"class":168},[162,217,218],{"class":207},"3",[162,220,183],{"class":168},[162,222,223],{"class":207},"4",[162,225,194],{"class":168},[162,227,229,232,234,236,238,240,243,245,248],{"class":164,"line":228},3,[162,230,231],{"class":168},"mixed ",[162,233,173],{"class":172},[162,235,176],{"class":168},[162,237,180],{"class":179},[162,239,183],{"class":168},[162,241,242],{"class":207},"18",[162,244,183],{"class":168},[162,246,247],{"class":207},"True",[162,249,194],{"class":168},[162,251,253,256,258],{"class":164,"line":252},4,[162,254,255],{"class":168},"empty ",[162,257,173],{"class":172},[162,259,260],{"class":168}," []\n",[19,262,263],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,265,267],{"id":266},"_63-列表索引","6.3 列表索引",[19,269,270],{},"正向索引从 0 开始：",[153,272,274],{"className":155,"code":273,"language":157,"meta":158,"style":158},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[71,275,276,296,302,316,326],{"__ignoreMap":158},[162,277,278,280,282,284,286,288,290,292,294],{"class":164,"line":165},[162,279,169],{"class":168},[162,281,173],{"class":172},[162,283,176],{"class":168},[162,285,180],{"class":179},[162,287,183],{"class":168},[162,289,186],{"class":179},[162,291,183],{"class":168},[162,293,191],{"class":179},[162,295,194],{"class":168},[162,297,298],{"class":164,"line":197},[162,299,301],{"emptyLinePlaceholder":300},true,"\n",[162,303,304,307,310,313],{"class":164,"line":228},[162,305,306],{"class":207},"print",[162,308,309],{"class":168},"(names[",[162,311,312],{"class":207},"0",[162,314,315],{"class":168},"])\n",[162,317,318,320,322,324],{"class":164,"line":252},[162,319,306],{"class":207},[162,321,309],{"class":168},[162,323,208],{"class":207},[162,325,315],{"class":168},[162,327,329,331,333,335],{"class":164,"line":328},5,[162,330,306],{"class":207},[162,332,309],{"class":168},[162,334,213],{"class":207},[162,336,315],{"class":168},[19,338,339],{},"反向索引从 -1 开始：",[153,341,343],{"className":155,"code":342,"language":157,"meta":158,"style":158},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[71,344,345,363],{"__ignoreMap":158},[162,346,347,349,351,354,356,359],{"class":164,"line":165},[162,348,306],{"class":207},[162,350,309],{"class":168},[162,352,353],{"class":172},"-",[162,355,208],{"class":207},[162,357,358],{"class":168},"])  ",[162,360,362],{"class":361},"sJ8bj","# 小刚\n",[162,364,365,367,369,371,373,375],{"class":164,"line":197},[162,366,306],{"class":207},[162,368,309],{"class":168},[162,370,353],{"class":172},[162,372,213],{"class":207},[162,374,358],{"class":168},[162,376,377],{"class":361},"# 小红\n",[19,379,380],{},"索引越界会报错：",[153,382,384],{"className":155,"code":383,"language":157,"meta":158,"style":158},"print(names[3])\n",[71,385,386],{"__ignoreMap":158},[162,387,388,390,392,394],{"class":164,"line":165},[162,389,306],{"class":207},[162,391,309],{"class":168},[162,393,218],{"class":207},[162,395,315],{"class":168},[14,397,399],{"id":398},"_64-列表常用方法","6.4 列表常用方法",[153,401,403],{"className":155,"code":402,"language":157,"meta":158,"style":158},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[71,404,405,421,425,435,449,464,469],{"__ignoreMap":158},[162,406,407,409,411,413,415,417,419],{"class":164,"line":165},[162,408,169],{"class":168},[162,410,173],{"class":172},[162,412,176],{"class":168},[162,414,180],{"class":179},[162,416,183],{"class":168},[162,418,186],{"class":179},[162,420,194],{"class":168},[162,422,423],{"class":164,"line":197},[162,424,301],{"emptyLinePlaceholder":300},[162,426,427,430,432],{"class":164,"line":228},[162,428,429],{"class":168},"names.append(",[162,431,191],{"class":179},[162,433,434],{"class":168},")\n",[162,436,437,440,442,444,447],{"class":164,"line":252},[162,438,439],{"class":168},"names.insert(",[162,441,208],{"class":207},[162,443,183],{"class":168},[162,445,446],{"class":179},"\"小李\"",[162,448,434],{"class":168},[162,450,451,454,457,459,462],{"class":164,"line":328},[162,452,453],{"class":168},"names.extend([",[162,455,456],{"class":179},"\"小王\"",[162,458,183],{"class":168},[162,460,461],{"class":179},"\"小赵\"",[162,463,315],{"class":168},[162,465,467],{"class":164,"line":466},6,[162,468,301],{"emptyLinePlaceholder":300},[162,470,472,474],{"class":164,"line":471},7,[162,473,306],{"class":207},[162,475,476],{"class":168},"(names)\n",[19,478,479],{},"删除元素：",[153,481,483],{"className":155,"code":482,"language":157,"meta":158,"style":158},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[71,484,485,494,504,518,530],{"__ignoreMap":158},[162,486,487,490,492],{"class":164,"line":165},[162,488,489],{"class":168},"names.remove(",[162,491,186],{"class":179},[162,493,434],{"class":168},[162,495,496,499,501],{"class":164,"line":197},[162,497,498],{"class":168},"last ",[162,500,173],{"class":172},[162,502,503],{"class":168}," names.pop()\n",[162,505,506,509,511,514,516],{"class":164,"line":228},[162,507,508],{"class":168},"first ",[162,510,173],{"class":172},[162,512,513],{"class":168}," names.pop(",[162,515,312],{"class":207},[162,517,434],{"class":168},[162,519,520,523,526,528],{"class":164,"line":252},[162,521,522],{"class":172},"del",[162,524,525],{"class":168}," names[",[162,527,312],{"class":207},[162,529,194],{"class":168},[162,531,532],{"class":164,"line":328},[162,533,534],{"class":168},"names.clear()\n",[19,536,537],{},"查询和统计：",[153,539,541],{"className":155,"code":540,"language":157,"meta":158,"style":158},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[71,542,543,571,575,587,598],{"__ignoreMap":158},[162,544,545,547,549,551,553,555,557,559,561,563,565,567,569],{"class":164,"line":165},[162,546,200],{"class":168},[162,548,173],{"class":172},[162,550,176],{"class":168},[162,552,208],{"class":207},[162,554,183],{"class":168},[162,556,213],{"class":207},[162,558,183],{"class":168},[162,560,218],{"class":207},[162,562,183],{"class":168},[162,564,213],{"class":207},[162,566,183],{"class":168},[162,568,223],{"class":207},[162,570,194],{"class":168},[162,572,573],{"class":164,"line":197},[162,574,301],{"emptyLinePlaceholder":300},[162,576,577,579,582,584],{"class":164,"line":228},[162,578,306],{"class":207},[162,580,581],{"class":168},"(numbers.index(",[162,583,218],{"class":207},[162,585,586],{"class":168},"))\n",[162,588,589,591,594,596],{"class":164,"line":252},[162,590,306],{"class":207},[162,592,593],{"class":168},"(numbers.count(",[162,595,213],{"class":207},[162,597,586],{"class":168},[162,599,600,602,605,608],{"class":164,"line":328},[162,601,306],{"class":207},[162,603,604],{"class":168},"(",[162,606,607],{"class":207},"len",[162,609,610],{"class":168},"(numbers))\n",[19,612,613],{},"排序：",[153,615,617],{"className":155,"code":616,"language":157,"meta":158,"style":158},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[71,618,619,644,648,653,660,664,679,685,690,696],{"__ignoreMap":158},[162,620,621,623,625,627,629,631,633,635,638,640,642],{"class":164,"line":165},[162,622,200],{"class":168},[162,624,173],{"class":172},[162,626,176],{"class":168},[162,628,218],{"class":207},[162,630,183],{"class":168},[162,632,208],{"class":207},[162,634,183],{"class":168},[162,636,637],{"class":207},"5",[162,639,183],{"class":168},[162,641,213],{"class":207},[162,643,194],{"class":168},[162,645,646],{"class":164,"line":197},[162,647,301],{"emptyLinePlaceholder":300},[162,649,650],{"class":164,"line":228},[162,651,652],{"class":168},"numbers.sort()\n",[162,654,655,657],{"class":164,"line":252},[162,656,306],{"class":207},[162,658,659],{"class":168},"(numbers)\n",[162,661,662],{"class":164,"line":328},[162,663,301],{"emptyLinePlaceholder":300},[162,665,666,669,673,675,677],{"class":164,"line":466},[162,667,668],{"class":168},"numbers.sort(",[162,670,672],{"class":671},"s4XuR","reverse",[162,674,173],{"class":172},[162,676,247],{"class":207},[162,678,434],{"class":168},[162,680,681,683],{"class":164,"line":471},[162,682,306],{"class":207},[162,684,659],{"class":168},[162,686,688],{"class":164,"line":687},8,[162,689,301],{"emptyLinePlaceholder":300},[162,691,693],{"class":164,"line":692},9,[162,694,695],{"class":168},"numbers.reverse()\n",[162,697,699,701],{"class":164,"line":698},10,[162,700,306],{"class":207},[162,702,659],{"class":168},[19,704,705,708,709,712],{},[71,706,707],{},"sort()"," 会修改原列表，",[71,710,711],{},"sorted()"," 返回新列表。",[153,714,716],{"className":155,"code":715,"language":157,"meta":158,"style":158},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[71,717,718,742,754,758,764],{"__ignoreMap":158},[162,719,720,722,724,726,728,730,732,734,736,738,740],{"class":164,"line":165},[162,721,200],{"class":168},[162,723,173],{"class":172},[162,725,176],{"class":168},[162,727,218],{"class":207},[162,729,183],{"class":168},[162,731,208],{"class":207},[162,733,183],{"class":168},[162,735,637],{"class":207},[162,737,183],{"class":168},[162,739,213],{"class":207},[162,741,194],{"class":168},[162,743,744,747,749,752],{"class":164,"line":197},[162,745,746],{"class":168},"new_numbers ",[162,748,173],{"class":172},[162,750,751],{"class":207}," sorted",[162,753,659],{"class":168},[162,755,756],{"class":164,"line":228},[162,757,301],{"emptyLinePlaceholder":300},[162,759,760,762],{"class":164,"line":252},[162,761,306],{"class":207},[162,763,659],{"class":168},[162,765,766,768],{"class":164,"line":328},[162,767,306],{"class":207},[162,769,770],{"class":168},"(new_numbers)\n",[14,772,774],{"id":773},"_65-列表遍历","6.5 列表遍历",[153,776,778],{"className":155,"code":777,"language":157,"meta":158,"style":158},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[71,779,780,800,804,818],{"__ignoreMap":158},[162,781,782,784,786,788,790,792,794,796,798],{"class":164,"line":165},[162,783,169],{"class":168},[162,785,173],{"class":172},[162,787,176],{"class":168},[162,789,180],{"class":179},[162,791,183],{"class":168},[162,793,186],{"class":179},[162,795,183],{"class":168},[162,797,191],{"class":179},[162,799,194],{"class":168},[162,801,802],{"class":164,"line":197},[162,803,301],{"emptyLinePlaceholder":300},[162,805,806,809,812,815],{"class":164,"line":228},[162,807,808],{"class":172},"for",[162,810,811],{"class":168}," name ",[162,813,814],{"class":172},"in",[162,816,817],{"class":168}," names:\n",[162,819,820,823],{"class":164,"line":252},[162,821,822],{"class":207},"    print",[162,824,825],{"class":168},"(name)\n",[19,827,828],{},"需要索引时：",[153,830,832],{"className":155,"code":831,"language":157,"meta":158,"style":158},"for index, name in enumerate(names):\n    print(index, name)\n",[71,833,834,849],{"__ignoreMap":158},[162,835,836,838,841,843,846],{"class":164,"line":165},[162,837,808],{"class":172},[162,839,840],{"class":168}," index, name ",[162,842,814],{"class":172},[162,844,845],{"class":207}," enumerate",[162,847,848],{"class":168},"(names):\n",[162,850,851,853],{"class":164,"line":197},[162,852,822],{"class":207},[162,854,855],{"class":168},"(index, name)\n",[19,857,858],{},"统计总分：",[153,860,862],{"className":155,"code":861,"language":157,"meta":158,"style":158},"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",[71,863,864,893,903,907,919,930,934,953],{"__ignoreMap":158},[162,865,866,869,871,873,876,878,881,883,886,888,891],{"class":164,"line":165},[162,867,868],{"class":168},"scores ",[162,870,173],{"class":172},[162,872,176],{"class":168},[162,874,875],{"class":207},"90",[162,877,183],{"class":168},[162,879,880],{"class":207},"85",[162,882,183],{"class":168},[162,884,885],{"class":207},"66",[162,887,183],{"class":168},[162,889,890],{"class":207},"78",[162,892,194],{"class":168},[162,894,895,898,900],{"class":164,"line":197},[162,896,897],{"class":168},"total ",[162,899,173],{"class":172},[162,901,902],{"class":207}," 0\n",[162,904,905],{"class":164,"line":228},[162,906,301],{"emptyLinePlaceholder":300},[162,908,909,911,914,916],{"class":164,"line":252},[162,910,808],{"class":172},[162,912,913],{"class":168}," score ",[162,915,814],{"class":172},[162,917,918],{"class":168}," scores:\n",[162,920,921,924,927],{"class":164,"line":328},[162,922,923],{"class":168},"    total ",[162,925,926],{"class":172},"+=",[162,928,929],{"class":168}," score\n",[162,931,932],{"class":164,"line":466},[162,933,301],{"emptyLinePlaceholder":300},[162,935,936,939,941,944,947,950],{"class":164,"line":471},[162,937,938],{"class":168},"avg ",[162,940,173],{"class":172},[162,942,943],{"class":168}," total ",[162,945,946],{"class":172},"\u002F",[162,948,949],{"class":207}," len",[162,951,952],{"class":168},"(scores)\n",[162,954,955,957,959,962,965,968,971,974,977,980],{"class":164,"line":687},[162,956,306],{"class":207},[162,958,604],{"class":168},[162,960,961],{"class":172},"f",[162,963,964],{"class":179},"\"平均分:",[162,966,967],{"class":207},"{",[162,969,970],{"class":168},"avg",[162,972,973],{"class":172},":.2f",[162,975,976],{"class":207},"}",[162,978,979],{"class":179},"\"",[162,981,434],{"class":168},[14,983,985],{"id":984},"_66-元组tuple","6.6 元组tuple",[19,987,988],{},"元组和列表类似，但不可修改。",[153,990,992],{"className":155,"code":991,"language":157,"meta":158,"style":158},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[71,993,994,1014],{"__ignoreMap":158},[162,995,996,999,1001,1004,1007,1009,1012],{"class":164,"line":165},[162,997,998],{"class":168},"point ",[162,1000,173],{"class":172},[162,1002,1003],{"class":168}," (",[162,1005,1006],{"class":207},"10",[162,1008,183],{"class":168},[162,1010,1011],{"class":207},"20",[162,1013,434],{"class":168},[162,1015,1016,1019,1021,1023,1025,1027,1029,1031,1034],{"class":164,"line":197},[162,1017,1018],{"class":168},"info ",[162,1020,173],{"class":172},[162,1022,1003],{"class":168},[162,1024,180],{"class":179},[162,1026,183],{"class":168},[162,1028,242],{"class":207},[162,1030,183],{"class":168},[162,1032,1033],{"class":179},"\"北京\"",[162,1035,434],{"class":168},[19,1037,1038],{},"单元素元组必须加逗号：",[153,1040,1042],{"className":155,"code":1041,"language":157,"meta":158,"style":158},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[71,1043,1044,1058,1071,1075,1090],{"__ignoreMap":158},[162,1045,1046,1049,1051,1053,1055],{"class":164,"line":165},[162,1047,1048],{"class":168},"t1 ",[162,1050,173],{"class":172},[162,1052,1003],{"class":168},[162,1054,1006],{"class":207},[162,1056,1057],{"class":168},",)\n",[162,1059,1060,1063,1065,1067,1069],{"class":164,"line":197},[162,1061,1062],{"class":168},"t2 ",[162,1064,173],{"class":172},[162,1066,1003],{"class":168},[162,1068,1006],{"class":207},[162,1070,434],{"class":168},[162,1072,1073],{"class":164,"line":228},[162,1074,301],{"emptyLinePlaceholder":300},[162,1076,1077,1079,1081,1084,1087],{"class":164,"line":252},[162,1078,306],{"class":207},[162,1080,604],{"class":168},[162,1082,1083],{"class":207},"type",[162,1085,1086],{"class":168},"(t1))  ",[162,1088,1089],{"class":361},"# tuple\n",[162,1091,1092,1094,1096,1098,1101],{"class":164,"line":328},[162,1093,306],{"class":207},[162,1095,604],{"class":168},[162,1097,1083],{"class":207},[162,1099,1100],{"class":168},"(t2))  ",[162,1102,1103],{"class":361},"# int\n",[19,1105,1106],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,1108,1110],{"id":1109},"_67-字符串str","6.7 字符串str",[19,1112,1113],{},"字符串也是序列，可以索引、切片和遍历。",[153,1115,1117],{"className":155,"code":1116,"language":157,"meta":158,"style":158},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[71,1118,1119,1129,1133,1144,1156,1160,1172],{"__ignoreMap":158},[162,1120,1121,1124,1126],{"class":164,"line":165},[162,1122,1123],{"class":168},"text ",[162,1125,173],{"class":172},[162,1127,1128],{"class":179}," \"python\"\n",[162,1130,1131],{"class":164,"line":197},[162,1132,301],{"emptyLinePlaceholder":300},[162,1134,1135,1137,1140,1142],{"class":164,"line":228},[162,1136,306],{"class":207},[162,1138,1139],{"class":168},"(text[",[162,1141,312],{"class":207},[162,1143,315],{"class":168},[162,1145,1146,1148,1150,1152,1154],{"class":164,"line":252},[162,1147,306],{"class":207},[162,1149,1139],{"class":168},[162,1151,353],{"class":172},[162,1153,208],{"class":207},[162,1155,315],{"class":168},[162,1157,1158],{"class":164,"line":328},[162,1159,301],{"emptyLinePlaceholder":300},[162,1161,1162,1164,1167,1169],{"class":164,"line":466},[162,1163,808],{"class":172},[162,1165,1166],{"class":168}," ch ",[162,1168,814],{"class":172},[162,1170,1171],{"class":168}," text:\n",[162,1173,1174,1176],{"class":164,"line":471},[162,1175,822],{"class":207},[162,1177,1178],{"class":168},"(ch)\n",[19,1180,1181],{},"字符串不可变：",[153,1183,1185],{"className":155,"code":1184,"language":157,"meta":158,"style":158},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[71,1186,1187,1195],{"__ignoreMap":158},[162,1188,1189,1191,1193],{"class":164,"line":165},[162,1190,1123],{"class":168},[162,1192,173],{"class":172},[162,1194,1128],{"class":179},[162,1196,1197,1200,1202,1205,1207,1210],{"class":164,"line":197},[162,1198,1199],{"class":168},"text[",[162,1201,312],{"class":207},[162,1203,1204],{"class":168},"] ",[162,1206,173],{"class":172},[162,1208,1209],{"class":179}," \"P\"",[162,1211,1212],{"class":361},"  # 报错\n",[19,1214,1215],{},"如果要得到新字符串：",[153,1217,1219],{"className":155,"code":1218,"language":157,"meta":158,"style":158},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[71,1220,1221,1229,1248],{"__ignoreMap":158},[162,1222,1223,1225,1227],{"class":164,"line":165},[162,1224,1123],{"class":168},[162,1226,173],{"class":172},[162,1228,1128],{"class":179},[162,1230,1231,1233,1235,1237,1240,1243,1245],{"class":164,"line":197},[162,1232,1123],{"class":168},[162,1234,173],{"class":172},[162,1236,1209],{"class":179},[162,1238,1239],{"class":172}," +",[162,1241,1242],{"class":168}," text[",[162,1244,208],{"class":207},[162,1246,1247],{"class":168},":]\n",[162,1249,1250,1252],{"class":164,"line":228},[162,1251,306],{"class":207},[162,1253,1254],{"class":168},"(text)\n",[14,1256,1258],{"id":1257},"_68-切片","6.8 切片",[19,1260,1261],{},"切片用于从序列中取一部分。",[153,1263,1265],{"className":155,"code":1264,"language":157,"meta":158,"style":158},"序列[开始:结束:步长]\n",[71,1266,1267],{"__ignoreMap":158},[162,1268,1269],{"class":164,"line":165},[162,1270,1264],{"class":168},[19,1272,1273],{},"结束位置不包含。",[153,1275,1277],{"className":155,"code":1276,"language":157,"meta":158,"style":158},"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",[71,1278,1279,1317,1321,1341,1356,1370,1384],{"__ignoreMap":158},[162,1280,1281,1284,1286,1288,1290,1292,1294,1296,1298,1300,1302,1304,1306,1308,1310,1312,1315],{"class":164,"line":165},[162,1282,1283],{"class":168},"nums ",[162,1285,173],{"class":172},[162,1287,176],{"class":168},[162,1289,312],{"class":207},[162,1291,183],{"class":168},[162,1293,208],{"class":207},[162,1295,183],{"class":168},[162,1297,213],{"class":207},[162,1299,183],{"class":168},[162,1301,218],{"class":207},[162,1303,183],{"class":168},[162,1305,223],{"class":207},[162,1307,183],{"class":168},[162,1309,637],{"class":207},[162,1311,183],{"class":168},[162,1313,1314],{"class":207},"6",[162,1316,194],{"class":168},[162,1318,1319],{"class":164,"line":197},[162,1320,301],{"emptyLinePlaceholder":300},[162,1322,1323,1325,1328,1330,1333,1335,1338],{"class":164,"line":228},[162,1324,306],{"class":207},[162,1326,1327],{"class":168},"(nums[",[162,1329,208],{"class":207},[162,1331,1332],{"class":168},":",[162,1334,223],{"class":207},[162,1336,1337],{"class":168},"])    ",[162,1339,1340],{"class":361},"# [1, 2, 3]\n",[162,1342,1343,1345,1348,1350,1353],{"class":164,"line":252},[162,1344,306],{"class":207},[162,1346,1347],{"class":168},"(nums[:",[162,1349,218],{"class":207},[162,1351,1352],{"class":168},"])     ",[162,1354,1355],{"class":361},"# [0, 1, 2]\n",[162,1357,1358,1360,1362,1364,1367],{"class":164,"line":328},[162,1359,306],{"class":207},[162,1361,1327],{"class":168},[162,1363,218],{"class":207},[162,1365,1366],{"class":168},":])     ",[162,1368,1369],{"class":361},"# [3, 4, 5, 6]\n",[162,1371,1372,1374,1377,1379,1381],{"class":164,"line":466},[162,1373,306],{"class":207},[162,1375,1376],{"class":168},"(nums[::",[162,1378,213],{"class":207},[162,1380,1337],{"class":168},[162,1382,1383],{"class":361},"# [0, 2, 4, 6]\n",[162,1385,1386,1388,1390,1392,1394,1397],{"class":164,"line":471},[162,1387,306],{"class":207},[162,1389,1376],{"class":168},[162,1391,353],{"class":172},[162,1393,208],{"class":207},[162,1395,1396],{"class":168},"])   ",[162,1398,1399],{"class":361},"# 反转\n",[19,1401,1402],{},"字符串切片：",[153,1404,1406],{"className":155,"code":1405,"language":157,"meta":158,"style":158},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[71,1407,1408,1417,1431],{"__ignoreMap":158},[162,1409,1410,1412,1414],{"class":164,"line":165},[162,1411,1123],{"class":168},[162,1413,173],{"class":172},[162,1415,1416],{"class":179}," \"abcdef\"\n",[162,1418,1419,1421,1423,1425,1427,1429],{"class":164,"line":197},[162,1420,306],{"class":207},[162,1422,1139],{"class":168},[162,1424,208],{"class":207},[162,1426,1332],{"class":168},[162,1428,223],{"class":207},[162,1430,315],{"class":168},[162,1432,1433,1435,1438,1440,1442],{"class":164,"line":228},[162,1434,306],{"class":207},[162,1436,1437],{"class":168},"(text[::",[162,1439,353],{"class":172},[162,1441,208],{"class":207},[162,1443,315],{"class":168},[14,1445,1447],{"id":1446},"_69-集合set","6.9 集合set",[19,1449,1450],{},"集合特点：",[1452,1453,1454,1458,1461],"ol",{},[1455,1456,1457],"li",{},"无序。",[1455,1459,1460],{},"元素不重复。",[1455,1462,1463],{},"可以做交集、并集、差集。",[153,1465,1467],{"className":155,"code":1466,"language":157,"meta":158,"style":158},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[71,1468,1469,1499],{"__ignoreMap":158},[162,1470,1471,1473,1475,1478,1480,1482,1484,1486,1488,1490,1492,1494,1496],{"class":164,"line":165},[162,1472,1283],{"class":168},[162,1474,173],{"class":172},[162,1476,1477],{"class":168}," {",[162,1479,208],{"class":207},[162,1481,183],{"class":168},[162,1483,213],{"class":207},[162,1485,183],{"class":168},[162,1487,218],{"class":207},[162,1489,183],{"class":168},[162,1491,218],{"class":207},[162,1493,183],{"class":168},[162,1495,223],{"class":207},[162,1497,1498],{"class":168},"}\n",[162,1500,1501,1503],{"class":164,"line":197},[162,1502,306],{"class":207},[162,1504,1505],{"class":168},"(nums)\n",[19,1507,1508],{},"创建空集合：",[153,1510,1512],{"className":155,"code":1511,"language":157,"meta":158,"style":158},"s = set()\n",[71,1513,1514],{"__ignoreMap":158},[162,1515,1516,1519,1521,1524],{"class":164,"line":165},[162,1517,1518],{"class":168},"s ",[162,1520,173],{"class":172},[162,1522,1523],{"class":207}," set",[162,1525,1526],{"class":168},"()\n",[19,1528,1529,1530,1533],{},"注意：",[71,1531,1532],{},"{}"," 是空字典，不是空集合。",[19,1535,1536],{},"集合常用操作：",[153,1538,1540],{"className":155,"code":1539,"language":157,"meta":158,"style":158},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[71,1541,1542,1562,1566,1575,1584,1593],{"__ignoreMap":158},[162,1543,1544,1546,1548,1550,1552,1554,1556,1558,1560],{"class":164,"line":165},[162,1545,1518],{"class":168},[162,1547,173],{"class":172},[162,1549,1477],{"class":168},[162,1551,208],{"class":207},[162,1553,183],{"class":168},[162,1555,213],{"class":207},[162,1557,183],{"class":168},[162,1559,218],{"class":207},[162,1561,1498],{"class":168},[162,1563,1564],{"class":164,"line":197},[162,1565,301],{"emptyLinePlaceholder":300},[162,1567,1568,1571,1573],{"class":164,"line":228},[162,1569,1570],{"class":168},"s.add(",[162,1572,223],{"class":207},[162,1574,434],{"class":168},[162,1576,1577,1580,1582],{"class":164,"line":252},[162,1578,1579],{"class":168},"s.remove(",[162,1581,213],{"class":207},[162,1583,434],{"class":168},[162,1585,1586,1589,1591],{"class":164,"line":328},[162,1587,1588],{"class":168},"s.discard(",[162,1590,1006],{"class":207},[162,1592,434],{"class":168},[162,1594,1595,1597,1599,1601],{"class":164,"line":466},[162,1596,306],{"class":207},[162,1598,604],{"class":168},[162,1600,607],{"class":207},[162,1602,1603],{"class":168},"(s))\n",[19,1605,1606],{},"交并差：",[153,1608,1610],{"className":155,"code":1609,"language":157,"meta":158,"style":158},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[71,1611,1612,1633,1654,1658,1674,1688],{"__ignoreMap":158},[162,1613,1614,1617,1619,1621,1623,1625,1627,1629,1631],{"class":164,"line":165},[162,1615,1616],{"class":168},"a ",[162,1618,173],{"class":172},[162,1620,1477],{"class":168},[162,1622,208],{"class":207},[162,1624,183],{"class":168},[162,1626,213],{"class":207},[162,1628,183],{"class":168},[162,1630,218],{"class":207},[162,1632,1498],{"class":168},[162,1634,1635,1638,1640,1642,1644,1646,1648,1650,1652],{"class":164,"line":197},[162,1636,1637],{"class":168},"b ",[162,1639,173],{"class":172},[162,1641,1477],{"class":168},[162,1643,218],{"class":207},[162,1645,183],{"class":168},[162,1647,223],{"class":207},[162,1649,183],{"class":168},[162,1651,637],{"class":207},[162,1653,1498],{"class":168},[162,1655,1656],{"class":164,"line":228},[162,1657,301],{"emptyLinePlaceholder":300},[162,1659,1660,1662,1665,1668,1671],{"class":164,"line":252},[162,1661,306],{"class":207},[162,1663,1664],{"class":168},"(a ",[162,1666,1667],{"class":172},"&",[162,1669,1670],{"class":168}," b)  ",[162,1672,1673],{"class":361},"# 交集\n",[162,1675,1676,1678,1680,1683,1685],{"class":164,"line":328},[162,1677,306],{"class":207},[162,1679,1664],{"class":168},[162,1681,1682],{"class":172},"|",[162,1684,1670],{"class":168},[162,1686,1687],{"class":361},"# 并集\n",[162,1689,1690,1692,1694,1696,1698],{"class":164,"line":466},[162,1691,306],{"class":207},[162,1693,1664],{"class":168},[162,1695,353],{"class":172},[162,1697,1670],{"class":168},[162,1699,1700],{"class":361},"# 差集\n",[14,1702,1704],{"id":1703},"_610-字典dict","6.10 字典dict",[19,1706,1707],{},"字典通过 key-value 保存数据。",[153,1709,1711],{"className":155,"code":1710,"language":157,"meta":158,"style":158},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[71,1712,1713,1723,1736,1747,1757],{"__ignoreMap":158},[162,1714,1715,1718,1720],{"class":164,"line":165},[162,1716,1717],{"class":168},"student ",[162,1719,173],{"class":172},[162,1721,1722],{"class":168}," {\n",[162,1724,1725,1728,1731,1733],{"class":164,"line":197},[162,1726,1727],{"class":179},"    \"name\"",[162,1729,1730],{"class":168},": ",[162,1732,180],{"class":179},[162,1734,1735],{"class":168},",\n",[162,1737,1738,1741,1743,1745],{"class":164,"line":228},[162,1739,1740],{"class":179},"    \"age\"",[162,1742,1730],{"class":168},[162,1744,242],{"class":207},[162,1746,1735],{"class":168},[162,1748,1749,1752,1754],{"class":164,"line":252},[162,1750,1751],{"class":179},"    \"score\"",[162,1753,1730],{"class":168},[162,1755,1756],{"class":207},"95\n",[162,1758,1759],{"class":164,"line":328},[162,1760,1498],{"class":168},[19,1762,1763],{},"获取值：",[153,1765,1767],{"className":155,"code":1766,"language":157,"meta":158,"style":158},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[71,1768,1769,1781],{"__ignoreMap":158},[162,1770,1771,1773,1776,1779],{"class":164,"line":165},[162,1772,306],{"class":207},[162,1774,1775],{"class":168},"(student[",[162,1777,1778],{"class":179},"\"name\"",[162,1780,315],{"class":168},[162,1782,1783,1785,1788,1790],{"class":164,"line":197},[162,1784,306],{"class":207},[162,1786,1787],{"class":168},"(student.get(",[162,1789,1778],{"class":179},[162,1791,586],{"class":168},[19,1793,1794],{},"区别：",[153,1796,1798],{"className":155,"code":1797,"language":157,"meta":158,"style":158},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[71,1799,1800,1814],{"__ignoreMap":158},[162,1801,1802,1805,1808,1811],{"class":164,"line":165},[162,1803,1804],{"class":168},"student[",[162,1806,1807],{"class":179},"\"address\"",[162,1809,1810],{"class":168},"]     ",[162,1812,1813],{"class":361},"# key不存在会报错\n",[162,1815,1816,1819,1821,1824],{"class":164,"line":197},[162,1817,1818],{"class":168},"student.get(",[162,1820,1807],{"class":179},[162,1822,1823],{"class":168},") ",[162,1825,1826],{"class":361},"# key不存在返回None\n",[19,1828,1829],{},"设置默认值：",[153,1831,1833],{"className":155,"code":1832,"language":157,"meta":158,"style":158},"print(student.get(\"address\", \"未知\"))\n",[71,1834,1835],{"__ignoreMap":158},[162,1836,1837,1839,1841,1843,1845,1848],{"class":164,"line":165},[162,1838,306],{"class":207},[162,1840,1787],{"class":168},[162,1842,1807],{"class":179},[162,1844,183],{"class":168},[162,1846,1847],{"class":179},"\"未知\"",[162,1849,586],{"class":168},[19,1851,1852],{},"新增和修改：",[153,1854,1856],{"className":155,"code":1855,"language":157,"meta":158,"style":158},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[71,1857,1858,1872],{"__ignoreMap":158},[162,1859,1860,1862,1865,1867,1869],{"class":164,"line":165},[162,1861,1804],{"class":168},[162,1863,1864],{"class":179},"\"age\"",[162,1866,1204],{"class":168},[162,1868,173],{"class":172},[162,1870,1871],{"class":207}," 19\n",[162,1873,1874,1876,1878,1880,1882],{"class":164,"line":197},[162,1875,1804],{"class":168},[162,1877,1807],{"class":179},[162,1879,1204],{"class":168},[162,1881,173],{"class":172},[162,1883,1884],{"class":179}," \"北京\"\n",[19,1886,1887],{},"删除：",[153,1889,1891],{"className":155,"code":1890,"language":157,"meta":158,"style":158},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[71,1892,1893,1908,1919],{"__ignoreMap":158},[162,1894,1895,1898,1900,1903,1906],{"class":164,"line":165},[162,1896,1897],{"class":168},"score ",[162,1899,173],{"class":172},[162,1901,1902],{"class":168}," student.pop(",[162,1904,1905],{"class":179},"\"score\"",[162,1907,434],{"class":168},[162,1909,1910,1912,1915,1917],{"class":164,"line":197},[162,1911,522],{"class":172},[162,1913,1914],{"class":168}," student[",[162,1916,1864],{"class":179},[162,1918,194],{"class":168},[162,1920,1921],{"class":164,"line":228},[162,1922,1923],{"class":168},"student.clear()\n",[14,1925,1927],{"id":1926},"_611-字典遍历","6.11 字典遍历",[19,1929,1930],{},"遍历 key：",[153,1932,1934],{"className":155,"code":1933,"language":157,"meta":158,"style":158},"for key in student:\n    print(key, student[key])\n",[71,1935,1936,1948],{"__ignoreMap":158},[162,1937,1938,1940,1943,1945],{"class":164,"line":165},[162,1939,808],{"class":172},[162,1941,1942],{"class":168}," key ",[162,1944,814],{"class":172},[162,1946,1947],{"class":168}," student:\n",[162,1949,1950,1952],{"class":164,"line":197},[162,1951,822],{"class":207},[162,1953,1954],{"class":168},"(key, student[key])\n",[19,1956,1957],{},"遍历 value：",[153,1959,1961],{"className":155,"code":1960,"language":157,"meta":158,"style":158},"for value in student.values():\n    print(value)\n",[71,1962,1963,1975],{"__ignoreMap":158},[162,1964,1965,1967,1970,1972],{"class":164,"line":165},[162,1966,808],{"class":172},[162,1968,1969],{"class":168}," value ",[162,1971,814],{"class":172},[162,1973,1974],{"class":168}," student.values():\n",[162,1976,1977,1979],{"class":164,"line":197},[162,1978,822],{"class":207},[162,1980,1981],{"class":168},"(value)\n",[19,1983,1984],{},"遍历 key 和 value：",[153,1986,1988],{"className":155,"code":1987,"language":157,"meta":158,"style":158},"for key, value in student.items():\n    print(key, value)\n",[71,1989,1990,2002],{"__ignoreMap":158},[162,1991,1992,1994,1997,1999],{"class":164,"line":165},[162,1993,808],{"class":172},[162,1995,1996],{"class":168}," key, value ",[162,1998,814],{"class":172},[162,2000,2001],{"class":168}," student.items():\n",[162,2003,2004,2006],{"class":164,"line":197},[162,2005,822],{"class":207},[162,2007,2008],{"class":168},"(key, value)\n",[14,2010,2012],{"id":2011},"_612-嵌套容器","6.12 嵌套容器",[19,2014,2015],{},"列表中保存字典，是项目中最常见的结构之一。",[153,2017,2019],{"className":155,"code":2018,"language":157,"meta":158,"style":158},"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",[71,2020,2021,2031,2062,2092,2122,2126,2130,2142],{"__ignoreMap":158},[162,2022,2023,2026,2028],{"class":164,"line":165},[162,2024,2025],{"class":168},"students ",[162,2027,173],{"class":172},[162,2029,2030],{"class":168}," [\n",[162,2032,2033,2036,2038,2040,2042,2044,2046,2048,2050,2052,2054,2056,2059],{"class":164,"line":197},[162,2034,2035],{"class":168},"    {",[162,2037,1778],{"class":179},[162,2039,1730],{"class":168},[162,2041,180],{"class":179},[162,2043,183],{"class":168},[162,2045,1864],{"class":179},[162,2047,1730],{"class":168},[162,2049,242],{"class":207},[162,2051,183],{"class":168},[162,2053,1905],{"class":179},[162,2055,1730],{"class":168},[162,2057,2058],{"class":207},"95",[162,2060,2061],{"class":168},"},\n",[162,2063,2064,2066,2068,2070,2072,2074,2076,2078,2081,2083,2085,2087,2090],{"class":164,"line":228},[162,2065,2035],{"class":168},[162,2067,1778],{"class":179},[162,2069,1730],{"class":168},[162,2071,186],{"class":179},[162,2073,183],{"class":168},[162,2075,1864],{"class":179},[162,2077,1730],{"class":168},[162,2079,2080],{"class":207},"17",[162,2082,183],{"class":168},[162,2084,1905],{"class":179},[162,2086,1730],{"class":168},[162,2088,2089],{"class":207},"88",[162,2091,2061],{"class":168},[162,2093,2094,2096,2098,2100,2102,2104,2106,2108,2111,2113,2115,2117,2120],{"class":164,"line":252},[162,2095,2035],{"class":168},[162,2097,1778],{"class":179},[162,2099,1730],{"class":168},[162,2101,191],{"class":179},[162,2103,183],{"class":168},[162,2105,1864],{"class":179},[162,2107,1730],{"class":168},[162,2109,2110],{"class":207},"19",[162,2112,183],{"class":168},[162,2114,1905],{"class":179},[162,2116,1730],{"class":168},[162,2118,2119],{"class":207},"72",[162,2121,2061],{"class":168},[162,2123,2124],{"class":164,"line":328},[162,2125,194],{"class":168},[162,2127,2128],{"class":164,"line":466},[162,2129,301],{"emptyLinePlaceholder":300},[162,2131,2132,2134,2137,2139],{"class":164,"line":471},[162,2133,808],{"class":172},[162,2135,2136],{"class":168}," student ",[162,2138,814],{"class":172},[162,2140,2141],{"class":168}," students:\n",[162,2143,2144,2146,2148,2150,2153,2155],{"class":164,"line":687},[162,2145,822],{"class":207},[162,2147,1775],{"class":168},[162,2149,1778],{"class":179},[162,2151,2152],{"class":168},"], student[",[162,2154,1905],{"class":179},[162,2156,315],{"class":168},[19,2158,2159],{},"统计平均分：",[153,2161,2163],{"className":155,"code":2162,"language":157,"meta":158,"style":158},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[71,2164,2165,2173,2177,2187,2199,2203,2218],{"__ignoreMap":158},[162,2166,2167,2169,2171],{"class":164,"line":165},[162,2168,897],{"class":168},[162,2170,173],{"class":172},[162,2172,902],{"class":207},[162,2174,2175],{"class":164,"line":197},[162,2176,301],{"emptyLinePlaceholder":300},[162,2178,2179,2181,2183,2185],{"class":164,"line":228},[162,2180,808],{"class":172},[162,2182,2136],{"class":168},[162,2184,814],{"class":172},[162,2186,2141],{"class":168},[162,2188,2189,2191,2193,2195,2197],{"class":164,"line":252},[162,2190,923],{"class":168},[162,2192,926],{"class":172},[162,2194,1914],{"class":168},[162,2196,1905],{"class":179},[162,2198,194],{"class":168},[162,2200,2201],{"class":164,"line":328},[162,2202,301],{"emptyLinePlaceholder":300},[162,2204,2205,2207,2209,2211,2213,2215],{"class":164,"line":466},[162,2206,938],{"class":168},[162,2208,173],{"class":172},[162,2210,943],{"class":168},[162,2212,946],{"class":172},[162,2214,949],{"class":207},[162,2216,2217],{"class":168},"(students)\n",[162,2219,2220,2222,2224,2226,2228,2230,2232,2234,2236,2238],{"class":164,"line":471},[162,2221,306],{"class":207},[162,2223,604],{"class":168},[162,2225,961],{"class":172},[162,2227,964],{"class":179},[162,2229,967],{"class":207},[162,2231,970],{"class":168},[162,2233,973],{"class":172},[162,2235,976],{"class":207},[162,2237,979],{"class":179},[162,2239,434],{"class":168},[19,2241,2242],{},"查找学生：",[153,2244,2246],{"className":155,"code":2245,"language":157,"meta":158,"style":158},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[71,2247,2248,2265,2269,2279,2296,2304,2309,2317],{"__ignoreMap":158},[162,2249,2250,2253,2255,2258,2260,2263],{"class":164,"line":165},[162,2251,2252],{"class":168},"target ",[162,2254,173],{"class":172},[162,2256,2257],{"class":207}," input",[162,2259,604],{"class":168},[162,2261,2262],{"class":179},"\"请输入学生姓名:\"",[162,2264,434],{"class":168},[162,2266,2267],{"class":164,"line":197},[162,2268,301],{"emptyLinePlaceholder":300},[162,2270,2271,2273,2275,2277],{"class":164,"line":228},[162,2272,808],{"class":172},[162,2274,2136],{"class":168},[162,2276,814],{"class":172},[162,2278,2141],{"class":168},[162,2280,2281,2284,2286,2288,2290,2293],{"class":164,"line":252},[162,2282,2283],{"class":172},"    if",[162,2285,1914],{"class":168},[162,2287,1778],{"class":179},[162,2289,1204],{"class":168},[162,2291,2292],{"class":172},"==",[162,2294,2295],{"class":168}," target:\n",[162,2297,2298,2301],{"class":164,"line":328},[162,2299,2300],{"class":207},"        print",[162,2302,2303],{"class":168},"(student)\n",[162,2305,2306],{"class":164,"line":466},[162,2307,2308],{"class":172},"        break\n",[162,2310,2311,2314],{"class":164,"line":471},[162,2312,2313],{"class":172},"else",[162,2315,2316],{"class":168},":\n",[162,2318,2319,2321,2323,2326],{"class":164,"line":687},[162,2320,822],{"class":207},[162,2322,604],{"class":168},[162,2324,2325],{"class":179},"\"没有找到\"",[162,2327,434],{"class":168},[14,2329,2331],{"id":2330},"_613-容器通用操作","6.13 容器通用操作",[19,2333,2334],{},"长度：",[153,2336,2338],{"className":155,"code":2337,"language":157,"meta":158,"style":158},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[71,2339,2340,2359,2369],{"__ignoreMap":158},[162,2341,2342,2344,2347,2349,2351,2353,2355,2357],{"class":164,"line":165},[162,2343,607],{"class":207},[162,2345,2346],{"class":168},"([",[162,2348,208],{"class":207},[162,2350,183],{"class":168},[162,2352,213],{"class":207},[162,2354,183],{"class":168},[162,2356,218],{"class":207},[162,2358,315],{"class":168},[162,2360,2361,2363,2365,2367],{"class":164,"line":197},[162,2362,607],{"class":207},[162,2364,604],{"class":168},[162,2366,106],{"class":179},[162,2368,434],{"class":168},[162,2370,2371,2373,2376,2378,2380,2382],{"class":164,"line":228},[162,2372,607],{"class":207},[162,2374,2375],{"class":168},"({",[162,2377,1778],{"class":179},[162,2379,1730],{"class":168},[162,2381,180],{"class":179},[162,2383,2384],{"class":168},"})\n",[19,2386,2387],{},"最大最小：",[153,2389,2391],{"className":155,"code":2390,"language":157,"meta":158,"style":158},"max([1, 2, 3])\nmin([1, 2, 3])\n",[71,2392,2393,2412],{"__ignoreMap":158},[162,2394,2395,2398,2400,2402,2404,2406,2408,2410],{"class":164,"line":165},[162,2396,2397],{"class":207},"max",[162,2399,2346],{"class":168},[162,2401,208],{"class":207},[162,2403,183],{"class":168},[162,2405,213],{"class":207},[162,2407,183],{"class":168},[162,2409,218],{"class":207},[162,2411,315],{"class":168},[162,2413,2414,2417,2419,2421,2423,2425,2427,2429],{"class":164,"line":197},[162,2415,2416],{"class":207},"min",[162,2418,2346],{"class":168},[162,2420,208],{"class":207},[162,2422,183],{"class":168},[162,2424,213],{"class":207},[162,2426,183],{"class":168},[162,2428,218],{"class":207},[162,2430,315],{"class":168},[19,2432,2433],{},"求和：",[153,2435,2437],{"className":155,"code":2436,"language":157,"meta":158,"style":158},"sum([1, 2, 3])\n",[71,2438,2439],{"__ignoreMap":158},[162,2440,2441,2444,2446,2448,2450,2452,2454,2456],{"class":164,"line":165},[162,2442,2443],{"class":207},"sum",[162,2445,2346],{"class":168},[162,2447,208],{"class":207},[162,2449,183],{"class":168},[162,2451,213],{"class":207},[162,2453,183],{"class":168},[162,2455,218],{"class":207},[162,2457,315],{"class":168},[19,2459,613],{},[153,2461,2463],{"className":155,"code":2462,"language":157,"meta":158,"style":158},"sorted([3, 1, 2])\n",[71,2464,2465],{"__ignoreMap":158},[162,2466,2467,2470,2472,2474,2476,2478,2480,2482],{"class":164,"line":165},[162,2468,2469],{"class":207},"sorted",[162,2471,2346],{"class":168},[162,2473,218],{"class":207},[162,2475,183],{"class":168},[162,2477,208],{"class":207},[162,2479,183],{"class":168},[162,2481,213],{"class":207},[162,2483,315],{"class":168},[19,2485,2486],{},"类型转换：",[153,2488,2490],{"className":155,"code":2489,"language":157,"meta":158,"style":158},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[71,2491,2492,2503,2522],{"__ignoreMap":158},[162,2493,2494,2497,2499,2501],{"class":164,"line":165},[162,2495,2496],{"class":207},"list",[162,2498,604],{"class":168},[162,2500,106],{"class":179},[162,2502,434],{"class":168},[162,2504,2505,2508,2510,2512,2514,2516,2518,2520],{"class":164,"line":197},[162,2506,2507],{"class":207},"tuple",[162,2509,2346],{"class":168},[162,2511,208],{"class":207},[162,2513,183],{"class":168},[162,2515,213],{"class":207},[162,2517,183],{"class":168},[162,2519,218],{"class":207},[162,2521,315],{"class":168},[162,2523,2524,2527,2529,2531,2533,2535,2537,2539,2541,2543],{"class":164,"line":228},[162,2525,2526],{"class":207},"set",[162,2528,2346],{"class":168},[162,2530,208],{"class":207},[162,2532,183],{"class":168},[162,2534,208],{"class":207},[162,2536,183],{"class":168},[162,2538,213],{"class":207},[162,2540,183],{"class":168},[162,2542,218],{"class":207},[162,2544,315],{"class":168},[19,2546,2547],{},"成员判断：",[153,2549,2551],{"className":155,"code":2550,"language":157,"meta":158,"style":158},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[71,2552,2553,2570,2594],{"__ignoreMap":158},[162,2554,2555,2557,2559,2562,2565,2568],{"class":164,"line":165},[162,2556,306],{"class":207},[162,2558,604],{"class":168},[162,2560,2561],{"class":179},"\"a\"",[162,2563,2564],{"class":172}," in",[162,2566,2567],{"class":179}," \"abc\"",[162,2569,434],{"class":168},[162,2571,2572,2574,2576,2578,2580,2582,2584,2586,2588,2590,2592],{"class":164,"line":197},[162,2573,306],{"class":207},[162,2575,604],{"class":168},[162,2577,208],{"class":207},[162,2579,2564],{"class":172},[162,2581,176],{"class":168},[162,2583,208],{"class":207},[162,2585,183],{"class":168},[162,2587,213],{"class":207},[162,2589,183],{"class":168},[162,2591,218],{"class":207},[162,2593,315],{"class":168},[162,2595,2596,2598,2600,2602,2604,2606,2608,2610,2612],{"class":164,"line":228},[162,2597,306],{"class":207},[162,2599,604],{"class":168},[162,2601,1778],{"class":179},[162,2603,2564],{"class":172},[162,2605,1477],{"class":168},[162,2607,1778],{"class":179},[162,2609,1730],{"class":168},[162,2611,180],{"class":179},[162,2613,2384],{"class":168},[14,2615,2617],{"id":2616},"_614-推导式","6.14 推导式",[19,2619,2620],{},"推导式用于快速生成容器。",[19,2622,2623],{},"列表推导式：",[153,2625,2627],{"className":155,"code":2626,"language":157,"meta":158,"style":158},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[71,2628,2629,2659],{"__ignoreMap":158},[162,2630,2631,2633,2635,2638,2640,2643,2645,2648,2650,2652,2654,2656],{"class":164,"line":165},[162,2632,1283],{"class":168},[162,2634,173],{"class":172},[162,2636,2637],{"class":168}," [i ",[162,2639,808],{"class":172},[162,2641,2642],{"class":168}," i ",[162,2644,814],{"class":172},[162,2646,2647],{"class":207}," range",[162,2649,604],{"class":168},[162,2651,208],{"class":207},[162,2653,183],{"class":168},[162,2655,1314],{"class":207},[162,2657,2658],{"class":168},")]\n",[162,2660,2661,2663],{"class":164,"line":197},[162,2662,306],{"class":207},[162,2664,1505],{"class":168},[19,2666,2667],{},"带条件：",[153,2669,2671],{"className":155,"code":2670,"language":157,"meta":158,"style":158},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[71,2672,2673,2720],{"__ignoreMap":158},[162,2674,2675,2678,2680,2682,2684,2686,2688,2690,2692,2694,2696,2699,2701,2704,2706,2709,2712,2715,2718],{"class":164,"line":165},[162,2676,2677],{"class":168},"even_nums ",[162,2679,173],{"class":172},[162,2681,2637],{"class":168},[162,2683,808],{"class":172},[162,2685,2642],{"class":168},[162,2687,814],{"class":172},[162,2689,2647],{"class":207},[162,2691,604],{"class":168},[162,2693,208],{"class":207},[162,2695,183],{"class":168},[162,2697,2698],{"class":207},"101",[162,2700,1823],{"class":168},[162,2702,2703],{"class":172},"if",[162,2705,2642],{"class":168},[162,2707,2708],{"class":172},"%",[162,2710,2711],{"class":207}," 2",[162,2713,2714],{"class":172}," ==",[162,2716,2717],{"class":207}," 0",[162,2719,194],{"class":168},[162,2721,2722,2724],{"class":164,"line":197},[162,2723,306],{"class":207},[162,2725,2726],{"class":168},"(even_nums)\n",[19,2728,2729],{},"字典推导式：",[153,2731,2733],{"className":155,"code":2732,"language":157,"meta":158,"style":158},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[71,2734,2735,2770],{"__ignoreMap":158},[162,2736,2737,2740,2742,2745,2748,2750,2753,2755,2757,2759,2761,2763,2765,2767],{"class":164,"line":165},[162,2738,2739],{"class":168},"squares ",[162,2741,173],{"class":172},[162,2743,2744],{"class":168}," {i: i ",[162,2746,2747],{"class":172},"**",[162,2749,2711],{"class":207},[162,2751,2752],{"class":172}," for",[162,2754,2642],{"class":168},[162,2756,814],{"class":172},[162,2758,2647],{"class":207},[162,2760,604],{"class":168},[162,2762,208],{"class":207},[162,2764,183],{"class":168},[162,2766,1314],{"class":207},[162,2768,2769],{"class":168},")}\n",[162,2771,2772,2774],{"class":164,"line":197},[162,2773,306],{"class":207},[162,2775,2776],{"class":168},"(squares)\n",[19,2778,2779],{},"集合推导式：",[153,2781,2783],{"className":155,"code":2782,"language":157,"meta":158,"style":158},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[71,2784,2785,2806],{"__ignoreMap":158},[162,2786,2787,2790,2792,2795,2797,2799,2801,2804],{"class":164,"line":165},[162,2788,2789],{"class":168},"chars ",[162,2791,173],{"class":172},[162,2793,2794],{"class":168}," {ch ",[162,2796,808],{"class":172},[162,2798,1166],{"class":168},[162,2800,814],{"class":172},[162,2802,2803],{"class":179}," \"hello\"",[162,2805,1498],{"class":168},[162,2807,2808,2810],{"class":164,"line":197},[162,2809,306],{"class":207},[162,2811,2812],{"class":168},"(chars)\n",[19,2814,2815],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,2817,2819],{"id":2818},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[153,2821,2823],{"className":155,"code":2822,"language":157,"meta":158,"style":158},"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",[71,2824,2825,2833,2853,2873,2893,2914,2918,2922,2930,2944,2953,2958,2969,2982,2987,3009,3020,3025,3044,3050,3055,3070,3075,3098,3138],{"__ignoreMap":158},[162,2826,2827,2829,2831],{"class":164,"line":165},[162,2828,2025],{"class":168},[162,2830,173],{"class":172},[162,2832,2030],{"class":168},[162,2834,2835,2837,2839,2841,2843,2845,2847,2849,2851],{"class":164,"line":197},[162,2836,2035],{"class":168},[162,2838,1778],{"class":179},[162,2840,1730],{"class":168},[162,2842,180],{"class":179},[162,2844,183],{"class":168},[162,2846,1905],{"class":179},[162,2848,1730],{"class":168},[162,2850,2058],{"class":207},[162,2852,2061],{"class":168},[162,2854,2855,2857,2859,2861,2863,2865,2867,2869,2871],{"class":164,"line":228},[162,2856,2035],{"class":168},[162,2858,1778],{"class":179},[162,2860,1730],{"class":168},[162,2862,186],{"class":179},[162,2864,183],{"class":168},[162,2866,1905],{"class":179},[162,2868,1730],{"class":168},[162,2870,2089],{"class":207},[162,2872,2061],{"class":168},[162,2874,2875,2877,2879,2881,2883,2885,2887,2889,2891],{"class":164,"line":252},[162,2876,2035],{"class":168},[162,2878,1778],{"class":179},[162,2880,1730],{"class":168},[162,2882,191],{"class":179},[162,2884,183],{"class":168},[162,2886,1905],{"class":179},[162,2888,1730],{"class":168},[162,2890,2119],{"class":207},[162,2892,2061],{"class":168},[162,2894,2895,2897,2899,2901,2903,2905,2907,2909,2912],{"class":164,"line":328},[162,2896,2035],{"class":168},[162,2898,1778],{"class":179},[162,2900,1730],{"class":168},[162,2902,446],{"class":179},[162,2904,183],{"class":168},[162,2906,1905],{"class":179},[162,2908,1730],{"class":168},[162,2910,2911],{"class":207},"59",[162,2913,2061],{"class":168},[162,2915,2916],{"class":164,"line":466},[162,2917,194],{"class":168},[162,2919,2920],{"class":164,"line":471},[162,2921,301],{"emptyLinePlaceholder":300},[162,2923,2924,2926,2928],{"class":164,"line":687},[162,2925,897],{"class":168},[162,2927,173],{"class":172},[162,2929,902],{"class":207},[162,2931,2932,2935,2937,2940,2942],{"class":164,"line":692},[162,2933,2934],{"class":168},"max_student ",[162,2936,173],{"class":172},[162,2938,2939],{"class":168}," students[",[162,2941,312],{"class":207},[162,2943,194],{"class":168},[162,2945,2946,2949,2951],{"class":164,"line":698},[162,2947,2948],{"class":168},"passed ",[162,2950,173],{"class":172},[162,2952,260],{"class":168},[162,2954,2956],{"class":164,"line":2955},11,[162,2957,301],{"emptyLinePlaceholder":300},[162,2959,2961,2963,2965,2967],{"class":164,"line":2960},12,[162,2962,808],{"class":172},[162,2964,2136],{"class":168},[162,2966,814],{"class":172},[162,2968,2141],{"class":168},[162,2970,2972,2974,2976,2978,2980],{"class":164,"line":2971},13,[162,2973,923],{"class":168},[162,2975,926],{"class":172},[162,2977,1914],{"class":168},[162,2979,1905],{"class":179},[162,2981,194],{"class":168},[162,2983,2985],{"class":164,"line":2984},14,[162,2986,301],{"emptyLinePlaceholder":300},[162,2988,2990,2992,2994,2996,2998,3001,3004,3006],{"class":164,"line":2989},15,[162,2991,2283],{"class":172},[162,2993,1914],{"class":168},[162,2995,1905],{"class":179},[162,2997,1204],{"class":168},[162,2999,3000],{"class":172},">",[162,3002,3003],{"class":168}," max_student[",[162,3005,1905],{"class":179},[162,3007,3008],{"class":168},"]:\n",[162,3010,3012,3015,3017],{"class":164,"line":3011},16,[162,3013,3014],{"class":168},"        max_student ",[162,3016,173],{"class":172},[162,3018,3019],{"class":168}," student\n",[162,3021,3023],{"class":164,"line":3022},17,[162,3024,301],{"emptyLinePlaceholder":300},[162,3026,3028,3030,3032,3034,3036,3039,3042],{"class":164,"line":3027},18,[162,3029,2283],{"class":172},[162,3031,1914],{"class":168},[162,3033,1905],{"class":179},[162,3035,1204],{"class":168},[162,3037,3038],{"class":172},">=",[162,3040,3041],{"class":207}," 60",[162,3043,2316],{"class":168},[162,3045,3047],{"class":164,"line":3046},19,[162,3048,3049],{"class":168},"        passed.append(student)\n",[162,3051,3053],{"class":164,"line":3052},20,[162,3054,301],{"emptyLinePlaceholder":300},[162,3056,3058,3060,3062,3064,3066,3068],{"class":164,"line":3057},21,[162,3059,938],{"class":168},[162,3061,173],{"class":172},[162,3063,943],{"class":168},[162,3065,946],{"class":172},[162,3067,949],{"class":207},[162,3069,2217],{"class":168},[162,3071,3073],{"class":164,"line":3072},22,[162,3074,301],{"emptyLinePlaceholder":300},[162,3076,3078,3080,3082,3084,3086,3088,3090,3092,3094,3096],{"class":164,"line":3077},23,[162,3079,306],{"class":207},[162,3081,604],{"class":168},[162,3083,961],{"class":172},[162,3085,964],{"class":179},[162,3087,967],{"class":207},[162,3089,970],{"class":168},[162,3091,973],{"class":172},[162,3093,976],{"class":207},[162,3095,979],{"class":179},[162,3097,434],{"class":168},[162,3099,3101,3103,3105,3107,3110,3112,3115,3118,3121,3123,3125,3127,3130,3132,3134,3136],{"class":164,"line":3100},24,[162,3102,306],{"class":207},[162,3104,604],{"class":168},[162,3106,961],{"class":172},[162,3108,3109],{"class":179},"\"最高分学生:",[162,3111,967],{"class":207},[162,3113,3114],{"class":168},"max_student[",[162,3116,3117],{"class":179},"'name'",[162,3119,3120],{"class":168},"]",[162,3122,976],{"class":207},[162,3124,1477],{"class":207},[162,3126,3114],{"class":168},[162,3128,3129],{"class":179},"'score'",[162,3131,3120],{"class":168},[162,3133,976],{"class":207},[162,3135,979],{"class":179},[162,3137,434],{"class":168},[162,3139,3141,3143,3145,3147,3150,3153,3156,3158,3160],{"class":164,"line":3140},25,[162,3142,306],{"class":207},[162,3144,604],{"class":168},[162,3146,961],{"class":172},[162,3148,3149],{"class":179},"\"及格人数:",[162,3151,3152],{"class":207},"{len",[162,3154,3155],{"class":168},"(passed)",[162,3157,976],{"class":207},[162,3159,979],{"class":179},[162,3161,434],{"class":168},[14,3163,3165],{"id":3164},"_616-易错点","6.16 易错点",[1452,3167,3168,3171,3174,3177,3184,3194],{},[1455,3169,3170],{},"列表可变，元组和字符串不可变。",[1455,3172,3173],{},"切片结束位置不包含。",[1455,3175,3176],{},"字典通过 key 取值，不是通过索引。",[1455,3178,3179,3180,3183],{},"空集合要用 ",[71,3181,3182],{},"set()","。",[1455,3185,3186,3187,3190,3191,3183],{},"使用 ",[71,3188,3189],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[71,3192,3193],{},"get()",[1455,3195,3196],{},"嵌套容器要先看清楚每一层是什么类型。",[14,3198,3200],{"id":3199},"_617-本章练习","6.17 本章练习",[1452,3202,3203,3206,3209,3212,3215],{},[1455,3204,3205],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[1455,3207,3208],{},"输入一句话，统计每个字符出现次数。",[1455,3210,3211],{},"使用集合去除列表中的重复元素。",[1455,3213,3214],{},"使用字典保存一个学生的信息，并实现修改成绩。",[1455,3216,3217],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[3219,3220,3221],"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 .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":158,"searchDepth":197,"depth":197,"links":3223},[3224,3225,3226,3227,3228,3229,3230,3231,3232,3233,3234,3235,3236,3237,3238,3239,3240],{"id":16,"depth":197,"text":17},{"id":147,"depth":197,"text":148},{"id":266,"depth":197,"text":267},{"id":398,"depth":197,"text":399},{"id":773,"depth":197,"text":774},{"id":984,"depth":197,"text":985},{"id":1109,"depth":197,"text":1110},{"id":1257,"depth":197,"text":1258},{"id":1446,"depth":197,"text":1447},{"id":1703,"depth":197,"text":1704},{"id":1926,"depth":197,"text":1927},{"id":2011,"depth":197,"text":2012},{"id":2330,"depth":197,"text":2331},{"id":2616,"depth":197,"text":2617},{"id":2818,"depth":197,"text":2819},{"id":3164,"depth":197,"text":3165},{"id":3199,"depth":197,"text":3200},null,"md",{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":5,"description":3241},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",[3249,8270,9376,10794,13777,15126,16614,17702,26462,26474,27073,27099,27223,27464,27529,27547,27560,27607,27731,27900,28099,28279,28484,28620,28715,28752,28765,29074,29814,30522,30543,31561,33192,33343,33356,33368,33665,53466,53481,53498,53531,56400,79743,95888,95909,96022,96143,96913,97576,97937,97975,98081,98181,98224,98250,98311,99965,100066,100091,100581,101081,102161,102444,103186,103688,103700,105715,107378,108880,110578,112495,114414,116435,119904,120336,120799,121548,124491,124839,124861,125217,128524,128536,128939,128962,129109,129276,129481,129782,130339,130996,132927,134525,135174,136668,138099,139334,141028,142780,145190,145306,146241,146452,147337,148572,148800,148813,149968,152378,154740,158053,160520,162162,163929,165942,168676,170856,173383,175577],{"id":3250,"title":3251,"body":3252,"description":158,"extension":3242,"meta":8265,"navigation":300,"path":8266,"seo":8267,"stem":8268,"__hash__":8269},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":3253,"toc":8237},[3254,3257,3261,3264,3268,3279,3283,3288,3291,3294,3297,3300,3303,3329,3333,3336,3339,3342,3345,3392,3396,3414,3416,3430,3433,3441,3444,4271,4278,4295,4299,4385,4389,4395,4481,4485,4523,4527,4591,4595,4599,4606,4617,4621,4626,4630,4635,4639,4644,4648,4652,4657,4906,4911,5049,5054,5310,5313,5321,5325,5330,5433,5436,5741,5750,5851,5854,5857,5860,5863,6122,6127,6265,6268,6447,6450,6578,6581,6733,6737,6742,6745,6756,6764,6767,6873,6877,6881,6886,6936,6941,6946,6970,6975,7028,7031,7036,7212,7217,7502,7507,7901,7905,7910,7967,7972,7980,7983,8122,8125,8234],[10,3255,3251],{"id":3256},"_1基础入门",[14,3258,3260],{"id":3259},"_11注释","1.1注释",[19,3262,3263],{},"\u002F\u002F或者\u002F* *\u002F",[14,3265,3267],{"id":3266},"_12命名","1.2命名",[1452,3269,3270,3273,3276],{},[1455,3271,3272],{},"字母数字下划线",[1455,3274,3275],{},"开头必须是字母或_",[1455,3277,3278],{},"不能使用关键词",[14,3280,3282],{"id":3281},"_13数据类型","1.3数据类型",[3284,3285,3287],"h3",{"id":3286},"_131整形","1.3.1整形",[19,3289,3290],{},"short 短整形 2",[19,3292,3293],{},"int 整形 4",[19,3295,3296],{},"long 长整形 win4 linux32位4 linux64位8",[19,3298,3299],{},"long long 长长整形 8",[19,3301,3302],{},"利用sizeof可以求数据类型占用的内存空间大小",[153,3304,3308],{"className":3305,"code":3306,"language":3307,"meta":158,"style":158},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[71,3309,3310,3322],{"__ignoreMap":158},[162,3311,3312,3315,3317,3320],{"class":164,"line":165},[162,3313,3314],{"class":172},"sizeof",[162,3316,604],{"class":168},[162,3318,3319],{"class":172},"int",[162,3321,434],{"class":168},[162,3323,3324,3326],{"class":164,"line":197},[162,3325,3314],{"class":172},[162,3327,3328],{"class":168},"(num)\n",[3284,3330,3332],{"id":3331},"_132浮点型","1.3.2浮点型",[19,3334,3335],{},"float 单精度 4节 7位有效数字",[19,3337,3338],{},"double 双精度 8节 15-16有效数字",[19,3340,3341],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,3343,3344],{},"注意点：",[153,3346,3348],{"className":3305,"code":3347,"language":3307,"meta":158,"style":158},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[71,3349,3350,3371],{"__ignoreMap":158},[162,3351,3352,3355,3358,3360,3363,3365,3368],{"class":164,"line":165},[162,3353,3354],{"class":172},"float",[162,3356,3357],{"class":168}," f1",[162,3359,173],{"class":172},[162,3361,3362],{"class":207},"3.14",[162,3364,961],{"class":172},[162,3366,3367],{"class":168},";",[162,3369,3370],{"class":361}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[162,3372,3373,3375,3378,3380,3382,3385,3387,3389],{"class":164,"line":197},[162,3374,3354],{"class":172},[162,3376,3377],{"class":168}," f2",[162,3379,173],{"class":172},[162,3381,218],{"class":207},[162,3383,3384],{"class":172},"e",[162,3386,213],{"class":207},[162,3388,3367],{"class":168},[162,3390,3391],{"class":361}," \u002F\u002F科学记数法\n",[3284,3393,3395],{"id":3394},"_133字符型","1.3.3字符型",[153,3397,3399],{"className":3305,"code":3398,"language":3307,"meta":158,"style":158},"char ch='a'\n",[71,3400,3401],{"__ignoreMap":158},[162,3402,3403,3406,3409,3411],{"class":164,"line":165},[162,3404,3405],{"class":172},"char",[162,3407,3408],{"class":168}," ch",[162,3410,173],{"class":172},[162,3412,3413],{"class":179},"'a'\n",[19,3415,3344],{},[1452,3417,3418,3421,3424,3427],{},[1455,3419,3420],{},"在显示字符型变量时，只能单引号，双引号x",[1455,3422,3423],{},"单引号内只能一个字符，不能字符串",[1455,3425,3426],{},"c和c++字符型变量只占用一个字符",[1455,3428,3429],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,3431,3432],{},"ASCII码大致由以下两部分组成：",[1452,3434,3435,3438],{},[1455,3436,3437],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[1455,3439,3440],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,3442,3443],{},"ASCII码表格：",[26,3445,3446,3487],{},[29,3447,3448],{},[32,3449,3450,3457,3462,3466,3471,3475,3479,3483],{},[35,3451,3452,3456],{},[3453,3454,3455],"strong",{},"ASCII","值",[35,3458,3459],{},[3453,3460,3461],{},"控制字符",[35,3463,3464,3456],{},[3453,3465,3455],{},[35,3467,3468],{},[3453,3469,3470],{},"字符",[35,3472,3473,3456],{},[3453,3474,3455],{},[35,3476,3477],{},[3453,3478,3470],{},[35,3480,3481,3456],{},[3453,3482,3455],{},[35,3484,3485],{},[3453,3486,3470],{},[51,3488,3489,3514,3539,3562,3587,3612,3634,3657,3683,3707,3733,3758,3784,3809,3834,3859,3884,3908,3932,3956,3980,4004,4028,4053,4078,4102,4127,4151,4174,4198,4221,4246],{},[32,3490,3491,3493,3496,3499,3502,3505,3508,3511],{},[56,3492,312],{},[56,3494,3495],{},"NUT",[56,3497,3498],{},"32",[56,3500,3501],{},"(space)",[56,3503,3504],{},"64",[56,3506,3507],{},"@",[56,3509,3510],{},"96",[56,3512,3513],{},"、",[32,3515,3516,3518,3521,3524,3527,3530,3533,3536],{},[56,3517,208],{},[56,3519,3520],{},"SOH",[56,3522,3523],{},"33",[56,3525,3526],{},"!",[56,3528,3529],{},"65",[56,3531,3532],{},"A",[56,3534,3535],{},"97",[56,3537,3538],{},"a",[32,3540,3541,3543,3546,3549,3551,3553,3556,3559],{},[56,3542,213],{},[56,3544,3545],{},"STX",[56,3547,3548],{},"34",[56,3550,979],{},[56,3552,885],{},[56,3554,3555],{},"B",[56,3557,3558],{},"98",[56,3560,3561],{},"b",[32,3563,3564,3566,3569,3572,3575,3578,3581,3584],{},[56,3565,218],{},[56,3567,3568],{},"ETX",[56,3570,3571],{},"35",[56,3573,3574],{},"#",[56,3576,3577],{},"67",[56,3579,3580],{},"C",[56,3582,3583],{},"99",[56,3585,3586],{},"c",[32,3588,3589,3591,3594,3597,3600,3603,3606,3609],{},[56,3590,223],{},[56,3592,3593],{},"EOT",[56,3595,3596],{},"36",[56,3598,3599],{},"$",[56,3601,3602],{},"68",[56,3604,3605],{},"D",[56,3607,3608],{},"100",[56,3610,3611],{},"d",[32,3613,3614,3616,3619,3622,3624,3627,3630,3632],{},[56,3615,637],{},[56,3617,3618],{},"ENQ",[56,3620,3621],{},"37",[56,3623,2708],{},[56,3625,3626],{},"69",[56,3628,3629],{},"E",[56,3631,2698],{},[56,3633,3384],{},[32,3635,3636,3638,3641,3644,3646,3649,3652,3655],{},[56,3637,1314],{},[56,3639,3640],{},"ACK",[56,3642,3643],{},"38",[56,3645,1667],{},[56,3647,3648],{},"70",[56,3650,3651],{},"F",[56,3653,3654],{},"102",[56,3656,961],{},[32,3658,3659,3662,3665,3668,3671,3674,3677,3680],{},[56,3660,3661],{},"7",[56,3663,3664],{},"BEL",[56,3666,3667],{},"39",[56,3669,3670],{},",",[56,3672,3673],{},"71",[56,3675,3676],{},"G",[56,3678,3679],{},"103",[56,3681,3682],{},"g",[32,3684,3685,3688,3691,3694,3696,3698,3701,3704],{},[56,3686,3687],{},"8",[56,3689,3690],{},"BS",[56,3692,3693],{},"40",[56,3695,604],{},[56,3697,2119],{},[56,3699,3700],{},"H",[56,3702,3703],{},"104",[56,3705,3706],{},"h",[32,3708,3709,3712,3715,3718,3721,3724,3727,3730],{},[56,3710,3711],{},"9",[56,3713,3714],{},"HT",[56,3716,3717],{},"41",[56,3719,3720],{},")",[56,3722,3723],{},"73",[56,3725,3726],{},"I",[56,3728,3729],{},"105",[56,3731,3732],{},"i",[32,3734,3735,3737,3740,3743,3746,3749,3752,3755],{},[56,3736,1006],{},[56,3738,3739],{},"LF",[56,3741,3742],{},"42",[56,3744,3745],{},"*",[56,3747,3748],{},"74",[56,3750,3751],{},"J",[56,3753,3754],{},"106",[56,3756,3757],{},"j",[32,3759,3760,3763,3766,3769,3772,3775,3778,3781],{},[56,3761,3762],{},"11",[56,3764,3765],{},"VT",[56,3767,3768],{},"43",[56,3770,3771],{},"+",[56,3773,3774],{},"75",[56,3776,3777],{},"K",[56,3779,3780],{},"107",[56,3782,3783],{},"k",[32,3785,3786,3789,3792,3795,3797,3800,3803,3806],{},[56,3787,3788],{},"12",[56,3790,3791],{},"FF",[56,3793,3794],{},"44",[56,3796,3670],{},[56,3798,3799],{},"76",[56,3801,3802],{},"L",[56,3804,3805],{},"108",[56,3807,3808],{},"l",[32,3810,3811,3814,3817,3820,3822,3825,3828,3831],{},[56,3812,3813],{},"13",[56,3815,3816],{},"CR",[56,3818,3819],{},"45",[56,3821,353],{},[56,3823,3824],{},"77",[56,3826,3827],{},"M",[56,3829,3830],{},"109",[56,3832,3833],{},"m",[32,3835,3836,3839,3842,3845,3848,3850,3853,3856],{},[56,3837,3838],{},"14",[56,3840,3841],{},"SO",[56,3843,3844],{},"46",[56,3846,3847],{},".",[56,3849,890],{},[56,3851,3852],{},"N",[56,3854,3855],{},"110",[56,3857,3858],{},"n",[32,3860,3861,3864,3867,3870,3872,3875,3878,3881],{},[56,3862,3863],{},"15",[56,3865,3866],{},"SI",[56,3868,3869],{},"47",[56,3871,946],{},[56,3873,3874],{},"79",[56,3876,3877],{},"O",[56,3879,3880],{},"111",[56,3882,3883],{},"o",[32,3885,3886,3889,3892,3895,3897,3900,3903,3906],{},[56,3887,3888],{},"16",[56,3890,3891],{},"DLE",[56,3893,3894],{},"48",[56,3896,312],{},[56,3898,3899],{},"80",[56,3901,3902],{},"P",[56,3904,3905],{},"112",[56,3907,19],{},[32,3909,3910,3912,3915,3918,3920,3923,3926,3929],{},[56,3911,2080],{},[56,3913,3914],{},"DCI",[56,3916,3917],{},"49",[56,3919,208],{},[56,3921,3922],{},"81",[56,3924,3925],{},"Q",[56,3927,3928],{},"113",[56,3930,3931],{},"q",[32,3933,3934,3936,3939,3942,3944,3947,3950,3953],{},[56,3935,242],{},[56,3937,3938],{},"DC2",[56,3940,3941],{},"50",[56,3943,213],{},[56,3945,3946],{},"82",[56,3948,3949],{},"R",[56,3951,3952],{},"114",[56,3954,3955],{},"r",[32,3957,3958,3960,3963,3966,3968,3971,3974,3977],{},[56,3959,2110],{},[56,3961,3962],{},"DC3",[56,3964,3965],{},"51",[56,3967,218],{},[56,3969,3970],{},"83",[56,3972,3973],{},"S",[56,3975,3976],{},"115",[56,3978,3979],{},"s",[32,3981,3982,3984,3987,3990,3992,3995,3998,4001],{},[56,3983,1011],{},[56,3985,3986],{},"DC4",[56,3988,3989],{},"52",[56,3991,223],{},[56,3993,3994],{},"84",[56,3996,3997],{},"T",[56,3999,4000],{},"116",[56,4002,4003],{},"t",[32,4005,4006,4009,4012,4015,4017,4019,4022,4025],{},[56,4007,4008],{},"21",[56,4010,4011],{},"NAK",[56,4013,4014],{},"53",[56,4016,637],{},[56,4018,880],{},[56,4020,4021],{},"U",[56,4023,4024],{},"117",[56,4026,4027],{},"u",[32,4029,4030,4033,4036,4039,4041,4044,4047,4050],{},[56,4031,4032],{},"22",[56,4034,4035],{},"SYN",[56,4037,4038],{},"54",[56,4040,1314],{},[56,4042,4043],{},"86",[56,4045,4046],{},"V",[56,4048,4049],{},"118",[56,4051,4052],{},"v",[32,4054,4055,4058,4061,4064,4066,4069,4072,4075],{},[56,4056,4057],{},"23",[56,4059,4060],{},"TB",[56,4062,4063],{},"55",[56,4065,3661],{},[56,4067,4068],{},"87",[56,4070,4071],{},"W",[56,4073,4074],{},"119",[56,4076,4077],{},"w",[32,4079,4080,4083,4086,4089,4091,4093,4096,4099],{},[56,4081,4082],{},"24",[56,4084,4085],{},"CAN",[56,4087,4088],{},"56",[56,4090,3687],{},[56,4092,2089],{},[56,4094,4095],{},"X",[56,4097,4098],{},"120",[56,4100,4101],{},"x",[32,4103,4104,4107,4110,4113,4115,4118,4121,4124],{},[56,4105,4106],{},"25",[56,4108,4109],{},"EM",[56,4111,4112],{},"57",[56,4114,3711],{},[56,4116,4117],{},"89",[56,4119,4120],{},"Y",[56,4122,4123],{},"121",[56,4125,4126],{},"y",[32,4128,4129,4132,4135,4138,4140,4142,4145,4148],{},[56,4130,4131],{},"26",[56,4133,4134],{},"SUB",[56,4136,4137],{},"58",[56,4139,1332],{},[56,4141,875],{},[56,4143,4144],{},"Z",[56,4146,4147],{},"122",[56,4149,4150],{},"z",[32,4152,4153,4156,4159,4161,4163,4166,4169,4172],{},[56,4154,4155],{},"27",[56,4157,4158],{},"ESC",[56,4160,2911],{},[56,4162,3367],{},[56,4164,4165],{},"91",[56,4167,4168],{},"[",[56,4170,4171],{},"123",[56,4173,967],{},[32,4175,4176,4179,4182,4185,4188,4191,4193,4196],{},[56,4177,4178],{},"28",[56,4180,4181],{},"FS",[56,4183,4184],{},"60",[56,4186,4187],{},"\u003C",[56,4189,4190],{},"92",[56,4192,946],{},[56,4194,4195],{},"124",[56,4197,1682],{},[32,4199,4200,4203,4206,4209,4211,4214,4216,4219],{},[56,4201,4202],{},"29",[56,4204,4205],{},"GS",[56,4207,4208],{},"61",[56,4210,173],{},[56,4212,4213],{},"93",[56,4215,3120],{},[56,4217,4218],{},"125",[56,4220,976],{},[32,4222,4223,4226,4229,4232,4234,4237,4240,4243],{},[56,4224,4225],{},"30",[56,4227,4228],{},"RS",[56,4230,4231],{},"62",[56,4233,3000],{},[56,4235,4236],{},"94",[56,4238,4239],{},"^",[56,4241,4242],{},"126",[56,4244,4245],{},"`",[32,4247,4248,4251,4254,4257,4260,4262,4265,4268],{},[56,4249,4250],{},"31",[56,4252,4253],{},"US",[56,4255,4256],{},"63",[56,4258,4259],{},"?",[56,4261,2058],{},[56,4263,4264],{},"_",[56,4266,4267],{},"127",[56,4269,4270],{},"DEL",[19,4272,4273,4274,4277],{},"ASCII 码大致由以下",[3453,4275,4276],{},"两部分组","成：",[4279,4280,4281,4288],"ul",{},[1455,4282,4283,4284,4287],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[3453,4285,4286],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[1455,4289,4290,4291,4294],{},"ASCII 打印字符：数字 ",[3453,4292,4293],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[3284,4296,4298],{"id":4297},"_134转义字符","1.3.4转义字符",[153,4300,4302],{"className":3305,"code":4301,"language":3307,"meta":158,"style":158},"\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",[71,4303,4304,4309,4325,4339,4344,4357,4362],{"__ignoreMap":158},[162,4305,4306],{"class":164,"line":165},[162,4307,4308],{"class":361},"\u002F\u002F换行符\n",[162,4310,4311,4314,4317,4320,4322],{"class":164,"line":197},[162,4312,4313],{"class":168},"cout ",[162,4315,4316],{"class":172},"\u003C\u003C",[162,4318,4319],{"class":179},"\"hello world\u002Fn\"",[162,4321,3367],{"class":168},[162,4323,4324],{"class":361}," \u002F\u002F就等同于如下：\n",[162,4326,4327,4329,4331,4334,4336],{"class":164,"line":228},[162,4328,4313],{"class":168},[162,4330,4316],{"class":172},[162,4332,4333],{"class":179},"\"hello world\"",[162,4335,4316],{"class":172},[162,4337,4338],{"class":168},"endl;\n",[162,4340,4341],{"class":164,"line":252},[162,4342,4343],{"class":361},"\u002F\u002F反斜杠\n",[162,4345,4346,4348,4350,4353,4355],{"class":164,"line":328},[162,4347,4313],{"class":168},[162,4349,4316],{"class":172},[162,4351,4352],{"class":179},"\"\u002F\u002F\"",[162,4354,4316],{"class":172},[162,4356,4338],{"class":168},[162,4358,4359],{"class":164,"line":466},[162,4360,4361],{"class":361},"\u002F\u002F水平制表符\n",[162,4363,4364,4366,4368,4371,4374,4377,4379,4382],{"class":164,"line":471},[162,4365,4313],{"class":168},[162,4367,4316],{"class":172},[162,4369,4370],{"class":179},"\"aaaa",[162,4372,4373],{"class":207},"\\t",[162,4375,4376],{"class":179},"helloworld\"",[162,4378,4316],{"class":172},[162,4380,4381],{"class":168},"endl;",[162,4383,4384],{"class":361}," \u002F\u002F输出窗口时有对齐效果\n",[3284,4386,4388],{"id":4387},"_135字符串型","1.3.5字符串型",[19,4390,4391,4392,4394],{},"char 变量名",[162,4393],{},"=\"字符串值\"",[153,4396,4398],{"className":3305,"code":4397,"language":3307,"meta":158,"style":158},"\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",[71,4399,4400,4405,4410,4415,4420,4434,4447,4452,4457,4468],{"__ignoreMap":158},[162,4401,4402],{"class":164,"line":165},[162,4403,4404],{"class":361},"\u002F\u002Fc风格字符串\n",[162,4406,4407],{"class":164,"line":197},[162,4408,4409],{"class":361},"\u002F\u002F注意事项：\n",[162,4411,4412],{"class":164,"line":228},[162,4413,4414],{"class":361},"\u002F\u002F1.char字符串名[]\n",[162,4416,4417],{"class":164,"line":252},[162,4418,4419],{"class":361},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[162,4421,4422,4424,4427,4429,4431],{"class":164,"line":328},[162,4423,3405],{"class":172},[162,4425,4426],{"class":168}," str[]",[162,4428,173],{"class":172},[162,4430,4333],{"class":179},[162,4432,4433],{"class":168},";\n",[162,4435,4436,4438,4440,4443,4445],{"class":164,"line":466},[162,4437,4313],{"class":168},[162,4439,4316],{"class":172},[162,4441,4442],{"class":168},"str",[162,4444,4316],{"class":172},[162,4446,4338],{"class":168},[162,4448,4449],{"class":164,"line":471},[162,4450,4451],{"class":361},"\u002F\u002Fc++风格字符串\n",[162,4453,4454],{"class":164,"line":687},[162,4455,4456],{"class":361},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[162,4458,4459,4462,4464,4466],{"class":164,"line":692},[162,4460,4461],{"class":168},"string str2",[162,4463,173],{"class":172},[162,4465,4333],{"class":179},[162,4467,4433],{"class":168},[162,4469,4470,4472,4474,4477,4479],{"class":164,"line":698},[162,4471,4313],{"class":168},[162,4473,4316],{"class":172},[162,4475,4476],{"class":168},"str2",[162,4478,4316],{"class":172},[162,4480,4338],{"class":168},[3284,4482,4484],{"id":4483},"_136布尔类型bool","1.3.6布尔类型bool",[153,4486,4488],{"className":3305,"code":4487,"language":3307,"meta":158,"style":158},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[71,4489,4490,4505],{"__ignoreMap":158},[162,4491,4492,4495,4498,4500,4503],{"class":164,"line":165},[162,4493,4494],{"class":172},"bool",[162,4496,4497],{"class":168}," flag",[162,4499,173],{"class":172},[162,4501,4502],{"class":207},"true",[162,4504,4433],{"class":168},[162,4506,4507,4510,4513,4516,4518,4520],{"class":164,"line":197},[162,4508,4509],{"class":168},"cout",[162,4511,4512],{"class":172},"\u003C\u003Csizeof",[162,4514,4515],{"class":168},"(flag)",[162,4517,4316],{"class":172},[162,4519,4381],{"class":168},[162,4521,4522],{"class":361}," \u002F\u002F查看布尔占内存空间\n",[14,4524,4526],{"id":4525},"_14键盘输入cin","1.4键盘输入cin",[153,4528,4530],{"className":3305,"code":4529,"language":3307,"meta":158,"style":158},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[71,4531,4532,4545,4562,4573],{"__ignoreMap":158},[162,4533,4534,4536,4539,4541,4543],{"class":164,"line":165},[162,4535,3319],{"class":172},[162,4537,4538],{"class":168}," a",[162,4540,173],{"class":172},[162,4542,312],{"class":207},[162,4544,4433],{"class":168},[162,4546,4547,4549,4551,4554,4556,4558,4560],{"class":164,"line":197},[162,4548,4509],{"class":168},[162,4550,4316],{"class":172},[162,4552,4553],{"class":179},"\"请给整型变量a赋值\"",[162,4555,4316],{"class":172},[162,4557,3538],{"class":168},[162,4559,4316],{"class":172},[162,4561,4338],{"class":168},[162,4563,4564,4567,4570],{"class":164,"line":228},[162,4565,4566],{"class":168},"cin ",[162,4568,4569],{"class":172},">>",[162,4571,4572],{"class":168}," a;\n",[162,4574,4575,4577,4579,4582,4585,4587,4589],{"class":164,"line":252},[162,4576,4313],{"class":168},[162,4578,4316],{"class":172},[162,4580,4581],{"class":179}," \"整型变量a=\"",[162,4583,4584],{"class":172}," \u003C\u003C",[162,4586,3538],{"class":168},[162,4588,4316],{"class":172},[162,4590,4338],{"class":168},[14,4592,4594],{"id":4593},"_15运算符","1.5运算符",[3284,4596,4598],{"id":4597},"_151算术运算符","1.5.1算术运算符",[19,4600,4601,4605],{},[4602,4603],"img",{"alt":158,"src":4604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[1452,4607,4608,4611,4614],{},[1455,4609,4610],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[1455,4612,4613],{},"两个小数不可以做取模运算",[1455,4615,4616],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[3284,4618,4620],{"id":4619},"_152赋值运算符","1.5.2赋值运算符",[19,4622,4623],{},[4602,4624],{"alt":158,"src":4625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[3284,4627,4629],{"id":4628},"_153比较运算符","1.5.3比较运算符",[19,4631,4632],{},[4602,4633],{"alt":158,"src":4634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[3284,4636,4638],{"id":4637},"_154逻辑运算符","1.5.4逻辑运算符",[19,4640,4641],{},[4602,4642],{"alt":158,"src":4643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,4645,4647],{"id":4646},"_16程序流程结构","1.6程序流程结构",[3284,4649,4651],{"id":4650},"_161选择结构","1.6.1选择结构",[1452,4653,4654],{},[1455,4655,4656],{},"if语句\n单行、多行、多条件if语句",[153,4658,4660],{"className":3305,"code":4659,"language":3307,"meta":158,"style":158},"\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",[71,4661,4662,4667,4681,4686,4700,4704,4709,4717,4730,4734,4747,4751,4756,4760,4773,4777,4782,4801,4805,4818,4822,4848,4852,4868,4872,4876,4881,4895,4900],{"__ignoreMap":158},[162,4663,4664],{"class":164,"line":165},[162,4665,4666],{"class":361},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[162,4668,4669,4671,4674,4676,4679],{"class":164,"line":197},[162,4670,2703],{"class":172},[162,4672,4673],{"class":168},"(score",[162,4675,3000],{"class":172},[162,4677,4678],{"class":207},"600",[162,4680,434],{"class":168},[162,4682,4683],{"class":164,"line":228},[162,4684,4685],{"class":168},"{\n",[162,4687,4688,4691,4693,4696,4698],{"class":164,"line":252},[162,4689,4690],{"class":168},"    cout",[162,4692,4316],{"class":172},[162,4694,4695],{"class":179},"'这是单行if语句'",[162,4697,4316],{"class":172},[162,4699,4338],{"class":168},[162,4701,4702],{"class":164,"line":328},[162,4703,1498],{"class":168},[162,4705,4706],{"class":164,"line":466},[162,4707,4708],{"class":361},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[162,4710,4711,4713,4715],{"class":164,"line":471},[162,4712,4566],{"class":168},[162,4714,4569],{"class":172},[162,4716,929],{"class":168},[162,4718,4719,4721,4723,4726,4728],{"class":164,"line":687},[162,4720,2703],{"class":172},[162,4722,4673],{"class":168},[162,4724,4725],{"class":172},"\u003C=",[162,4727,4678],{"class":207},[162,4729,434],{"class":168},[162,4731,4732],{"class":164,"line":692},[162,4733,4685],{"class":168},[162,4735,4736,4738,4740,4743,4745],{"class":164,"line":698},[162,4737,4690],{"class":168},[162,4739,4569],{"class":172},[162,4741,4742],{"class":179},"\"小于等于600\"",[162,4744,4316],{"class":172},[162,4746,4338],{"class":168},[162,4748,4749],{"class":164,"line":2955},[162,4750,1498],{"class":168},[162,4752,4753],{"class":164,"line":2960},[162,4754,4755],{"class":172},"else\n",[162,4757,4758],{"class":164,"line":2971},[162,4759,4685],{"class":168},[162,4761,4762,4764,4766,4769,4771],{"class":164,"line":2984},[162,4763,4690],{"class":168},[162,4765,4569],{"class":172},[162,4767,4768],{"class":179},"\"大于600\"",[162,4770,4569],{"class":172},[162,4772,4338],{"class":168},[162,4774,4775],{"class":164,"line":2989},[162,4776,1498],{"class":168},[162,4778,4779],{"class":164,"line":3011},[162,4780,4781],{"class":361},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[162,4783,4784,4786,4788,4790,4792,4795,4797,4799],{"class":164,"line":3022},[162,4785,2703],{"class":172},[162,4787,1003],{"class":168},[162,4789,312],{"class":207},[162,4791,4187],{"class":172},[162,4793,4794],{"class":168},"num",[162,4796,4187],{"class":172},[162,4798,3608],{"class":207},[162,4800,434],{"class":168},[162,4802,4803],{"class":164,"line":3027},[162,4804,4685],{"class":168},[162,4806,4807,4809,4811,4814,4816],{"class":164,"line":3046},[162,4808,4690],{"class":168},[162,4810,4316],{"class":172},[162,4812,4813],{"class":179},"\"小于100\"",[162,4815,4316],{"class":172},[162,4817,4338],{"class":168},[162,4819,4820],{"class":164,"line":3052},[162,4821,1498],{"class":168},[162,4823,4824,4826,4829,4832,4834,4836,4839,4841,4843,4846],{"class":164,"line":3057},[162,4825,2313],{"class":172},[162,4827,4828],{"class":172}," if",[162,4830,4831],{"class":168}," (nmu",[162,4833,3038],{"class":172},[162,4835,3608],{"class":207},[162,4837,4838],{"class":172},"&&",[162,4840,4794],{"class":168},[162,4842,4187],{"class":172},[162,4844,4845],{"class":207},"200",[162,4847,434],{"class":168},[162,4849,4850],{"class":164,"line":3072},[162,4851,4685],{"class":168},[162,4853,4854,4856,4858,4861,4863,4865],{"class":164,"line":3077},[162,4855,4690],{"class":168},[162,4857,4316],{"class":172},[162,4859,4860],{"class":179},"\"不小于100且小于200\"",[162,4862,4316],{"class":172},[162,4864,4381],{"class":168},[162,4866,4867],{"class":361}," \u002F\u002F可以无限else if,python中是elif：\n",[162,4869,4870],{"class":164,"line":3100},[162,4871,1498],{"class":168},[162,4873,4874],{"class":164,"line":3140},[162,4875,4755],{"class":172},[162,4877,4879],{"class":164,"line":4878},26,[162,4880,4685],{"class":168},[162,4882,4884,4886,4888,4891,4893],{"class":164,"line":4883},27,[162,4885,4690],{"class":168},[162,4887,4316],{"class":172},[162,4889,4890],{"class":179},"\"不小于200\"",[162,4892,4316],{"class":172},[162,4894,4338],{"class":168},[162,4896,4898],{"class":164,"line":4897},28,[162,4899,1498],{"class":168},[162,4901,4903],{"class":164,"line":4902},29,[162,4904,4905],{"class":361},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[1452,4907,4908],{"start":197},[1455,4909,4910],{},"三目运算符",[153,4912,4914],{"className":3305,"code":4913,"language":3307,"meta":158,"style":158},"\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",[71,4915,4916,4921,4926,4952,4974,4991,4996,5019,5034],{"__ignoreMap":158},[162,4917,4918],{"class":164,"line":165},[162,4919,4920],{"class":361},"\u002F\u002F创建三个变量a,b,c\n",[162,4922,4923],{"class":164,"line":197},[162,4924,4925],{"class":361},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[162,4927,4928,4930,4932,4934,4936,4939,4941,4943,4946,4948,4950],{"class":164,"line":228},[162,4929,3319],{"class":172},[162,4931,4538],{"class":168},[162,4933,173],{"class":172},[162,4935,1011],{"class":207},[162,4937,4938],{"class":168},",b",[162,4940,173],{"class":172},[162,4942,1006],{"class":207},[162,4944,4945],{"class":168},",c",[162,4947,173],{"class":172},[162,4949,312],{"class":207},[162,4951,4433],{"class":168},[162,4953,4954,4956,4958,4961,4963,4965,4967,4969,4971],{"class":164,"line":252},[162,4955,3586],{"class":168},[162,4957,173],{"class":172},[162,4959,4960],{"class":168},"(a",[162,4962,3000],{"class":172},[162,4964,3561],{"class":168},[162,4966,4259],{"class":172},[162,4968,3538],{"class":168},[162,4970,1332],{"class":172},[162,4972,4973],{"class":168},"b)\n",[162,4975,4976,4978,4980,4983,4985,4987,4989],{"class":164,"line":328},[162,4977,4509],{"class":168},[162,4979,4316],{"class":172},[162,4981,4982],{"class":179},"\"c=\"",[162,4984,4316],{"class":172},[162,4986,3586],{"class":168},[162,4988,4316],{"class":172},[162,4990,4338],{"class":168},[162,4992,4993],{"class":164,"line":466},[162,4994,4995],{"class":361},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[162,4997,4998,5000,5002,5004,5006,5008,5010,5013,5015,5017],{"class":164,"line":471},[162,4999,4960],{"class":168},[162,5001,3000],{"class":172},[162,5003,3561],{"class":168},[162,5005,4259],{"class":172},[162,5007,3538],{"class":168},[162,5009,1332],{"class":172},[162,5011,5012],{"class":168},"b)",[162,5014,173],{"class":172},[162,5016,3608],{"class":207},[162,5018,4433],{"class":168},[162,5020,5021,5023,5025,5027,5029,5031],{"class":164,"line":687},[162,5022,4509],{"class":168},[162,5024,4316],{"class":172},[162,5026,3538],{"class":168},[162,5028,4316],{"class":172},[162,5030,4381],{"class":168},[162,5032,5033],{"class":361}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[162,5035,5036,5038,5040,5042,5044,5046],{"class":164,"line":692},[162,5037,4509],{"class":168},[162,5039,4316],{"class":172},[162,5041,3561],{"class":168},[162,5043,4316],{"class":172},[162,5045,4381],{"class":168},[162,5047,5048],{"class":361}," \u002F\u002F10   a>b,b还是原值\n",[1452,5050,5051],{"start":228},[1455,5052,5053],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[153,5055,5057],{"className":3305,"code":5056,"language":3307,"meta":158,"style":158},"\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",[71,5058,5059,5064,5072,5086,5095,5099,5113,5126,5136,5144,5149,5174,5195,5217,5238,5260,5281,5301,5306],{"__ignoreMap":158},[162,5060,5061],{"class":164,"line":165},[162,5062,5063],{"class":361},"\u002F\u002F案例-电影打分\n",[162,5065,5066,5069],{"class":164,"line":197},[162,5067,5068],{"class":172},"#include",[162,5070,5071],{"class":179},"\u003Ciostream>\n",[162,5073,5074,5077,5080,5084],{"class":164,"line":228},[162,5075,5076],{"class":172},"using",[162,5078,5079],{"class":172}," namespace",[162,5081,5083],{"class":5082},"sScJk"," std",[162,5085,4433],{"class":168},[162,5087,5088,5090,5093],{"class":164,"line":252},[162,5089,3319],{"class":172},[162,5091,5092],{"class":5082}," main",[162,5094,1526],{"class":168},[162,5096,5097],{"class":164,"line":328},[162,5098,4685],{"class":168},[162,5100,5101,5104,5107,5109,5111],{"class":164,"line":466},[162,5102,5103],{"class":172},"    int",[162,5105,5106],{"class":168}," score",[162,5108,173],{"class":172},[162,5110,312],{"class":207},[162,5112,4433],{"class":168},[162,5114,5115,5117,5119,5122,5124],{"class":164,"line":471},[162,5116,4690],{"class":168},[162,5118,4316],{"class":172},[162,5120,5121],{"class":179},"\"电影打分：\"",[162,5123,4316],{"class":172},[162,5125,4338],{"class":168},[162,5127,5128,5131,5133],{"class":164,"line":687},[162,5129,5130],{"class":168},"    cin",[162,5132,4569],{"class":172},[162,5134,5135],{"class":168},"score;\n",[162,5137,5138,5141],{"class":164,"line":692},[162,5139,5140],{"class":172},"    switch",[162,5142,5143],{"class":168},"(score)\n",[162,5145,5146],{"class":164,"line":698},[162,5147,5148],{"class":168},"    {\n",[162,5150,5151,5154,5157,5160,5162,5165,5167,5169,5172],{"class":164,"line":2955},[162,5152,5153],{"class":172},"        case",[162,5155,5156],{"class":207}," 10",[162,5158,5159],{"class":168},":cout",[162,5161,4316],{"class":172},[162,5163,5164],{"class":179},"\"经典\"",[162,5166,4316],{"class":172},[162,5168,4381],{"class":168},[162,5170,5171],{"class":172},"break",[162,5173,4433],{"class":168},[162,5175,5176,5178,5181,5183,5185,5187,5189,5191,5193],{"class":164,"line":2960},[162,5177,5153],{"class":172},[162,5179,5180],{"class":207}," 9",[162,5182,5159],{"class":168},[162,5184,4316],{"class":172},[162,5186,5164],{"class":179},[162,5188,4316],{"class":172},[162,5190,4381],{"class":168},[162,5192,5171],{"class":172},[162,5194,4433],{"class":168},[162,5196,5197,5199,5202,5204,5206,5209,5211,5213,5215],{"class":164,"line":2971},[162,5198,5153],{"class":172},[162,5200,5201],{"class":207}," 8",[162,5203,5159],{"class":168},[162,5205,4316],{"class":172},[162,5207,5208],{"class":179},"\"非常好\"",[162,5210,4316],{"class":172},[162,5212,4381],{"class":168},[162,5214,5171],{"class":172},[162,5216,4433],{"class":168},[162,5218,5219,5221,5224,5226,5228,5230,5232,5234,5236],{"class":164,"line":2984},[162,5220,5153],{"class":172},[162,5222,5223],{"class":207}," 7",[162,5225,5159],{"class":168},[162,5227,4316],{"class":172},[162,5229,5208],{"class":179},[162,5231,4316],{"class":172},[162,5233,4381],{"class":168},[162,5235,5171],{"class":172},[162,5237,4433],{"class":168},[162,5239,5240,5242,5245,5247,5249,5252,5254,5256,5258],{"class":164,"line":2989},[162,5241,5153],{"class":172},[162,5243,5244],{"class":207}," 6",[162,5246,5159],{"class":168},[162,5248,4316],{"class":172},[162,5250,5251],{"class":179},"\"一般\"",[162,5253,4316],{"class":172},[162,5255,4381],{"class":168},[162,5257,5171],{"class":172},[162,5259,4433],{"class":168},[162,5261,5262,5264,5267,5269,5271,5273,5275,5277,5279],{"class":164,"line":3011},[162,5263,5153],{"class":172},[162,5265,5266],{"class":207}," 5",[162,5268,5159],{"class":168},[162,5270,4316],{"class":172},[162,5272,5251],{"class":179},[162,5274,4316],{"class":172},[162,5276,4381],{"class":168},[162,5278,5171],{"class":172},[162,5280,4433],{"class":168},[162,5282,5283,5286,5288,5290,5293,5295,5297,5299],{"class":164,"line":3022},[162,5284,5285],{"class":172},"        default",[162,5287,5159],{"class":168},[162,5289,4316],{"class":172},[162,5291,5292],{"class":179},"\"烂片\"",[162,5294,4316],{"class":172},[162,5296,4381],{"class":168},[162,5298,5171],{"class":172},[162,5300,4433],{"class":168},[162,5302,5303],{"class":164,"line":3027},[162,5304,5305],{"class":168},"    }\n",[162,5307,5308],{"class":164,"line":3046},[162,5309,1498],{"class":168},[19,5311,5312],{},"if和switch区别：",[4279,5314,5315,5318],{},[1455,5316,5317],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[1455,5319,5320],{},"switch优点：结构清晰，执行效率高",[3284,5322,5324],{"id":5323},"_162循环结构","1.6.2循环结构",[1452,5326,5327],{},[1455,5328,5329],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[153,5331,5333],{"className":3305,"code":5332,"language":3307,"meta":158,"style":158},"\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",[71,5334,5335,5340,5348,5352,5365,5379,5383,5403,5413,5417,5429],{"__ignoreMap":158},[162,5336,5337],{"class":164,"line":165},[162,5338,5339],{"class":361},"\u002F\u002F打印0-9数字\n",[162,5341,5342,5344,5346],{"class":164,"line":197},[162,5343,3319],{"class":172},[162,5345,5092],{"class":5082},[162,5347,1526],{"class":168},[162,5349,5350],{"class":164,"line":228},[162,5351,4685],{"class":168},[162,5353,5354,5356,5359,5361,5363],{"class":164,"line":252},[162,5355,5103],{"class":172},[162,5357,5358],{"class":168}," num",[162,5360,173],{"class":172},[162,5362,312],{"class":207},[162,5364,4433],{"class":168},[162,5366,5367,5370,5373,5375,5377],{"class":164,"line":328},[162,5368,5369],{"class":172},"    while",[162,5371,5372],{"class":168},"(num",[162,5374,4187],{"class":172},[162,5376,1006],{"class":207},[162,5378,434],{"class":168},[162,5380,5381],{"class":164,"line":466},[162,5382,5148],{"class":168},[162,5384,5385,5388,5391,5393,5395,5397,5400],{"class":164,"line":471},[162,5386,5387],{"class":5082},"       std",[162,5389,5390],{"class":168},"::cout",[162,5392,4316],{"class":172},[162,5394,4794],{"class":168},[162,5396,4316],{"class":172},[162,5398,5399],{"class":5082},"std",[162,5401,5402],{"class":168},"::endl;\n",[162,5404,5405,5408,5411],{"class":164,"line":687},[162,5406,5407],{"class":168},"        num",[162,5409,5410],{"class":172},"++",[162,5412,4433],{"class":168},[162,5414,5415],{"class":164,"line":692},[162,5416,5305],{"class":168},[162,5418,5419,5422,5424,5427],{"class":164,"line":698},[162,5420,5421],{"class":5082},"    system",[162,5423,604],{"class":168},[162,5425,5426],{"class":179},"\"pause\"",[162,5428,434],{"class":168},[162,5430,5431],{"class":164,"line":2955},[162,5432,1498],{"class":168},[19,5434,5435],{},"注意：写好循环条件，避免死循环情况",[153,5437,5439],{"className":3305,"code":5438,"language":3307,"meta":158,"style":158},"\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",[71,5440,5441,5446,5453,5460,5470,5478,5482,5487,5514,5518,5523,5531,5558,5563,5568,5581,5591,5595,5605,5610,5623,5628,5642,5647,5662,5666,5679,5683,5688,5692,5706,5714,5719,5725,5731,5736],{"__ignoreMap":158},[162,5442,5443],{"class":164,"line":165},[162,5444,5445],{"class":361},"\u002F\u002F循环结构-猜数字\n",[162,5447,5448,5450],{"class":164,"line":197},[162,5449,5068],{"class":172},[162,5451,5452],{"class":179}," \u003Ciostream>\n",[162,5454,5455,5457],{"class":164,"line":228},[162,5456,5068],{"class":172},[162,5458,5459],{"class":179}," \u003Cctime>\n",[162,5461,5462,5464,5466,5468],{"class":164,"line":252},[162,5463,5076],{"class":172},[162,5465,5079],{"class":172},[162,5467,5083],{"class":5082},[162,5469,4433],{"class":168},[162,5471,5472,5474,5476],{"class":164,"line":328},[162,5473,3319],{"class":172},[162,5475,5092],{"class":5082},[162,5477,1526],{"class":168},[162,5479,5480],{"class":164,"line":466},[162,5481,4685],{"class":168},[162,5483,5484],{"class":164,"line":471},[162,5485,5486],{"class":361},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[162,5488,5489,5492,5495,5498,5501,5503,5506,5508,5511],{"class":164,"line":687},[162,5490,5491],{"class":5082},"    srand",[162,5493,5494],{"class":168},"((",[162,5496,5497],{"class":172},"unsigned",[162,5499,5500],{"class":172}," int",[162,5502,3720],{"class":168},[162,5504,5505],{"class":5082},"time",[162,5507,604],{"class":168},[162,5509,5510],{"class":207},"NULL",[162,5512,5513],{"class":168},"));\n",[162,5515,5516],{"class":164,"line":692},[162,5517,301],{"emptyLinePlaceholder":300},[162,5519,5520],{"class":164,"line":698},[162,5521,5522],{"class":361},"    \u002F\u002F1.系统生成随机数\n",[162,5524,5525,5528],{"class":164,"line":2955},[162,5526,5527],{"class":361},"    \u002F\u002Frand()%100",[162,5529,5530],{"class":361}," \u002F\u002F生成0-99的随机数\n",[162,5532,5533,5535,5537,5539,5542,5545,5547,5549,5551,5553,5555],{"class":164,"line":2960},[162,5534,5103],{"class":172},[162,5536,5358],{"class":168},[162,5538,173],{"class":172},[162,5540,5541],{"class":5082},"rand",[162,5543,5544],{"class":168},"()",[162,5546,2708],{"class":172},[162,5548,3608],{"class":207},[162,5550,3771],{"class":172},[162,5552,208],{"class":207},[162,5554,3367],{"class":168},[162,5556,5557],{"class":361}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[162,5559,5560],{"class":164,"line":2971},[162,5561,5562],{"class":361},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[162,5564,5565],{"class":164,"line":2984},[162,5566,5567],{"class":361},"    \u002F\u002F2.玩家猜测\n",[162,5569,5570,5572,5575,5577,5579],{"class":164,"line":2989},[162,5571,5103],{"class":172},[162,5573,5574],{"class":168}," val",[162,5576,173],{"class":172},[162,5578,312],{"class":207},[162,5580,4433],{"class":168},[162,5582,5583,5585,5587,5589],{"class":164,"line":3011},[162,5584,5369],{"class":172},[162,5586,1003],{"class":168},[162,5588,208],{"class":207},[162,5590,434],{"class":168},[162,5592,5593],{"class":164,"line":3022},[162,5594,5148],{"class":168},[162,5596,5597,5600,5602],{"class":164,"line":3027},[162,5598,5599],{"class":168},"        cin",[162,5601,4569],{"class":172},[162,5603,5604],{"class":168},"val;\n",[162,5606,5607],{"class":164,"line":3046},[162,5608,5609],{"class":361},"        \u002F\u002F3.判断玩家猜测\n",[162,5611,5612,5615,5618,5620],{"class":164,"line":3052},[162,5613,5614],{"class":172},"        if",[162,5616,5617],{"class":168},"(val",[162,5619,4187],{"class":172},[162,5621,5622],{"class":168},"num) \n",[162,5624,5625],{"class":164,"line":3057},[162,5626,5627],{"class":168},"        {\n",[162,5629,5630,5633,5635,5638,5640],{"class":164,"line":3072},[162,5631,5632],{"class":168},"            cout",[162,5634,4316],{"class":172},[162,5636,5637],{"class":179},"\"猜小了！\"",[162,5639,4316],{"class":172},[162,5641,4338],{"class":168},[162,5643,5644],{"class":164,"line":3077},[162,5645,5646],{"class":168},"        }\n",[162,5648,5649,5652,5654,5657,5659],{"class":164,"line":3100},[162,5650,5651],{"class":172},"        else",[162,5653,4828],{"class":172},[162,5655,5656],{"class":168}," (val",[162,5658,3000],{"class":172},[162,5660,5661],{"class":168},"num)\n",[162,5663,5664],{"class":164,"line":3140},[162,5665,5627],{"class":168},[162,5667,5668,5670,5672,5675,5677],{"class":164,"line":4878},[162,5669,5632],{"class":168},[162,5671,4316],{"class":172},[162,5673,5674],{"class":179},"\"猜大了！\"",[162,5676,4316],{"class":172},[162,5678,4338],{"class":168},[162,5680,5681],{"class":164,"line":4883},[162,5682,5646],{"class":168},[162,5684,5685],{"class":164,"line":4897},[162,5686,5687],{"class":172},"        else\n",[162,5689,5690],{"class":164,"line":4902},[162,5691,5627],{"class":168},[162,5693,5695,5697,5699,5702,5704],{"class":164,"line":5694},30,[162,5696,5632],{"class":168},[162,5698,4316],{"class":172},[162,5700,5701],{"class":179},"\"猜对了！\"",[162,5703,4316],{"class":172},[162,5705,4338],{"class":168},[162,5707,5709,5712],{"class":164,"line":5708},31,[162,5710,5711],{"class":172},"            break",[162,5713,4433],{"class":168},[162,5715,5717],{"class":164,"line":5716},32,[162,5718,5646],{"class":168},[162,5720,5722],{"class":164,"line":5721},33,[162,5723,5724],{"class":361},"        \u002F\u002F猜对 退出游戏\n",[162,5726,5728],{"class":164,"line":5727},34,[162,5729,5730],{"class":361},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[162,5732,5734],{"class":164,"line":5733},35,[162,5735,5305],{"class":168},[162,5737,5739],{"class":164,"line":5738},36,[162,5740,1498],{"class":168},[1452,5742,5743],{"start":197},[1455,5744,5745,5746,5749],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[3453,5747,5748],{},"do...while会先执行一次循环语句","，在判断循环语句",[153,5751,5753],{"className":3305,"code":5752,"language":3307,"meta":158,"style":158},"\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",[71,5754,5755,5760,5768,5772,5784,5792,5796,5813,5820,5824,5837,5847],{"__ignoreMap":158},[162,5756,5757],{"class":164,"line":165},[162,5758,5759],{"class":361},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[162,5761,5762,5764,5766],{"class":164,"line":197},[162,5763,3319],{"class":172},[162,5765,5092],{"class":5082},[162,5767,1526],{"class":168},[162,5769,5770],{"class":164,"line":228},[162,5771,4685],{"class":168},[162,5773,5774,5776,5778,5780,5782],{"class":164,"line":252},[162,5775,5103],{"class":172},[162,5777,5358],{"class":168},[162,5779,173],{"class":172},[162,5781,312],{"class":207},[162,5783,4433],{"class":168},[162,5785,5786,5789],{"class":164,"line":328},[162,5787,5788],{"class":172},"    do",[162,5790,5791],{"class":168}," \n",[162,5793,5794],{"class":164,"line":466},[162,5795,5148],{"class":168},[162,5797,5798,5801,5803,5805,5807,5809,5811],{"class":164,"line":471},[162,5799,5800],{"class":5082},"        std",[162,5802,5390],{"class":168},[162,5804,4316],{"class":172},[162,5806,4794],{"class":168},[162,5808,4316],{"class":172},[162,5810,5399],{"class":5082},[162,5812,5402],{"class":168},[162,5814,5815,5817],{"class":164,"line":687},[162,5816,5407],{"class":168},[162,5818,5819],{"class":172},"++\n",[162,5821,5822],{"class":164,"line":692},[162,5823,5305],{"class":168},[162,5825,5826,5828,5830,5832,5834],{"class":164,"line":698},[162,5827,5369],{"class":172},[162,5829,5372],{"class":168},[162,5831,4187],{"class":172},[162,5833,1006],{"class":207},[162,5835,5836],{"class":168},");\n",[162,5838,5839,5841,5843,5845],{"class":164,"line":2955},[162,5840,5421],{"class":5082},[162,5842,604],{"class":168},[162,5844,5426],{"class":179},[162,5846,5836],{"class":168},[162,5848,5849],{"class":164,"line":2960},[162,5850,1498],{"class":168},[19,5852,5853],{},"案例-水仙花数",[19,5855,5856],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,5858,5859],{},"例如：1^3+5^3+3^3=153",[19,5861,5862],{},"请用do...while语句，求出所有3位数的水仙花数",[153,5864,5866],{"className":3305,"code":5865,"language":3307,"meta":158,"style":158},"#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",[71,5867,5868,5874,5884,5892,5896,5901,5913,5919,5923,5928,5944,5960,5976,5991,6010,6025,6072,6076,6088,6092,6100,6104,6118],{"__ignoreMap":158},[162,5869,5870,5872],{"class":164,"line":165},[162,5871,5068],{"class":172},[162,5873,5452],{"class":179},[162,5875,5876,5878,5880,5882],{"class":164,"line":197},[162,5877,5076],{"class":172},[162,5879,5079],{"class":172},[162,5881,5083],{"class":5082},[162,5883,4433],{"class":168},[162,5885,5886,5888,5890],{"class":164,"line":228},[162,5887,3319],{"class":172},[162,5889,5092],{"class":5082},[162,5891,1526],{"class":168},[162,5893,5894],{"class":164,"line":252},[162,5895,4685],{"class":168},[162,5897,5898],{"class":164,"line":328},[162,5899,5900],{"class":361},"    \u002F\u002F1.先打印所有三位数字\n",[162,5902,5903,5905,5907,5909,5911],{"class":164,"line":466},[162,5904,5103],{"class":172},[162,5906,5358],{"class":168},[162,5908,173],{"class":172},[162,5910,3608],{"class":207},[162,5912,4433],{"class":168},[162,5914,5915,5917],{"class":164,"line":471},[162,5916,5788],{"class":172},[162,5918,5791],{"class":168},[162,5920,5921],{"class":164,"line":687},[162,5922,5148],{"class":168},[162,5924,5925],{"class":164,"line":692},[162,5926,5927],{"class":361},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[162,5929,5930,5933,5935,5937,5939,5941],{"class":164,"line":698},[162,5931,5932],{"class":172},"        int",[162,5934,4538],{"class":168},[162,5936,173],{"class":172},[162,5938,312],{"class":207},[162,5940,3367],{"class":168},[162,5942,5943],{"class":361}," \u002F\u002F个位\n",[162,5945,5946,5948,5951,5953,5955,5957],{"class":164,"line":2955},[162,5947,5932],{"class":172},[162,5949,5950],{"class":168}," b",[162,5952,173],{"class":172},[162,5954,312],{"class":207},[162,5956,3367],{"class":168},[162,5958,5959],{"class":361}," \u002F\u002F十位\n",[162,5961,5962,5964,5967,5969,5971,5973],{"class":164,"line":2960},[162,5963,5932],{"class":172},[162,5965,5966],{"class":168}," c",[162,5968,173],{"class":172},[162,5970,312],{"class":207},[162,5972,3367],{"class":168},[162,5974,5975],{"class":361}," \u002F\u002F百位\n",[162,5977,5978,5981,5983,5985,5987,5989],{"class":164,"line":2971},[162,5979,5980],{"class":168},"        a",[162,5982,173],{"class":172},[162,5984,4794],{"class":168},[162,5986,2708],{"class":172},[162,5988,1006],{"class":207},[162,5990,4433],{"class":168},[162,5992,5993,5996,5998,6000,6002,6004,6006,6008],{"class":164,"line":2984},[162,5994,5995],{"class":168},"        b",[162,5997,173],{"class":172},[162,5999,4794],{"class":168},[162,6001,946],{"class":172},[162,6003,1006],{"class":207},[162,6005,2708],{"class":172},[162,6007,1006],{"class":207},[162,6009,4433],{"class":168},[162,6011,6012,6015,6017,6019,6021,6023],{"class":164,"line":2989},[162,6013,6014],{"class":168},"        c",[162,6016,173],{"class":172},[162,6018,4794],{"class":168},[162,6020,946],{"class":172},[162,6022,3608],{"class":207},[162,6024,4433],{"class":168},[162,6026,6027,6029,6031,6033,6035,6037,6039,6041,6043,6045,6047,6049,6051,6053,6055,6057,6059,6061,6064,6066,6069],{"class":164,"line":3011},[162,6028,5614],{"class":172},[162,6030,4960],{"class":168},[162,6032,3745],{"class":172},[162,6034,3538],{"class":168},[162,6036,3745],{"class":172},[162,6038,3538],{"class":168},[162,6040,3771],{"class":172},[162,6042,3561],{"class":168},[162,6044,3745],{"class":172},[162,6046,3561],{"class":168},[162,6048,3745],{"class":172},[162,6050,3561],{"class":168},[162,6052,3771],{"class":172},[162,6054,3586],{"class":168},[162,6056,3745],{"class":172},[162,6058,3586],{"class":168},[162,6060,3745],{"class":172},[162,6062,6063],{"class":168},"c ",[162,6065,2292],{"class":172},[162,6067,6068],{"class":168}," num)",[162,6070,6071],{"class":361}," \u002F\u002F如果是水仙花数，才打印\n",[162,6073,6074],{"class":164,"line":3022},[162,6075,5627],{"class":168},[162,6077,6078,6080,6082,6084,6086],{"class":164,"line":3027},[162,6079,5632],{"class":168},[162,6081,4316],{"class":172},[162,6083,4794],{"class":168},[162,6085,4316],{"class":172},[162,6087,4338],{"class":168},[162,6089,6090],{"class":164,"line":3046},[162,6091,5646],{"class":168},[162,6093,6094,6096,6098],{"class":164,"line":3052},[162,6095,5407],{"class":168},[162,6097,5410],{"class":172},[162,6099,4433],{"class":168},[162,6101,6102],{"class":164,"line":3057},[162,6103,5305],{"class":168},[162,6105,6106,6108,6111,6113,6116],{"class":164,"line":3072},[162,6107,5369],{"class":172},[162,6109,6110],{"class":168}," (num ",[162,6112,4187],{"class":172},[162,6114,6115],{"class":207}," 1000",[162,6117,5836],{"class":168},[162,6119,6120],{"class":164,"line":3077},[162,6121,1498],{"class":168},[1452,6123,6124],{"start":228},[1455,6125,6126],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[153,6128,6130],{"className":3305,"code":6129,"language":3307,"meta":158,"style":158},"\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",[71,6131,6132,6137,6165,6169,6181,6185,6190,6201,6208,6212,6225,6229,6236,6240,6252,6261],{"__ignoreMap":158},[162,6133,6134],{"class":164,"line":165},[162,6135,6136],{"class":361},"\u002F\u002F从数字0-9打印\n",[162,6138,6139,6141,6143,6145,6148,6150,6152,6155,6157,6159,6161,6163],{"class":164,"line":197},[162,6140,808],{"class":172},[162,6142,604],{"class":168},[162,6144,3319],{"class":172},[162,6146,6147],{"class":168}," i",[162,6149,173],{"class":172},[162,6151,312],{"class":207},[162,6153,6154],{"class":168},";i",[162,6156,4187],{"class":172},[162,6158,1006],{"class":207},[162,6160,6154],{"class":168},[162,6162,5410],{"class":172},[162,6164,434],{"class":168},[162,6166,6167],{"class":164,"line":228},[162,6168,4685],{"class":168},[162,6170,6171,6173,6175,6177,6179],{"class":164,"line":252},[162,6172,4690],{"class":168},[162,6174,4316],{"class":172},[162,6176,3732],{"class":168},[162,6178,4316],{"class":172},[162,6180,4338],{"class":168},[162,6182,6183],{"class":164,"line":328},[162,6184,1498],{"class":168},[162,6186,6187],{"class":164,"line":466},[162,6188,6189],{"class":361},"\u002F\u002F上式可以进行拆分\n",[162,6191,6192,6194,6196,6198],{"class":164,"line":471},[162,6193,3319],{"class":172},[162,6195,6147],{"class":168},[162,6197,173],{"class":172},[162,6199,6200],{"class":207},"0\n",[162,6202,6203,6205],{"class":164,"line":687},[162,6204,808],{"class":172},[162,6206,6207],{"class":168},"(;;;)\n",[162,6209,6210],{"class":164,"line":692},[162,6211,4685],{"class":168},[162,6213,6214,6216,6219,6221,6223],{"class":164,"line":698},[162,6215,2283],{"class":172},[162,6217,6218],{"class":168},"(i",[162,6220,3038],{"class":172},[162,6222,1006],{"class":207},[162,6224,434],{"class":168},[162,6226,6227],{"class":164,"line":2955},[162,6228,5148],{"class":168},[162,6230,6231,6234],{"class":164,"line":2960},[162,6232,6233],{"class":172},"        break",[162,6235,4433],{"class":168},[162,6237,6238],{"class":164,"line":2971},[162,6239,5305],{"class":168},[162,6241,6242,6244,6246,6248,6250],{"class":164,"line":2984},[162,6243,4690],{"class":168},[162,6245,4316],{"class":172},[162,6247,3732],{"class":168},[162,6249,4316],{"class":172},[162,6251,4338],{"class":168},[162,6253,6254,6257,6259],{"class":164,"line":2989},[162,6255,6256],{"class":168},"    i",[162,6258,5410],{"class":172},[162,6260,4433],{"class":168},[162,6262,6263],{"class":164,"line":3011},[162,6264,1498],{"class":168},[19,6266,6267],{},"小练习",[153,6269,6271],{"className":3305,"code":6270,"language":3307,"meta":158,"style":158},"#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",[71,6272,6273,6279,6289,6297,6301,6306,6311,6339,6343,6348,6353,6394,6398,6411,6415,6419,6423,6435,6439,6443],{"__ignoreMap":158},[162,6274,6275,6277],{"class":164,"line":165},[162,6276,5068],{"class":172},[162,6278,5071],{"class":179},[162,6280,6281,6283,6285,6287],{"class":164,"line":197},[162,6282,5076],{"class":172},[162,6284,5079],{"class":172},[162,6286,5083],{"class":5082},[162,6288,4433],{"class":168},[162,6290,6291,6293,6295],{"class":164,"line":228},[162,6292,3319],{"class":172},[162,6294,5092],{"class":5082},[162,6296,1526],{"class":168},[162,6298,6299],{"class":164,"line":252},[162,6300,4685],{"class":168},[162,6302,6303],{"class":164,"line":328},[162,6304,6305],{"class":361},"    \u002F\u002F敲桌子案例\n",[162,6307,6308],{"class":164,"line":466},[162,6309,6310],{"class":361},"    \u002F\u002F1.先输出1-100的数字\n",[162,6312,6313,6316,6318,6320,6322,6324,6326,6329,6331,6333,6335,6337],{"class":164,"line":471},[162,6314,6315],{"class":172},"    for",[162,6317,604],{"class":168},[162,6319,3319],{"class":172},[162,6321,6147],{"class":168},[162,6323,173],{"class":172},[162,6325,208],{"class":207},[162,6327,6328],{"class":168},"; i",[162,6330,4725],{"class":172},[162,6332,3608],{"class":207},[162,6334,6328],{"class":168},[162,6336,5410],{"class":172},[162,6338,434],{"class":168},[162,6340,6341],{"class":164,"line":687},[162,6342,5148],{"class":168},[162,6344,6345],{"class":164,"line":692},[162,6346,6347],{"class":361},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[162,6349,6350],{"class":164,"line":698},[162,6351,6352],{"class":361},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[162,6354,6355,6357,6359,6361,6363,6365,6367,6370,6372,6374,6376,6378,6380,6382,6384,6386,6388,6390,6392],{"class":164,"line":2955},[162,6356,5614],{"class":172},[162,6358,6218],{"class":168},[162,6360,2708],{"class":172},[162,6362,3661],{"class":207},[162,6364,2292],{"class":172},[162,6366,312],{"class":207},[162,6368,6369],{"class":172}," ||",[162,6371,6147],{"class":168},[162,6373,2708],{"class":172},[162,6375,1006],{"class":207},[162,6377,2292],{"class":172},[162,6379,3661],{"class":207},[162,6381,6369],{"class":172},[162,6383,6147],{"class":168},[162,6385,946],{"class":172},[162,6387,1006],{"class":207},[162,6389,2292],{"class":172},[162,6391,3661],{"class":207},[162,6393,434],{"class":168},[162,6395,6396],{"class":164,"line":2960},[162,6397,5627],{"class":168},[162,6399,6400,6402,6404,6407,6409],{"class":164,"line":2971},[162,6401,5632],{"class":168},[162,6403,4316],{"class":172},[162,6405,6406],{"class":179},"\"敲桌子\"",[162,6408,4316],{"class":172},[162,6410,4338],{"class":168},[162,6412,6413],{"class":164,"line":2984},[162,6414,5646],{"class":168},[162,6416,6417],{"class":164,"line":2989},[162,6418,5687],{"class":172},[162,6420,6421],{"class":164,"line":3011},[162,6422,5627],{"class":168},[162,6424,6425,6427,6429,6431,6433],{"class":164,"line":3022},[162,6426,5632],{"class":168},[162,6428,4316],{"class":172},[162,6430,3732],{"class":168},[162,6432,4316],{"class":172},[162,6434,4338],{"class":168},[162,6436,6437],{"class":164,"line":3027},[162,6438,5646],{"class":168},[162,6440,6441],{"class":164,"line":3046},[162,6442,5305],{"class":168},[162,6444,6445],{"class":164,"line":3052},[162,6446,1498],{"class":168},[19,6448,6449],{},"嵌套实现星图",[153,6451,6453],{"className":3305,"code":6452,"language":3307,"meta":158,"style":158},"#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",[71,6454,6455,6461,6471,6479,6483,6509,6513,6542,6546,6557,6561,6570,6574],{"__ignoreMap":158},[162,6456,6457,6459],{"class":164,"line":165},[162,6458,5068],{"class":172},[162,6460,5071],{"class":179},[162,6462,6463,6465,6467,6469],{"class":164,"line":197},[162,6464,5076],{"class":172},[162,6466,5079],{"class":172},[162,6468,5083],{"class":5082},[162,6470,4433],{"class":168},[162,6472,6473,6475,6477],{"class":164,"line":228},[162,6474,3319],{"class":172},[162,6476,5092],{"class":5082},[162,6478,1526],{"class":168},[162,6480,6481],{"class":164,"line":252},[162,6482,4685],{"class":168},[162,6484,6485,6487,6489,6491,6493,6495,6497,6499,6501,6503,6505,6507],{"class":164,"line":328},[162,6486,6315],{"class":172},[162,6488,1003],{"class":168},[162,6490,3319],{"class":172},[162,6492,6147],{"class":168},[162,6494,173],{"class":172},[162,6496,312],{"class":207},[162,6498,6154],{"class":168},[162,6500,4187],{"class":172},[162,6502,1006],{"class":207},[162,6504,6154],{"class":168},[162,6506,5410],{"class":172},[162,6508,434],{"class":168},[162,6510,6511],{"class":164,"line":466},[162,6512,5148],{"class":168},[162,6514,6515,6518,6520,6522,6525,6527,6529,6532,6534,6536,6538,6540],{"class":164,"line":471},[162,6516,6517],{"class":172},"        for",[162,6519,1003],{"class":168},[162,6521,3319],{"class":172},[162,6523,6524],{"class":168}," j",[162,6526,173],{"class":172},[162,6528,312],{"class":207},[162,6530,6531],{"class":168},";j",[162,6533,4187],{"class":172},[162,6535,1006],{"class":207},[162,6537,6531],{"class":168},[162,6539,5410],{"class":172},[162,6541,434],{"class":168},[162,6543,6544],{"class":164,"line":687},[162,6545,5627],{"class":168},[162,6547,6548,6550,6552,6555],{"class":164,"line":692},[162,6549,5632],{"class":168},[162,6551,4316],{"class":172},[162,6553,6554],{"class":179},"\"*\"",[162,6556,4433],{"class":168},[162,6558,6559],{"class":164,"line":698},[162,6560,5646],{"class":168},[162,6562,6563,6566,6568],{"class":164,"line":2955},[162,6564,6565],{"class":168},"        cout",[162,6567,4316],{"class":172},[162,6569,4338],{"class":168},[162,6571,6572],{"class":164,"line":2960},[162,6573,5305],{"class":168},[162,6575,6576],{"class":164,"line":2971},[162,6577,1498],{"class":168},[19,6579,6580],{},"乘法口诀表",[153,6582,6584],{"className":3305,"code":6583,"language":3307,"meta":158,"style":158},"#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",[71,6585,6586,6592,6602,6610,6614,6640,6644,6669,6673,6713,6717,6725,6729],{"__ignoreMap":158},[162,6587,6588,6590],{"class":164,"line":165},[162,6589,5068],{"class":172},[162,6591,5452],{"class":179},[162,6593,6594,6596,6598,6600],{"class":164,"line":197},[162,6595,5076],{"class":172},[162,6597,5079],{"class":172},[162,6599,5083],{"class":5082},[162,6601,4433],{"class":168},[162,6603,6604,6606,6608],{"class":164,"line":228},[162,6605,3319],{"class":172},[162,6607,5092],{"class":5082},[162,6609,1526],{"class":168},[162,6611,6612],{"class":164,"line":252},[162,6613,4685],{"class":168},[162,6615,6616,6618,6620,6622,6624,6626,6628,6630,6632,6634,6636,6638],{"class":164,"line":328},[162,6617,6315],{"class":172},[162,6619,604],{"class":168},[162,6621,3319],{"class":172},[162,6623,6147],{"class":168},[162,6625,173],{"class":172},[162,6627,208],{"class":207},[162,6629,6154],{"class":168},[162,6631,4187],{"class":172},[162,6633,1006],{"class":207},[162,6635,6154],{"class":168},[162,6637,5410],{"class":172},[162,6639,434],{"class":168},[162,6641,6642],{"class":164,"line":466},[162,6643,5148],{"class":168},[162,6645,6646,6648,6650,6652,6654,6656,6658,6660,6662,6665,6667],{"class":164,"line":471},[162,6647,6517],{"class":172},[162,6649,604],{"class":168},[162,6651,3319],{"class":172},[162,6653,6524],{"class":168},[162,6655,173],{"class":172},[162,6657,208],{"class":207},[162,6659,6531],{"class":168},[162,6661,4725],{"class":172},[162,6663,6664],{"class":168},"i;j",[162,6666,5410],{"class":172},[162,6668,434],{"class":168},[162,6670,6671],{"class":164,"line":687},[162,6672,5627],{"class":168},[162,6674,6675,6677,6679,6681,6683,6685,6687,6689,6691,6694,6696,6698,6700,6702,6704,6707,6709,6711],{"class":164,"line":692},[162,6676,5632],{"class":168},[162,6678,4316],{"class":172},[162,6680,3757],{"class":168},[162,6682,4316],{"class":172},[162,6684,6554],{"class":179},[162,6686,4316],{"class":172},[162,6688,3732],{"class":168},[162,6690,4316],{"class":172},[162,6692,6693],{"class":179},"\"=\"",[162,6695,4316],{"class":172},[162,6697,3732],{"class":168},[162,6699,3745],{"class":172},[162,6701,3757],{"class":168},[162,6703,4316],{"class":172},[162,6705,6706],{"class":179},"'",[162,6708,4373],{"class":207},[162,6710,6706],{"class":179},[162,6712,4433],{"class":168},[162,6714,6715],{"class":164,"line":698},[162,6716,5646],{"class":168},[162,6718,6719,6721,6723],{"class":164,"line":2955},[162,6720,6565],{"class":168},[162,6722,4316],{"class":172},[162,6724,4338],{"class":168},[162,6726,6727],{"class":164,"line":2960},[162,6728,5305],{"class":168},[162,6730,6731],{"class":164,"line":2971},[162,6732,1498],{"class":168},[3284,6734,6736],{"id":6735},"_163跳出语句","1.6.3跳出语句",[1452,6738,6739],{},[1455,6740,6741],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,6743,6744],{},"break使用时机：",[4279,6746,6747,6750,6753],{},[1455,6748,6749],{},"出现在switch条件语句中，作用是终止case并跳出switch",[1455,6751,6752],{},"出现在循环结构中，作用是跳出当前的循环结构",[1455,6754,6755],{},"出现在嵌套循环中，跳出最近的内层循环语句",[1452,6757,6758,6761],{"start":197},[1455,6759,6760],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[1455,6762,6763],{},"goto语句\n语法：goto 标记;",[19,6765,6766],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[153,6768,6770],{"className":3305,"code":6769,"language":3307,"meta":158,"style":158},"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",[71,6771,6772,6780,6784,6797,6807,6820,6833,6846,6853,6869],{"__ignoreMap":158},[162,6773,6774,6776,6778],{"class":164,"line":165},[162,6775,3319],{"class":172},[162,6777,5092],{"class":5082},[162,6779,1526],{"class":168},[162,6781,6782],{"class":164,"line":197},[162,6783,4685],{"class":168},[162,6785,6786,6788,6790,6793,6795],{"class":164,"line":228},[162,6787,4690],{"class":168},[162,6789,4316],{"class":172},[162,6791,6792],{"class":179},"\"1\"",[162,6794,4316],{"class":172},[162,6796,4338],{"class":168},[162,6798,6799,6802,6805],{"class":164,"line":252},[162,6800,6801],{"class":172},"    goto",[162,6803,6804],{"class":5082}," FLAG",[162,6806,4433],{"class":168},[162,6808,6809,6811,6813,6816,6818],{"class":164,"line":328},[162,6810,4690],{"class":168},[162,6812,4316],{"class":172},[162,6814,6815],{"class":179},"\"2\"",[162,6817,4316],{"class":172},[162,6819,4338],{"class":168},[162,6821,6822,6824,6826,6829,6831],{"class":164,"line":466},[162,6823,4690],{"class":168},[162,6825,4316],{"class":172},[162,6827,6828],{"class":179},"\"3\"",[162,6830,4316],{"class":172},[162,6832,4338],{"class":168},[162,6834,6835,6837,6839,6842,6844],{"class":164,"line":471},[162,6836,4690],{"class":168},[162,6838,4316],{"class":172},[162,6840,6841],{"class":179},"\"4\"",[162,6843,4316],{"class":172},[162,6845,4338],{"class":168},[162,6847,6848,6851],{"class":164,"line":687},[162,6849,6850],{"class":5082},"    FLAG",[162,6852,2316],{"class":168},[162,6854,6855,6857,6859,6862,6864,6866],{"class":164,"line":692},[162,6856,4690],{"class":168},[162,6858,4316],{"class":172},[162,6860,6861],{"class":179},"\"5\"",[162,6863,4316],{"class":172},[162,6865,4381],{"class":168},[162,6867,6868],{"class":361},"\u002F\u002F跳过了2,3,4,直接到5\n",[162,6870,6871],{"class":164,"line":698},[162,6872,1498],{"class":168},[14,6874,6876],{"id":6875},"_17数组","1.7数组",[3284,6878,6880],{"id":6879},"_171一维数组","1.7.1一维数组",[1452,6882,6883],{},[1455,6884,6885],{},"一维数组定义方式",[26,6887,6888,6898],{},[29,6889,6890],{},[32,6891,6892,6895],{},[35,6893,6894],{},"方式",[35,6896,6897],{},"注意事项",[51,6899,6900,6914,6924],{},[32,6901,6902,6908],{},[56,6903,6904,6905,3367],{},"数据类型 数组名",[162,6906,6907],{},"数组长度",[56,6909,6910,6911,6913],{},"这种方式是先定义再arr",[162,6912,3732],{},"赋值",[32,6915,6916,6921],{},[56,6917,6904,6918,6920],{},[162,6919,6907],{},"={值1,值2....};",[56,6922,6923],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[32,6925,6926,6930],{},[56,6927,6904,6928,6920],{},[162,6929],{},[56,6931,6932,6933,6935],{},"int arr",[162,6934],{},";这是不正确的，按照这样的方式定义必须有初始长度",[1452,6937,6938],{"start":197},[1455,6939,6940],{},"一维数组数组名\n用途：",[4279,6942,6943],{},[1455,6944,6945],{},"1.可以统计整个数组在内存中的长度：",[153,6947,6949],{"className":3305,"code":6948,"language":3307,"meta":158,"style":158},"sizeof(arr);\nsizeof(arr[0]);\n",[71,6950,6951,6958],{"__ignoreMap":158},[162,6952,6953,6955],{"class":164,"line":165},[162,6954,3314],{"class":172},[162,6956,6957],{"class":168},"(arr);\n",[162,6959,6960,6962,6965,6967],{"class":164,"line":197},[162,6961,3314],{"class":172},[162,6963,6964],{"class":168},"(arr[",[162,6966,312],{"class":207},[162,6968,6969],{"class":168},"]);\n",[4279,6971,6972],{},[1455,6973,6974],{},"2.可以获取数组在内存中的首地址:",[153,6976,6978],{"className":3305,"code":6977,"language":3307,"meta":158,"style":158},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[71,6979,6980,6985,6998,7003],{"__ignoreMap":158},[162,6981,6982],{"class":164,"line":165},[162,6983,6984],{"class":361},"\u002F\u002F查看16进制的首地址\n",[162,6986,6987,6989,6991,6994,6996],{"class":164,"line":197},[162,6988,4509],{"class":168},[162,6990,4316],{"class":172},[162,6992,6993],{"class":168},"arr",[162,6995,4316],{"class":172},[162,6997,4338],{"class":168},[162,6999,7000],{"class":164,"line":228},[162,7001,7002],{"class":361},"\u002F\u002F看10进制数\n",[162,7004,7005,7007,7009,7011,7013,7015,7017,7020,7022,7024,7026],{"class":164,"line":252},[162,7006,4509],{"class":168},[162,7008,4316],{"class":172},[162,7010,604],{"class":168},[162,7012,3319],{"class":172},[162,7014,3720],{"class":168},[162,7016,1667],{"class":172},[162,7018,7019],{"class":168},"arr[",[162,7021,312],{"class":207},[162,7023,3120],{"class":168},[162,7025,4316],{"class":172},[162,7027,4338],{"class":168},[19,7029,7030],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[4279,7032,7033],{},[1455,7034,7035],{},"1️⃣五只小猪称体重",[153,7037,7039],{"className":3305,"code":7038,"language":3307,"meta":158,"style":158},"#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",[71,7040,7041,7047,7057,7065,7069,7109,7122,7148,7152,7164,7168,7178,7182,7186,7199,7208],{"__ignoreMap":158},[162,7042,7043,7045],{"class":164,"line":165},[162,7044,5068],{"class":172},[162,7046,5071],{"class":179},[162,7048,7049,7051,7053,7055],{"class":164,"line":197},[162,7050,5076],{"class":172},[162,7052,5079],{"class":172},[162,7054,5083],{"class":5082},[162,7056,4433],{"class":168},[162,7058,7059,7061,7063],{"class":164,"line":228},[162,7060,3319],{"class":172},[162,7062,5092],{"class":5082},[162,7064,1526],{"class":168},[162,7066,7067],{"class":164,"line":252},[162,7068,4685],{"class":168},[162,7070,7071,7073,7076,7078,7080,7082,7084,7087,7089,7092,7094,7096,7098,7101,7103,7106],{"class":164,"line":328},[162,7072,5103],{"class":172},[162,7074,7075],{"class":168}," arr[",[162,7077,637],{"class":207},[162,7079,3120],{"class":168},[162,7081,173],{"class":172},[162,7083,967],{"class":168},[162,7085,7086],{"class":207},"300",[162,7088,3670],{"class":168},[162,7090,7091],{"class":207},"350",[162,7093,3670],{"class":168},[162,7095,4845],{"class":207},[162,7097,3670],{"class":168},[162,7099,7100],{"class":207},"400",[162,7102,3670],{"class":168},[162,7104,7105],{"class":207},"250",[162,7107,7108],{"class":168},"};\n",[162,7110,7111,7113,7116,7118,7120],{"class":164,"line":466},[162,7112,5103],{"class":172},[162,7114,7115],{"class":168}," tmp",[162,7117,173],{"class":172},[162,7119,312],{"class":207},[162,7121,4433],{"class":168},[162,7123,7124,7126,7128,7130,7132,7134,7136,7138,7140,7142,7144,7146],{"class":164,"line":471},[162,7125,6315],{"class":172},[162,7127,1003],{"class":168},[162,7129,3319],{"class":172},[162,7131,6147],{"class":168},[162,7133,173],{"class":172},[162,7135,312],{"class":207},[162,7137,6154],{"class":168},[162,7139,4187],{"class":172},[162,7141,637],{"class":207},[162,7143,6154],{"class":168},[162,7145,5410],{"class":172},[162,7147,434],{"class":168},[162,7149,7150],{"class":164,"line":687},[162,7151,5148],{"class":168},[162,7153,7154,7156,7159,7161],{"class":164,"line":692},[162,7155,5614],{"class":172},[162,7157,7158],{"class":168},"(tmp",[162,7160,4187],{"class":172},[162,7162,7163],{"class":168},"arr[i])\n",[162,7165,7166],{"class":164,"line":698},[162,7167,5627],{"class":168},[162,7169,7170,7173,7175],{"class":164,"line":2955},[162,7171,7172],{"class":168},"            tmp",[162,7174,173],{"class":172},[162,7176,7177],{"class":168},"arr[i];\n",[162,7179,7180],{"class":164,"line":2960},[162,7181,5646],{"class":168},[162,7183,7184],{"class":164,"line":2971},[162,7185,5305],{"class":168},[162,7187,7188,7190,7192,7195,7197],{"class":164,"line":2984},[162,7189,4690],{"class":168},[162,7191,4316],{"class":172},[162,7193,7194],{"class":168},"tmp",[162,7196,4316],{"class":172},[162,7198,4338],{"class":168},[162,7200,7201,7204,7206],{"class":164,"line":2989},[162,7202,7203],{"class":172},"    return",[162,7205,2717],{"class":207},[162,7207,4433],{"class":168},[162,7209,7210],{"class":164,"line":3011},[162,7211,1498],{"class":168},[4279,7213,7214],{},[1455,7215,7216],{},"2️⃣数组元素逆置",[153,7218,7220],{"className":3305,"code":7219,"language":3307,"meta":158,"style":158},"\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",[71,7221,7222,7227,7233,7243,7251,7255,7290,7306,7338,7351,7356,7361,7373,7383,7393,7398,7407,7417,7422,7427,7454,7458,7474,7478,7489,7498],{"__ignoreMap":158},[162,7223,7224],{"class":164,"line":165},[162,7225,7226],{"class":361},"\u002F\u002F元素逆置\n",[162,7228,7229,7231],{"class":164,"line":197},[162,7230,5068],{"class":172},[162,7232,5071],{"class":179},[162,7234,7235,7237,7239,7241],{"class":164,"line":228},[162,7236,5076],{"class":172},[162,7238,5079],{"class":172},[162,7240,5083],{"class":5082},[162,7242,4433],{"class":168},[162,7244,7245,7247,7249],{"class":164,"line":252},[162,7246,3319],{"class":172},[162,7248,5092],{"class":5082},[162,7250,1526],{"class":168},[162,7252,7253],{"class":164,"line":328},[162,7254,4685],{"class":168},[162,7256,7257,7260,7262,7264,7266,7268,7270,7272,7274,7276,7278,7280,7282,7284,7286,7288],{"class":164,"line":466},[162,7258,7259],{"class":172},"   int",[162,7261,7075],{"class":168},[162,7263,637],{"class":207},[162,7265,3120],{"class":168},[162,7267,173],{"class":172},[162,7269,967],{"class":168},[162,7271,208],{"class":207},[162,7273,3670],{"class":168},[162,7275,213],{"class":207},[162,7277,3670],{"class":168},[162,7279,218],{"class":207},[162,7281,3670],{"class":168},[162,7283,223],{"class":207},[162,7285,3670],{"class":168},[162,7287,637],{"class":207},[162,7289,7108],{"class":168},[162,7291,7292,7294,7297,7299,7301,7303],{"class":164,"line":471},[162,7293,7259],{"class":172},[162,7295,7296],{"class":168}," start",[162,7298,173],{"class":172},[162,7300,312],{"class":207},[162,7302,3367],{"class":168},[162,7304,7305],{"class":361},"\u002F\u002F起始下标\n",[162,7307,7308,7310,7313,7316,7319,7322,7324,7326,7329,7331,7333,7335],{"class":164,"line":687},[162,7309,7259],{"class":172},[162,7311,7312],{"class":168}," end",[162,7314,7315],{"class":172},"=sizeof",[162,7317,7318],{"class":168},"(arr)",[162,7320,7321],{"class":172},"\u002Fsizeof",[162,7323,6964],{"class":168},[162,7325,312],{"class":207},[162,7327,7328],{"class":168},"])",[162,7330,353],{"class":172},[162,7332,208],{"class":207},[162,7334,3367],{"class":168},[162,7336,7337],{"class":361},"\u002F\u002F结束下标\n",[162,7339,7340,7343,7346,7348],{"class":164,"line":692},[162,7341,7342],{"class":172},"   while",[162,7344,7345],{"class":168}," (start",[162,7347,4187],{"class":172},[162,7349,7350],{"class":168},"end)\n",[162,7352,7353],{"class":164,"line":698},[162,7354,7355],{"class":168},"   {\n",[162,7357,7358],{"class":164,"line":2955},[162,7359,7360],{"class":361},"    \u002F\u002F实现元素互换代码\n",[162,7362,7363,7365,7368,7370],{"class":164,"line":2960},[162,7364,5103],{"class":172},[162,7366,7367],{"class":168}," temp",[162,7369,173],{"class":172},[162,7371,7372],{"class":168},"arr[start];\n",[162,7374,7375,7378,7380],{"class":164,"line":2971},[162,7376,7377],{"class":168},"    arr[start]",[162,7379,173],{"class":172},[162,7381,7382],{"class":168},"arr[end];\n",[162,7384,7385,7388,7390],{"class":164,"line":2984},[162,7386,7387],{"class":168},"    arr[end]",[162,7389,173],{"class":172},[162,7391,7392],{"class":168},"temp;\n",[162,7394,7395],{"class":164,"line":2989},[162,7396,7397],{"class":361},"    \u002F\u002F下标更新\n",[162,7399,7400,7403,7405],{"class":164,"line":3011},[162,7401,7402],{"class":168},"    start",[162,7404,5410],{"class":172},[162,7406,4433],{"class":168},[162,7408,7409,7412,7415],{"class":164,"line":3022},[162,7410,7411],{"class":168},"    end",[162,7413,7414],{"class":172},"--",[162,7416,4433],{"class":168},[162,7418,7419],{"class":164,"line":3027},[162,7420,7421],{"class":168},"   }\n",[162,7423,7424],{"class":164,"line":3046},[162,7425,7426],{"class":361},"   \u002F\u002F输出逆置后的数组\n",[162,7428,7429,7432,7434,7436,7438,7440,7442,7444,7446,7448,7450,7452],{"class":164,"line":3052},[162,7430,7431],{"class":172},"   for",[162,7433,1003],{"class":168},[162,7435,3319],{"class":172},[162,7437,6147],{"class":168},[162,7439,173],{"class":172},[162,7441,312],{"class":207},[162,7443,6154],{"class":168},[162,7445,4187],{"class":172},[162,7447,637],{"class":207},[162,7449,6154],{"class":168},[162,7451,5410],{"class":172},[162,7453,434],{"class":168},[162,7455,7456],{"class":164,"line":3057},[162,7457,7355],{"class":168},[162,7459,7460,7462,7464,7467,7469,7472],{"class":164,"line":3072},[162,7461,4690],{"class":168},[162,7463,4316],{"class":172},[162,7465,7466],{"class":168},"arr[i]",[162,7468,4316],{"class":172},[162,7470,7471],{"class":179},"\" \"",[162,7473,4433],{"class":168},[162,7475,7476],{"class":164,"line":3077},[162,7477,7421],{"class":168},[162,7479,7480,7483,7485,7487],{"class":164,"line":3100},[162,7481,7482],{"class":5082},"   system",[162,7484,604],{"class":168},[162,7486,5426],{"class":179},[162,7488,5836],{"class":168},[162,7490,7491,7494,7496],{"class":164,"line":3140},[162,7492,7493],{"class":172},"   return",[162,7495,2717],{"class":207},[162,7497,4433],{"class":168},[162,7499,7500],{"class":164,"line":4878},[162,7501,1498],{"class":168},[4279,7503,7504],{},[1455,7505,7506],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[153,7508,7510],{"className":3305,"code":7509,"language":3307,"meta":158,"style":158},"\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",[71,7511,7512,7517,7523,7533,7541,7545,7595,7608,7634,7638,7652,7656,7661,7666,7696,7700,7705,7739,7743,7748,7767,7772,7784,7800,7815,7820,7824,7828,7841,7867,7871,7885,7889,7897],{"__ignoreMap":158},[162,7513,7514],{"class":164,"line":165},[162,7515,7516],{"class":361},"\u002F\u002F冒泡排序,升序\n",[162,7518,7519,7521],{"class":164,"line":197},[162,7520,5068],{"class":172},[162,7522,5071],{"class":179},[162,7524,7525,7527,7529,7531],{"class":164,"line":228},[162,7526,5076],{"class":172},[162,7528,5079],{"class":172},[162,7530,5083],{"class":5082},[162,7532,4433],{"class":168},[162,7534,7535,7537,7539],{"class":164,"line":252},[162,7536,3319],{"class":172},[162,7538,5092],{"class":5082},[162,7540,1526],{"class":168},[162,7542,7543],{"class":164,"line":328},[162,7544,4685],{"class":168},[162,7546,7547,7549,7551,7553,7555,7557,7559,7561,7563,7565,7567,7569,7571,7573,7575,7577,7579,7581,7583,7585,7587,7589,7591,7593],{"class":164,"line":466},[162,7548,5103],{"class":172},[162,7550,7075],{"class":168},[162,7552,3711],{"class":207},[162,7554,1204],{"class":168},[162,7556,173],{"class":172},[162,7558,1477],{"class":168},[162,7560,223],{"class":207},[162,7562,3670],{"class":168},[162,7564,213],{"class":207},[162,7566,3670],{"class":168},[162,7568,3687],{"class":207},[162,7570,3670],{"class":168},[162,7572,312],{"class":207},[162,7574,3670],{"class":168},[162,7576,637],{"class":207},[162,7578,3670],{"class":168},[162,7580,3661],{"class":207},[162,7582,3670],{"class":168},[162,7584,208],{"class":207},[162,7586,3670],{"class":168},[162,7588,218],{"class":207},[162,7590,3670],{"class":168},[162,7592,3711],{"class":207},[162,7594,7108],{"class":168},[162,7596,7597,7599,7601,7604,7606],{"class":164,"line":471},[162,7598,4690],{"class":168},[162,7600,4316],{"class":172},[162,7602,7603],{"class":179},"\"排序前：\"",[162,7605,4316],{"class":172},[162,7607,4338],{"class":168},[162,7609,7610,7612,7614,7616,7618,7620,7622,7624,7626,7628,7630,7632],{"class":164,"line":687},[162,7611,6315],{"class":172},[162,7613,1003],{"class":168},[162,7615,3319],{"class":172},[162,7617,6147],{"class":168},[162,7619,173],{"class":172},[162,7621,312],{"class":207},[162,7623,6154],{"class":168},[162,7625,4187],{"class":172},[162,7627,3711],{"class":207},[162,7629,6154],{"class":168},[162,7631,5410],{"class":172},[162,7633,434],{"class":168},[162,7635,7636],{"class":164,"line":692},[162,7637,5148],{"class":168},[162,7639,7640,7642,7644,7646,7648,7650],{"class":164,"line":698},[162,7641,6565],{"class":168},[162,7643,4316],{"class":172},[162,7645,7466],{"class":168},[162,7647,4316],{"class":172},[162,7649,7471],{"class":179},[162,7651,4433],{"class":168},[162,7653,7654],{"class":164,"line":2955},[162,7655,5305],{"class":168},[162,7657,7658],{"class":164,"line":2960},[162,7659,7660],{"class":361},"    \u002F\u002F开始冒泡排序\n",[162,7662,7663],{"class":164,"line":2971},[162,7664,7665],{"class":361},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[162,7667,7668,7670,7672,7674,7676,7678,7680,7682,7684,7686,7688,7690,7692,7694],{"class":164,"line":2984},[162,7669,6315],{"class":172},[162,7671,1003],{"class":168},[162,7673,3319],{"class":172},[162,7675,6147],{"class":168},[162,7677,173],{"class":172},[162,7679,312],{"class":207},[162,7681,6154],{"class":168},[162,7683,4187],{"class":172},[162,7685,3711],{"class":207},[162,7687,353],{"class":172},[162,7689,208],{"class":207},[162,7691,6154],{"class":168},[162,7693,5410],{"class":172},[162,7695,434],{"class":168},[162,7697,7698],{"class":164,"line":2989},[162,7699,5148],{"class":168},[162,7701,7702],{"class":164,"line":3011},[162,7703,7704],{"class":361},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[162,7706,7707,7709,7711,7713,7715,7717,7719,7721,7723,7725,7727,7729,7731,7733,7735,7737],{"class":164,"line":3022},[162,7708,6517],{"class":172},[162,7710,1003],{"class":168},[162,7712,3319],{"class":172},[162,7714,6524],{"class":168},[162,7716,173],{"class":172},[162,7718,312],{"class":207},[162,7720,6531],{"class":168},[162,7722,4187],{"class":172},[162,7724,3711],{"class":207},[162,7726,353],{"class":172},[162,7728,3732],{"class":168},[162,7730,353],{"class":172},[162,7732,208],{"class":207},[162,7734,6531],{"class":168},[162,7736,5410],{"class":172},[162,7738,434],{"class":168},[162,7740,7741],{"class":164,"line":3027},[162,7742,5627],{"class":168},[162,7744,7745],{"class":164,"line":3046},[162,7746,7747],{"class":361},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[162,7749,7750,7753,7756,7758,7761,7763,7765],{"class":164,"line":3052},[162,7751,7752],{"class":172},"            if",[162,7754,7755],{"class":168},"(arr[j]",[162,7757,3000],{"class":172},[162,7759,7760],{"class":168},"arr[j",[162,7762,3771],{"class":172},[162,7764,208],{"class":207},[162,7766,315],{"class":168},[162,7768,7769],{"class":164,"line":3057},[162,7770,7771],{"class":168},"            {\n",[162,7773,7774,7777,7779,7781],{"class":164,"line":3072},[162,7775,7776],{"class":172},"                int",[162,7778,7367],{"class":168},[162,7780,173],{"class":172},[162,7782,7783],{"class":168},"arr[j];\n",[162,7785,7786,7789,7791,7793,7795,7797],{"class":164,"line":3077},[162,7787,7788],{"class":168},"                arr[j]",[162,7790,173],{"class":172},[162,7792,7760],{"class":168},[162,7794,3771],{"class":172},[162,7796,208],{"class":207},[162,7798,7799],{"class":168},"];\n",[162,7801,7802,7805,7807,7809,7811,7813],{"class":164,"line":3100},[162,7803,7804],{"class":168},"                arr[j",[162,7806,3771],{"class":172},[162,7808,208],{"class":207},[162,7810,3120],{"class":168},[162,7812,173],{"class":172},[162,7814,7392],{"class":168},[162,7816,7817],{"class":164,"line":3140},[162,7818,7819],{"class":168},"            }\n",[162,7821,7822],{"class":164,"line":4878},[162,7823,5646],{"class":168},[162,7825,7826],{"class":164,"line":4883},[162,7827,5305],{"class":168},[162,7829,7830,7832,7834,7837,7839],{"class":164,"line":4897},[162,7831,4690],{"class":168},[162,7833,4316],{"class":172},[162,7835,7836],{"class":179},"\"排序后：\"",[162,7838,4316],{"class":172},[162,7840,4338],{"class":168},[162,7842,7843,7845,7847,7849,7851,7853,7855,7857,7859,7861,7863,7865],{"class":164,"line":4902},[162,7844,6315],{"class":172},[162,7846,1003],{"class":168},[162,7848,3319],{"class":172},[162,7850,6147],{"class":168},[162,7852,173],{"class":172},[162,7854,312],{"class":207},[162,7856,6154],{"class":168},[162,7858,4187],{"class":172},[162,7860,3711],{"class":207},[162,7862,6154],{"class":168},[162,7864,5410],{"class":172},[162,7866,434],{"class":168},[162,7868,7869],{"class":164,"line":5694},[162,7870,5148],{"class":168},[162,7872,7873,7875,7877,7879,7881,7883],{"class":164,"line":5708},[162,7874,6565],{"class":168},[162,7876,4316],{"class":172},[162,7878,7466],{"class":168},[162,7880,4316],{"class":172},[162,7882,7471],{"class":179},[162,7884,4433],{"class":168},[162,7886,7887],{"class":164,"line":5716},[162,7888,5305],{"class":168},[162,7890,7891,7893,7895],{"class":164,"line":5721},[162,7892,7203],{"class":172},[162,7894,2717],{"class":207},[162,7896,4433],{"class":168},[162,7898,7899],{"class":164,"line":5727},[162,7900,1498],{"class":168},[3284,7902,7904],{"id":7903},"_172二维数组","1.7.2二维数组",[1452,7906,7907],{},[1455,7908,7909],{},"二维数组的四种定义方式",[26,7911,7912,7921],{},[29,7913,7914],{},[32,7915,7916,7919],{},[35,7917,7918],{},"序号",[35,7920,6894],{},[51,7922,7923,7933,7942,7951,7960],{},[32,7924,7925,7927],{},[56,7926,208],{},[56,7928,7929,7930,3367],{},"数据类型 数组名[行数]",[162,7931,7932],{},"列数",[32,7934,7935,7937],{},[56,7936,213],{},[56,7938,7929,7939,7941],{},[162,7940,7932],{},"={ {数据1,数据2}，{数据3，数据4}... }",[32,7943,7944,7946],{},[56,7945,218],{},[56,7947,7929,7948,7950],{},[162,7949,7932],{},"={数据1,数据2,数据3...}",[32,7952,7953,7955],{},[56,7954,223],{},[56,7956,7957,7958,7950],{},"数据类型 数组名[]",[162,7959,7932],{},[32,7961,7962,7965],{},[56,7963,7964],{},"注意：不能只省略列数",[56,7966],{},[1452,7968,7969],{"start":197},[1455,7970,7971],{},"二维数组数组名",[4279,7973,7974,7977],{},[1455,7975,7976],{},"1.查看二维数组所占内存空间",[1455,7978,7979],{},"2.获取二维数组首地址",[19,7981,7982],{},"已知二维数组，求二维数组的行数与列数",[153,7984,7986],{"className":3305,"code":7985,"language":3307,"meta":158,"style":158},"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",[71,7987,7988,7996,8000,8018,8022,8039,8055,8060,8085,8118],{"__ignoreMap":158},[162,7989,7990,7992,7994],{"class":164,"line":165},[162,7991,3319],{"class":172},[162,7993,5092],{"class":5082},[162,7995,1526],{"class":168},[162,7997,7998],{"class":164,"line":197},[162,7999,4685],{"class":168},[162,8001,8002,8004,8006,8008,8011,8013,8015],{"class":164,"line":228},[162,8003,5103],{"class":172},[162,8005,7075],{"class":168},[162,8007,213],{"class":207},[162,8009,8010],{"class":168},"][",[162,8012,218],{"class":207},[162,8014,3120],{"class":168},[162,8016,8017],{"class":172},"=\n",[162,8019,8020],{"class":164,"line":252},[162,8021,5148],{"class":168},[162,8023,8024,8027,8029,8031,8033,8035,8037],{"class":164,"line":328},[162,8025,8026],{"class":168},"        {",[162,8028,208],{"class":207},[162,8030,3670],{"class":168},[162,8032,213],{"class":207},[162,8034,3670],{"class":168},[162,8036,218],{"class":207},[162,8038,2061],{"class":168},[162,8040,8041,8043,8045,8047,8049,8051,8053],{"class":164,"line":466},[162,8042,8026],{"class":168},[162,8044,223],{"class":207},[162,8046,3670],{"class":168},[162,8048,637],{"class":207},[162,8050,3670],{"class":168},[162,8052,1314],{"class":207},[162,8054,1498],{"class":168},[162,8056,8057],{"class":164,"line":471},[162,8058,8059],{"class":168},"    };\n",[162,8061,8062,8064,8066,8069,8071,8073,8075,8077,8079,8081,8083],{"class":164,"line":687},[162,8063,4690],{"class":168},[162,8065,4316],{"class":172},[162,8067,8068],{"class":179},"\"二维数组的行数\"",[162,8070,4512],{"class":172},[162,8072,7318],{"class":168},[162,8074,7321],{"class":172},[162,8076,6964],{"class":168},[162,8078,312],{"class":207},[162,8080,7328],{"class":168},[162,8082,4316],{"class":172},[162,8084,4338],{"class":168},[162,8086,8087,8089,8091,8094,8096,8098,8100,8102,8104,8106,8108,8110,8112,8114,8116],{"class":164,"line":692},[162,8088,4690],{"class":168},[162,8090,4316],{"class":172},[162,8092,8093],{"class":179},"\"二维数组的列数\"",[162,8095,4512],{"class":172},[162,8097,6964],{"class":168},[162,8099,312],{"class":207},[162,8101,7328],{"class":168},[162,8103,7321],{"class":172},[162,8105,6964],{"class":168},[162,8107,312],{"class":207},[162,8109,8010],{"class":168},[162,8111,312],{"class":207},[162,8113,7328],{"class":168},[162,8115,4316],{"class":172},[162,8117,4338],{"class":168},[162,8119,8120],{"class":164,"line":698},[162,8121,1498],{"class":168},[19,8123,8124],{},"查看二维数组首地址",[153,8126,8128],{"className":3305,"code":8127,"language":3307,"meta":158,"style":158},"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",[71,8129,8130,8147,8173,8198],{"__ignoreMap":158},[162,8131,8132,8134,8136,8139,8141,8143,8145],{"class":164,"line":165},[162,8133,4509],{"class":168},[162,8135,4316],{"class":172},[162,8137,8138],{"class":179},"\"二维数组首地址：\"",[162,8140,4316],{"class":172},[162,8142,6993],{"class":168},[162,8144,4316],{"class":172},[162,8146,4338],{"class":168},[162,8148,8149,8151,8153,8156,8158,8160,8162,8165,8167,8169,8171],{"class":164,"line":197},[162,8150,4509],{"class":168},[162,8152,4316],{"class":172},[162,8154,8155],{"class":179},"\"二维数组第一行的首地址：\"",[162,8157,4316],{"class":172},[162,8159,604],{"class":168},[162,8161,3319],{"class":172},[162,8163,8164],{"class":168},")arr[",[162,8166,312],{"class":207},[162,8168,3120],{"class":168},[162,8170,4316],{"class":172},[162,8172,4338],{"class":168},[162,8174,8175,8177,8179,8182,8184,8186,8188,8190,8192,8194,8196],{"class":164,"line":228},[162,8176,4509],{"class":168},[162,8178,4316],{"class":172},[162,8180,8181],{"class":179},"\"二维数组第二行的首地址：\"",[162,8183,4316],{"class":172},[162,8185,604],{"class":168},[162,8187,3319],{"class":172},[162,8189,8164],{"class":168},[162,8191,208],{"class":207},[162,8193,3120],{"class":168},[162,8195,4316],{"class":172},[162,8197,4338],{"class":168},[162,8199,8200,8202,8204,8207,8209,8211,8213,8215,8217,8219,8221,8223,8225,8227,8229,8231],{"class":164,"line":252},[162,8201,4509],{"class":168},[162,8203,4316],{"class":172},[162,8205,8206],{"class":179},"\"二维数组第一个元素的首地址:\"",[162,8208,4316],{"class":172},[162,8210,604],{"class":168},[162,8212,3319],{"class":172},[162,8214,3720],{"class":168},[162,8216,1667],{"class":172},[162,8218,7019],{"class":168},[162,8220,312],{"class":207},[162,8222,8010],{"class":168},[162,8224,312],{"class":207},[162,8226,3120],{"class":168},[162,8228,4316],{"class":172},[162,8230,4381],{"class":168},[162,8232,8233],{"class":361},"\u002F\u002F对于数，要加取址符\n",[3219,8235,8236],{},"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":158,"searchDepth":197,"depth":197,"links":8238},[8239,8240,8241,8249,8250,8256,8261],{"id":3259,"depth":197,"text":3260},{"id":3266,"depth":197,"text":3267},{"id":3281,"depth":197,"text":3282,"children":8242},[8243,8244,8245,8246,8247,8248],{"id":3286,"depth":228,"text":3287},{"id":3331,"depth":228,"text":3332},{"id":3394,"depth":228,"text":3395},{"id":4297,"depth":228,"text":4298},{"id":4387,"depth":228,"text":4388},{"id":4483,"depth":228,"text":4484},{"id":4525,"depth":197,"text":4526},{"id":4593,"depth":197,"text":4594,"children":8251},[8252,8253,8254,8255],{"id":4597,"depth":228,"text":4598},{"id":4619,"depth":228,"text":4620},{"id":4628,"depth":228,"text":4629},{"id":4637,"depth":228,"text":4638},{"id":4646,"depth":197,"text":4647,"children":8257},[8258,8259,8260],{"id":4650,"depth":228,"text":4651},{"id":5323,"depth":228,"text":5324},{"id":6735,"depth":228,"text":6736},{"id":6875,"depth":197,"text":6876,"children":8262},[8263,8264],{"id":6879,"depth":228,"text":6880},{"id":7903,"depth":228,"text":7904},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":3251,"description":158},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":8271,"title":8272,"body":8273,"description":158,"extension":3242,"meta":9371,"navigation":300,"path":9372,"seo":9373,"stem":9374,"__hash__":9375},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":8274,"toc":9363},[8275,8278,8282,8290,8298,8301,8366,8370,8373,8449,8453,8456,8459,8462,8675,8679,8684,8748,8753,8820,8825,8916,8919,9024,9028,9031,9037,9180,9184,9187,9201,9204,9249,9252,9360],[10,8276,8272],{"id":8277},"_2函数",[14,8279,8281],{"id":8280},"_21函数概述","2.1函数概述",[1452,8283,8284,8287],{},[1455,8285,8286],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[1455,8288,8289],{},"语法：",[153,8291,8296],{"className":8292,"code":8294,"language":8295,"meta":158},[8293],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[71,8297,8294],{"__ignoreMap":158},[19,8299,8300],{},"小案例",[153,8302,8304],{"className":3305,"code":8303,"language":3307,"meta":158,"style":158},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[71,8305,8306,8311,8334,8338,8355,8362],{"__ignoreMap":158},[162,8307,8308],{"class":164,"line":165},[162,8309,8310],{"class":361},"\u002F\u002Fnum1,num2形参\n",[162,8312,8313,8315,8318,8320,8322,8325,8327,8329,8332],{"class":164,"line":197},[162,8314,3319],{"class":172},[162,8316,8317],{"class":5082}," add",[162,8319,604],{"class":168},[162,8321,3319],{"class":172},[162,8323,8324],{"class":671}," num1",[162,8326,3670],{"class":168},[162,8328,3319],{"class":172},[162,8330,8331],{"class":671}," num2",[162,8333,434],{"class":168},[162,8335,8336],{"class":164,"line":228},[162,8337,4685],{"class":168},[162,8339,8340,8342,8345,8347,8350,8352],{"class":164,"line":252},[162,8341,5103],{"class":172},[162,8343,8344],{"class":168}," sum",[162,8346,173],{"class":172},[162,8348,8349],{"class":168},"num1",[162,8351,3771],{"class":172},[162,8353,8354],{"class":168},"num2;\n",[162,8356,8357,8359],{"class":164,"line":328},[162,8358,7203],{"class":172},[162,8360,8361],{"class":168}," sum;\n",[162,8363,8364],{"class":164,"line":466},[162,8365,1498],{"class":168},[14,8367,8369],{"id":8368},"_22函数调用","2.2函数调用",[19,8371,8372],{},"调用刚刚写的求和函数",[153,8374,8376],{"className":3305,"code":8375,"language":3307,"meta":158,"style":158},"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",[71,8377,8378,8386,8390,8395,8407,8419,8428,8433,8445],{"__ignoreMap":158},[162,8379,8380,8382,8384],{"class":164,"line":165},[162,8381,3319],{"class":172},[162,8383,5092],{"class":5082},[162,8385,1526],{"class":168},[162,8387,8388],{"class":164,"line":197},[162,8389,4685],{"class":168},[162,8391,8392],{"class":164,"line":228},[162,8393,8394],{"class":361},"    \u002F\u002Fa,b实参\n",[162,8396,8397,8399,8401,8403,8405],{"class":164,"line":252},[162,8398,5103],{"class":172},[162,8400,4538],{"class":168},[162,8402,173],{"class":172},[162,8404,312],{"class":207},[162,8406,4433],{"class":168},[162,8408,8409,8411,8413,8415,8417],{"class":164,"line":328},[162,8410,5103],{"class":172},[162,8412,5950],{"class":168},[162,8414,173],{"class":172},[162,8416,312],{"class":207},[162,8418,4433],{"class":168},[162,8420,8421,8423,8425],{"class":164,"line":466},[162,8422,5130],{"class":168},[162,8424,4569],{"class":172},[162,8426,8427],{"class":168},"a,b;\n",[162,8429,8430],{"class":164,"line":471},[162,8431,8432],{"class":361},"    \u002F\u002F调用函数时，实参值传给了形参\n",[162,8434,8435,8437,8439,8442],{"class":164,"line":687},[162,8436,4690],{"class":168},[162,8438,4316],{"class":172},[162,8440,8441],{"class":5082},"add",[162,8443,8444],{"class":168},"(a,b);\n",[162,8446,8447],{"class":164,"line":692},[162,8448,1498],{"class":168},[14,8450,8452],{"id":8451},"_23值传递","2.3值传递",[19,8454,8455],{},"值传递就是函数调用时实参将数值传给形参",[19,8457,8458],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,8460,8461],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[153,8463,8465],{"className":3305,"code":8464,"language":3307,"meta":158,"style":158},"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",[71,8466,8467,8489,8493,8506,8523,8541,8552,8561,8570,8583,8599,8615,8624,8628,8636,8640,8652,8664,8671],{"__ignoreMap":158},[162,8468,8469,8472,8475,8477,8479,8481,8483,8485,8487],{"class":164,"line":165},[162,8470,8471],{"class":172},"void",[162,8473,8474],{"class":5082}," swap",[162,8476,604],{"class":168},[162,8478,3319],{"class":172},[162,8480,8324],{"class":671},[162,8482,3670],{"class":168},[162,8484,3319],{"class":172},[162,8486,8331],{"class":671},[162,8488,434],{"class":168},[162,8490,8491],{"class":164,"line":197},[162,8492,4685],{"class":168},[162,8494,8495,8497,8499,8502,8504],{"class":164,"line":228},[162,8496,4690],{"class":168},[162,8498,4316],{"class":172},[162,8500,8501],{"class":179},"\"交换前：\"",[162,8503,4316],{"class":172},[162,8505,4338],{"class":168},[162,8507,8508,8510,8512,8515,8517,8519,8521],{"class":164,"line":252},[162,8509,4690],{"class":168},[162,8511,4316],{"class":172},[162,8513,8514],{"class":179},"\"num1=\"",[162,8516,4316],{"class":172},[162,8518,8349],{"class":168},[162,8520,4316],{"class":172},[162,8522,4338],{"class":168},[162,8524,8525,8527,8529,8532,8534,8537,8539],{"class":164,"line":328},[162,8526,4690],{"class":168},[162,8528,4316],{"class":172},[162,8530,8531],{"class":179},"\"num2=\"",[162,8533,4316],{"class":172},[162,8535,8536],{"class":168},"num2",[162,8538,4316],{"class":172},[162,8540,4338],{"class":168},[162,8542,8543,8545,8547,8549],{"class":164,"line":466},[162,8544,5103],{"class":172},[162,8546,7367],{"class":168},[162,8548,173],{"class":172},[162,8550,8551],{"class":168},"num1;\n",[162,8553,8554,8557,8559],{"class":164,"line":471},[162,8555,8556],{"class":168},"    num1",[162,8558,173],{"class":172},[162,8560,8354],{"class":168},[162,8562,8563,8566,8568],{"class":164,"line":687},[162,8564,8565],{"class":168},"    num2",[162,8567,173],{"class":172},[162,8569,7392],{"class":168},[162,8571,8572,8574,8576,8579,8581],{"class":164,"line":692},[162,8573,4690],{"class":168},[162,8575,4316],{"class":172},[162,8577,8578],{"class":179},"\"交换后：\"",[162,8580,4316],{"class":172},[162,8582,4338],{"class":168},[162,8584,8585,8587,8589,8591,8593,8595,8597],{"class":164,"line":698},[162,8586,4690],{"class":168},[162,8588,4316],{"class":172},[162,8590,8514],{"class":179},[162,8592,4316],{"class":172},[162,8594,8349],{"class":168},[162,8596,4316],{"class":172},[162,8598,4338],{"class":168},[162,8600,8601,8603,8605,8607,8609,8611,8613],{"class":164,"line":2955},[162,8602,4690],{"class":168},[162,8604,4316],{"class":172},[162,8606,8531],{"class":179},[162,8608,4316],{"class":172},[162,8610,8536],{"class":168},[162,8612,4316],{"class":172},[162,8614,4338],{"class":168},[162,8616,8617,8619,8621],{"class":164,"line":2960},[162,8618,7203],{"class":172},[162,8620,3367],{"class":168},[162,8622,8623],{"class":361},"\u002F\u002F或者不写\n",[162,8625,8626],{"class":164,"line":2971},[162,8627,1498],{"class":168},[162,8629,8630,8632,8634],{"class":164,"line":2984},[162,8631,3319],{"class":172},[162,8633,5092],{"class":5082},[162,8635,1526],{"class":168},[162,8637,8638],{"class":164,"line":2989},[162,8639,4685],{"class":168},[162,8641,8642,8644,8646,8648,8650],{"class":164,"line":3011},[162,8643,5103],{"class":172},[162,8645,4538],{"class":168},[162,8647,173],{"class":172},[162,8649,1006],{"class":207},[162,8651,4433],{"class":168},[162,8653,8654,8656,8658,8660,8662],{"class":164,"line":3022},[162,8655,5103],{"class":172},[162,8657,5950],{"class":168},[162,8659,173],{"class":172},[162,8661,1011],{"class":207},[162,8663,4433],{"class":168},[162,8665,8666,8669],{"class":164,"line":3027},[162,8667,8668],{"class":5082},"    swap",[162,8670,8444],{"class":168},[162,8672,8673],{"class":164,"line":3046},[162,8674,1498],{"class":168},[14,8676,8678],{"id":8677},"_24函数的常见形式","2.4函数的常见形式",[1452,8680,8681],{},[1455,8682,8683],{},"无参无返",[153,8685,8687],{"className":3305,"code":8686,"language":3307,"meta":158,"style":158},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[71,8688,8689,8698,8702,8715,8719,8727,8731,8736,8744],{"__ignoreMap":158},[162,8690,8691,8693,8696],{"class":164,"line":165},[162,8692,8471],{"class":172},[162,8694,8695],{"class":5082}," test01",[162,8697,1526],{"class":168},[162,8699,8700],{"class":164,"line":197},[162,8701,4685],{"class":168},[162,8703,8704,8706,8708,8711,8713],{"class":164,"line":228},[162,8705,4690],{"class":168},[162,8707,4316],{"class":172},[162,8709,8710],{"class":179},"\"你好\"",[162,8712,4316],{"class":172},[162,8714,4338],{"class":168},[162,8716,8717],{"class":164,"line":252},[162,8718,1498],{"class":168},[162,8720,8721,8723,8725],{"class":164,"line":328},[162,8722,3319],{"class":172},[162,8724,5092],{"class":5082},[162,8726,1526],{"class":168},[162,8728,8729],{"class":164,"line":466},[162,8730,4685],{"class":168},[162,8732,8733],{"class":164,"line":471},[162,8734,8735],{"class":361},"    \u002F\u002F函数调用\n",[162,8737,8738,8741],{"class":164,"line":687},[162,8739,8740],{"class":5082},"    test01",[162,8742,8743],{"class":168},"();\n",[162,8745,8746],{"class":164,"line":692},[162,8747,1498],{"class":168},[1452,8749,8750],{"start":197},[1455,8751,8752],{},"有参无返",[153,8754,8756],{"className":3305,"code":8755,"language":3307,"meta":158,"style":158},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[71,8757,8758,8773,8777,8789,8793,8801,8805,8816],{"__ignoreMap":158},[162,8759,8760,8762,8765,8767,8769,8771],{"class":164,"line":165},[162,8761,8471],{"class":172},[162,8763,8764],{"class":5082}," test02",[162,8766,604],{"class":168},[162,8768,3319],{"class":172},[162,8770,4538],{"class":671},[162,8772,434],{"class":168},[162,8774,8775],{"class":164,"line":197},[162,8776,4685],{"class":168},[162,8778,8779,8781,8783,8785,8787],{"class":164,"line":228},[162,8780,4690],{"class":168},[162,8782,4316],{"class":172},[162,8784,8710],{"class":179},[162,8786,4316],{"class":172},[162,8788,4338],{"class":168},[162,8790,8791],{"class":164,"line":252},[162,8792,1498],{"class":168},[162,8794,8795,8797,8799],{"class":164,"line":328},[162,8796,3319],{"class":172},[162,8798,5092],{"class":5082},[162,8800,1526],{"class":168},[162,8802,8803],{"class":164,"line":466},[162,8804,4685],{"class":168},[162,8806,8807,8810,8812,8814],{"class":164,"line":471},[162,8808,8809],{"class":5082},"    test02",[162,8811,604],{"class":168},[162,8813,3608],{"class":207},[162,8815,5836],{"class":168},[162,8817,8818],{"class":164,"line":687},[162,8819,1498],{"class":168},[1452,8821,8822],{"start":228},[1455,8823,8824],{},"无参有返",[153,8826,8828],{"className":3305,"code":8827,"language":3307,"meta":158,"style":158},"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",[71,8829,8830,8839,8843,8855,8864,8868,8876,8880,8893,8912],{"__ignoreMap":158},[162,8831,8832,8834,8837],{"class":164,"line":165},[162,8833,3319],{"class":172},[162,8835,8836],{"class":5082}," test03",[162,8838,1526],{"class":168},[162,8840,8841],{"class":164,"line":197},[162,8842,4685],{"class":168},[162,8844,8845,8847,8849,8851,8853],{"class":164,"line":228},[162,8846,4690],{"class":168},[162,8848,4316],{"class":172},[162,8850,8710],{"class":179},[162,8852,4316],{"class":172},[162,8854,4338],{"class":168},[162,8856,8857,8859,8862],{"class":164,"line":252},[162,8858,7203],{"class":172},[162,8860,8861],{"class":207}," 100",[162,8863,4433],{"class":168},[162,8865,8866],{"class":164,"line":328},[162,8867,1498],{"class":168},[162,8869,8870,8872,8874],{"class":164,"line":466},[162,8871,3319],{"class":172},[162,8873,5092],{"class":5082},[162,8875,1526],{"class":168},[162,8877,8878],{"class":164,"line":471},[162,8879,4685],{"class":168},[162,8881,8882,8884,8886,8888,8891],{"class":164,"line":687},[162,8883,5103],{"class":172},[162,8885,8324],{"class":168},[162,8887,173],{"class":172},[162,8889,8890],{"class":5082},"test03",[162,8892,8743],{"class":168},[162,8894,8895,8897,8899,8901,8903,8905,8907,8909],{"class":164,"line":692},[162,8896,4690],{"class":168},[162,8898,4316],{"class":172},[162,8900,8514],{"class":179},[162,8902,4316],{"class":172},[162,8904,8349],{"class":168},[162,8906,4316],{"class":172},[162,8908,4381],{"class":168},[162,8910,8911],{"class":361}," \u002F\u002F100\n",[162,8913,8914],{"class":164,"line":698},[162,8915,1498],{"class":168},[19,8917,8918],{},"4.有参有返",[153,8920,8922],{"className":3305,"code":8921,"language":3307,"meta":158,"style":158},"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",[71,8923,8924,8939,8943,8956,8962,8966,8975,8979,8991,9005,9020],{"__ignoreMap":158},[162,8925,8926,8928,8931,8933,8935,8937],{"class":164,"line":165},[162,8927,3319],{"class":172},[162,8929,8930],{"class":5082}," test04",[162,8932,604],{"class":168},[162,8934,3319],{"class":172},[162,8936,4538],{"class":671},[162,8938,434],{"class":168},[162,8940,8941],{"class":164,"line":197},[162,8942,4685],{"class":168},[162,8944,8945,8947,8949,8952,8954],{"class":164,"line":228},[162,8946,4690],{"class":168},[162,8948,4316],{"class":172},[162,8950,8951],{"class":179},"\"hello\"",[162,8953,4316],{"class":172},[162,8955,4338],{"class":168},[162,8957,8958,8960],{"class":164,"line":252},[162,8959,7203],{"class":172},[162,8961,4572],{"class":168},[162,8963,8964],{"class":164,"line":328},[162,8965,1498],{"class":168},[162,8967,8968,8970,8973],{"class":164,"line":466},[162,8969,3319],{"class":172},[162,8971,8972],{"class":5082}," mian",[162,8974,1526],{"class":168},[162,8976,8977],{"class":164,"line":471},[162,8978,4685],{"class":168},[162,8980,8981,8983,8985,8987,8989],{"class":164,"line":687},[162,8982,5103],{"class":172},[162,8984,5950],{"class":168},[162,8986,173],{"class":172},[162,8988,208],{"class":207},[162,8990,4433],{"class":168},[162,8992,8993,8995,8997,8999,9002],{"class":164,"line":692},[162,8994,5103],{"class":172},[162,8996,5966],{"class":168},[162,8998,173],{"class":172},[162,9000,9001],{"class":5082},"test04",[162,9003,9004],{"class":168},"(b);\n",[162,9006,9007,9009,9011,9013,9015,9017],{"class":164,"line":698},[162,9008,4690],{"class":168},[162,9010,4316],{"class":172},[162,9012,3586],{"class":168},[162,9014,4316],{"class":172},[162,9016,4381],{"class":168},[162,9018,9019],{"class":361}," \u002F\u002F1\n",[162,9021,9022],{"class":164,"line":2955},[162,9023,1498],{"class":168},[14,9025,9027],{"id":9026},"_25函数的声明","2.5函数的声明",[19,9029,9030],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,9032,9033,9034],{},"函数的",[3453,9035,9036],{},"声明可以多次，但是函数的定义只能有一次",[153,9038,9040],{"className":3305,"code":9039,"language":3307,"meta":158,"style":158},"\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",[71,9041,9042,9047,9052,9077,9086,9090,9102,9114,9129,9133,9153,9157,9176],{"__ignoreMap":158},[162,9043,9044],{"class":164,"line":165},[162,9045,9046],{"class":361},"\u002F\u002F函数声明\n",[162,9048,9049],{"class":164,"line":197},[162,9050,9051],{"class":361},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[162,9053,9054,9056,9059,9061,9063,9065,9067,9069,9071,9074],{"class":164,"line":228},[162,9055,3319],{"class":172},[162,9057,9058],{"class":5082}," max",[162,9060,604],{"class":168},[162,9062,3319],{"class":172},[162,9064,4538],{"class":671},[162,9066,3670],{"class":168},[162,9068,3319],{"class":172},[162,9070,5950],{"class":671},[162,9072,9073],{"class":168},");",[162,9075,9076],{"class":361},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[162,9078,9079,9081,9083],{"class":164,"line":252},[162,9080,3319],{"class":172},[162,9082,5092],{"class":5082},[162,9084,9085],{"class":168},"() \n",[162,9087,9088],{"class":164,"line":328},[162,9089,4685],{"class":168},[162,9091,9092,9094,9096,9098,9100],{"class":164,"line":466},[162,9093,5103],{"class":172},[162,9095,4538],{"class":168},[162,9097,173],{"class":172},[162,9099,1006],{"class":207},[162,9101,4433],{"class":168},[162,9103,9104,9106,9108,9110,9112],{"class":164,"line":471},[162,9105,5103],{"class":172},[162,9107,5950],{"class":168},[162,9109,173],{"class":172},[162,9111,1011],{"class":207},[162,9113,4433],{"class":168},[162,9115,9116,9118,9120,9122,9125,9127],{"class":164,"line":687},[162,9117,4690],{"class":168},[162,9119,4316],{"class":172},[162,9121,2397],{"class":5082},[162,9123,9124],{"class":168},"(a,b)",[162,9126,4316],{"class":172},[162,9128,4338],{"class":168},[162,9130,9131],{"class":164,"line":692},[162,9132,1498],{"class":168},[162,9134,9135,9137,9139,9141,9143,9145,9147,9149,9151],{"class":164,"line":698},[162,9136,3319],{"class":172},[162,9138,9058],{"class":5082},[162,9140,604],{"class":168},[162,9142,3319],{"class":172},[162,9144,4538],{"class":671},[162,9146,3670],{"class":168},[162,9148,3319],{"class":172},[162,9150,5950],{"class":671},[162,9152,434],{"class":168},[162,9154,9155],{"class":164,"line":2955},[162,9156,4685],{"class":168},[162,9158,9159,9161,9163,9165,9167,9169,9171,9173],{"class":164,"line":2960},[162,9160,7203],{"class":172},[162,9162,4538],{"class":168},[162,9164,3000],{"class":172},[162,9166,3561],{"class":168},[162,9168,4259],{"class":172},[162,9170,3538],{"class":168},[162,9172,1332],{"class":172},[162,9174,9175],{"class":168},"b;\n",[162,9177,9178],{"class":164,"line":2971},[162,9179,1498],{"class":168},[14,9181,9183],{"id":9182},"_26函数的分文件编写","2.6函数的分文件编写",[19,9185,9186],{},"4个步骤：",[4279,9188,9189,9192,9195,9198],{},[1455,9190,9191],{},"1.创建后缀名为.h的头文件",[1455,9193,9194],{},"2.创建后缀名为.cpp的源文件",[1455,9196,9197],{},"3.在头文件中写函数的定义",[1455,9199,9200],{},"4.在源文件中写函数的定义\n示例：",[19,9202,9203],{},"头文件：swap.h",[153,9205,9207],{"className":3305,"code":9206,"language":3307,"meta":158,"style":158},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[71,9208,9209,9215,9225,9229],{"__ignoreMap":158},[162,9210,9211,9213],{"class":164,"line":165},[162,9212,5068],{"class":172},[162,9214,5071],{"class":179},[162,9216,9217,9219,9221,9223],{"class":164,"line":197},[162,9218,5076],{"class":172},[162,9220,5079],{"class":172},[162,9222,5083],{"class":5082},[162,9224,4433],{"class":168},[162,9226,9227],{"class":164,"line":228},[162,9228,9046],{"class":361},[162,9230,9231,9233,9235,9237,9239,9241,9243,9245,9247],{"class":164,"line":252},[162,9232,8471],{"class":172},[162,9234,8474],{"class":5082},[162,9236,604],{"class":168},[162,9238,3319],{"class":172},[162,9240,4538],{"class":671},[162,9242,3670],{"class":168},[162,9244,3319],{"class":172},[162,9246,5950],{"class":671},[162,9248,5836],{"class":168},[19,9250,9251],{},"源文件：swap.cpp",[153,9253,9255],{"className":3305,"code":9254,"language":3307,"meta":158,"style":158},"#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",[71,9256,9257,9264,9269,9289,9293,9304,9313,9322,9339,9356],{"__ignoreMap":158},[162,9258,9259,9261],{"class":164,"line":165},[162,9260,5068],{"class":172},[162,9262,9263],{"class":179}," \"swap.h\"\n",[162,9265,9266],{"class":164,"line":197},[162,9267,9268],{"class":361},"\u002F\u002F函数的定义\n",[162,9270,9271,9273,9275,9277,9279,9281,9283,9285,9287],{"class":164,"line":228},[162,9272,8471],{"class":172},[162,9274,8474],{"class":5082},[162,9276,604],{"class":168},[162,9278,3319],{"class":172},[162,9280,4538],{"class":671},[162,9282,3670],{"class":168},[162,9284,3319],{"class":172},[162,9286,5950],{"class":671},[162,9288,434],{"class":168},[162,9290,9291],{"class":164,"line":252},[162,9292,4685],{"class":168},[162,9294,9295,9297,9299,9301],{"class":164,"line":328},[162,9296,5103],{"class":172},[162,9298,7367],{"class":168},[162,9300,173],{"class":172},[162,9302,9303],{"class":168},"a;\n",[162,9305,9306,9309,9311],{"class":164,"line":466},[162,9307,9308],{"class":168},"    a",[162,9310,173],{"class":172},[162,9312,9175],{"class":168},[162,9314,9315,9318,9320],{"class":164,"line":471},[162,9316,9317],{"class":168},"    b",[162,9319,173],{"class":172},[162,9321,7392],{"class":168},[162,9323,9324,9326,9328,9331,9333,9335,9337],{"class":164,"line":687},[162,9325,4690],{"class":168},[162,9327,4316],{"class":172},[162,9329,9330],{"class":179},"\"a=\"",[162,9332,4316],{"class":172},[162,9334,3538],{"class":168},[162,9336,4316],{"class":172},[162,9338,4338],{"class":168},[162,9340,9341,9343,9345,9348,9350,9352,9354],{"class":164,"line":692},[162,9342,4690],{"class":168},[162,9344,4316],{"class":172},[162,9346,9347],{"class":179},"\"b=\"",[162,9349,4316],{"class":172},[162,9351,3561],{"class":168},[162,9353,4316],{"class":172},[162,9355,4338],{"class":168},[162,9357,9358],{"class":164,"line":698},[162,9359,1498],{"class":168},[3219,9361,9362],{},"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":158,"searchDepth":197,"depth":197,"links":9364},[9365,9366,9367,9368,9369,9370],{"id":8280,"depth":197,"text":8281},{"id":8368,"depth":197,"text":8369},{"id":8451,"depth":197,"text":8452},{"id":8677,"depth":197,"text":8678},{"id":9026,"depth":197,"text":9027},{"id":9182,"depth":197,"text":9183},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":8272,"description":158},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":9377,"title":9378,"body":9379,"description":9386,"extension":3242,"meta":10789,"navigation":300,"path":10790,"seo":10791,"stem":10792,"__hash__":10793},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":9380,"toc":10779},[9381,9384,9387,9391,9553,9557,9560,9563,9566,9569,9709,9713,9716,9719,9722,9787,9791,9796,9863,9866,9870,9873,9884,9889,9909,9912,9917,9936,9939,9943,9962,9965,9969,10204,10208,10211,10214,10217,10379,10382,10386,10389,10395,10776],[10,9382,9378],{"id":9383},"_3指针",[19,9385,9386],{},"通过指针保存一个地址，指针就是个地址",[14,9388,9390],{"id":9389},"_31定义指针","3.1定义指针",[153,9392,9394],{"className":3305,"code":9393,"language":3307,"meta":158,"style":158},"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",[71,9395,9396,9404,9408,9413,9425,9430,9438,9448,9466,9486,9490,9495,9500,9505,9519,9535,9549],{"__ignoreMap":158},[162,9397,9398,9400,9402],{"class":164,"line":165},[162,9399,3319],{"class":172},[162,9401,5092],{"class":5082},[162,9403,1526],{"class":168},[162,9405,9406],{"class":164,"line":197},[162,9407,4685],{"class":168},[162,9409,9410],{"class":164,"line":228},[162,9411,9412],{"class":361},"    \u002F\u002F1.定义指针\n",[162,9414,9415,9417,9419,9421,9423],{"class":164,"line":252},[162,9416,5103],{"class":172},[162,9418,4538],{"class":168},[162,9420,173],{"class":172},[162,9422,1006],{"class":207},[162,9424,4433],{"class":168},[162,9426,9427],{"class":164,"line":328},[162,9428,9429],{"class":361},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[162,9431,9432,9435],{"class":164,"line":466},[162,9433,9434],{"class":172},"    int*",[162,9436,9437],{"class":168},"p;\n",[162,9439,9440,9443,9446],{"class":164,"line":471},[162,9441,9442],{"class":168},"    p",[162,9444,9445],{"class":172},"=&",[162,9447,9303],{"class":168},[162,9449,9450,9452,9454,9457,9460,9462,9464],{"class":164,"line":687},[162,9451,4690],{"class":168},[162,9453,4316],{"class":172},[162,9455,9456],{"class":179},"\"a的地址为：\"",[162,9458,9459],{"class":172},"\u003C\u003C&",[162,9461,3538],{"class":168},[162,9463,4316],{"class":172},[162,9465,4338],{"class":168},[162,9467,9468,9470,9472,9475,9477,9479,9481,9483],{"class":164,"line":692},[162,9469,4690],{"class":168},[162,9471,4316],{"class":172},[162,9473,9474],{"class":179},"\"指针p为：\"",[162,9476,4316],{"class":172},[162,9478,19],{"class":168},[162,9480,4316],{"class":172},[162,9482,4381],{"class":168},[162,9484,9485],{"class":361},"\u002F\u002F指针p表示的就是a的地址\n",[162,9487,9488],{"class":164,"line":698},[162,9489,301],{"emptyLinePlaceholder":300},[162,9491,9492],{"class":164,"line":2955},[162,9493,9494],{"class":361},"    \u002F\u002F2.使用指针\n",[162,9496,9497],{"class":164,"line":2960},[162,9498,9499],{"class":361},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[162,9501,9502],{"class":164,"line":2971},[162,9503,9504],{"class":361},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[162,9506,9507,9510,9512,9514,9517],{"class":164,"line":2984},[162,9508,9509],{"class":172},"    *",[162,9511,19],{"class":168},[162,9513,173],{"class":172},[162,9515,9516],{"class":207},"1000",[162,9518,4433],{"class":168},[162,9520,9521,9523,9526,9528,9530,9532],{"class":164,"line":2989},[162,9522,4690],{"class":168},[162,9524,9525],{"class":172},"\u003C\u003C*",[162,9527,19],{"class":168},[162,9529,4316],{"class":172},[162,9531,4381],{"class":168},[162,9533,9534],{"class":361},"\u002F\u002F1000\n",[162,9536,9537,9539,9541,9543,9545,9547],{"class":164,"line":3011},[162,9538,4690],{"class":168},[162,9540,4316],{"class":172},[162,9542,3538],{"class":168},[162,9544,4316],{"class":172},[162,9546,4381],{"class":168},[162,9548,9534],{"class":361},[162,9550,9551],{"class":164,"line":3022},[162,9552,1498],{"class":168},[14,9554,9556],{"id":9555},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,9558,9559],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,9561,9562],{},"在32位操作系统下：占用4个字节空间",[19,9564,9565],{},"在64位操作系统下：占用8个字节空间",[19,9567,9568],{},"上方是不管啥数据类型的",[153,9570,9572],{"className":3305,"code":9571,"language":3307,"meta":158,"style":158},"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",[71,9573,9574,9582,9586,9591,9603,9608,9613,9618,9631,9653,9679,9705],{"__ignoreMap":158},[162,9575,9576,9578,9580],{"class":164,"line":165},[162,9577,3319],{"class":172},[162,9579,5092],{"class":5082},[162,9581,1526],{"class":168},[162,9583,9584],{"class":164,"line":197},[162,9585,4685],{"class":168},[162,9587,9588],{"class":164,"line":228},[162,9589,9590],{"class":361},"    \u002F\u002F指针所占内存空间\n",[162,9592,9593,9595,9597,9599,9601],{"class":164,"line":252},[162,9594,5103],{"class":172},[162,9596,4538],{"class":168},[162,9598,173],{"class":172},[162,9600,1006],{"class":207},[162,9602,4433],{"class":168},[162,9604,9605],{"class":164,"line":328},[162,9606,9607],{"class":361},"    \u002F\u002Fint *p;\n",[162,9609,9610],{"class":164,"line":466},[162,9611,9612],{"class":361},"    \u002F\u002Fp=&a;\n",[162,9614,9615],{"class":164,"line":471},[162,9616,9617],{"class":361},"    \u002F\u002F上述可以写为以下：\n",[162,9619,9620,9622,9625,9627,9629],{"class":164,"line":687},[162,9621,5103],{"class":172},[162,9623,9624],{"class":172}," *",[162,9626,19],{"class":168},[162,9628,9445],{"class":172},[162,9630,9303],{"class":168},[162,9632,9633,9636,9638,9641,9643,9646,9648,9650],{"class":164,"line":692},[162,9634,9635],{"class":168},"    cout ",[162,9637,4316],{"class":172},[162,9639,9640],{"class":179},"\"sizeof(int *)\"",[162,9642,4512],{"class":172},[162,9644,9645],{"class":168},"(p)",[162,9647,4316],{"class":172},[162,9649,4381],{"class":168},[162,9651,9652],{"class":361},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[162,9654,9655,9657,9659,9661,9663,9665,9667,9669,9671,9673,9676],{"class":164,"line":698},[162,9656,9635],{"class":168},[162,9658,4316],{"class":172},[162,9660,9640],{"class":179},[162,9662,4512],{"class":172},[162,9664,604],{"class":168},[162,9666,3319],{"class":172},[162,9668,9624],{"class":172},[162,9670,3720],{"class":168},[162,9672,4316],{"class":172},[162,9674,9675],{"class":168},"endl",[162,9677,9678],{"class":361},"  \u002F\u002F4字节(32位的话)\n",[162,9680,9681,9683,9685,9688,9690,9692,9694,9696,9698,9700,9702],{"class":164,"line":2955},[162,9682,9635],{"class":168},[162,9684,4316],{"class":172},[162,9686,9687],{"class":179},"\"sizeof(char *)\"",[162,9689,4512],{"class":172},[162,9691,604],{"class":168},[162,9693,3405],{"class":172},[162,9695,9624],{"class":172},[162,9697,3720],{"class":168},[162,9699,4316],{"class":172},[162,9701,4381],{"class":168},[162,9703,9704],{"class":361}," \u002F\u002F4字节(32位的话)\n",[162,9706,9707],{"class":164,"line":2960},[162,9708,1498],{"class":168},[14,9710,9712],{"id":9711},"_33空指针","3.3空指针",[19,9714,9715],{},"空指针：指针变量指向内存中编号为0的空间",[19,9717,9718],{},"用途：初始化指针变量",[19,9720,9721],{},"注意：空指针指向的内存是不可以访问的",[153,9723,9725],{"className":3305,"code":9724,"language":3307,"meta":158,"style":158},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[71,9726,9727,9735,9739,9744,9758,9763,9778,9783],{"__ignoreMap":158},[162,9728,9729,9731,9733],{"class":164,"line":165},[162,9730,3319],{"class":172},[162,9732,5092],{"class":5082},[162,9734,1526],{"class":168},[162,9736,9737],{"class":164,"line":197},[162,9738,4685],{"class":168},[162,9740,9741],{"class":164,"line":228},[162,9742,9743],{"class":361},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[162,9745,9746,9748,9750,9752,9754,9756],{"class":164,"line":252},[162,9747,5103],{"class":172},[162,9749,9624],{"class":172},[162,9751,19],{"class":168},[162,9753,173],{"class":172},[162,9755,5510],{"class":207},[162,9757,4433],{"class":168},[162,9759,9760],{"class":164,"line":328},[162,9761,9762],{"class":361},"    \u002F\u002F2.空指针不能进行访问\n",[162,9764,9765,9767,9769,9771,9773,9775],{"class":164,"line":466},[162,9766,9509],{"class":172},[162,9768,19],{"class":168},[162,9770,173],{"class":172},[162,9772,3608],{"class":207},[162,9774,3367],{"class":168},[162,9776,9777],{"class":361},"\u002F\u002F直接报错，压根不能访问\n",[162,9779,9780],{"class":164,"line":471},[162,9781,9782],{"class":361},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[162,9784,9785],{"class":164,"line":687},[162,9786,1498],{"class":168},[14,9788,9790],{"id":9789},"_34野指针","3.4野指针",[19,9792,9793],{},[3453,9794,9795],{},"指针变量指向非法的内存空间",[153,9797,9799],{"className":3305,"code":9798,"language":3307,"meta":158,"style":158},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[71,9800,9801,9809,9813,9842,9847,9859],{"__ignoreMap":158},[162,9802,9803,9805,9807],{"class":164,"line":165},[162,9804,3319],{"class":172},[162,9806,5092],{"class":5082},[162,9808,1526],{"class":168},[162,9810,9811],{"class":164,"line":197},[162,9812,4685],{"class":168},[162,9814,9815,9817,9819,9821,9823,9825,9827,9829,9831,9834,9837,9839],{"class":164,"line":228},[162,9816,5103],{"class":172},[162,9818,9624],{"class":172},[162,9820,19],{"class":168},[162,9822,173],{"class":172},[162,9824,604],{"class":168},[162,9826,3319],{"class":172},[162,9828,9624],{"class":172},[162,9830,3720],{"class":168},[162,9832,9833],{"class":172},"0x",[162,9835,9836],{"class":207},"1100",[162,9838,3367],{"class":168},[162,9840,9841],{"class":361}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[162,9843,9844],{"class":164,"line":252},[162,9845,9846],{"class":361},"    \u002F\u002F访问野指针报错\n",[162,9848,9849,9851,9853,9855,9857],{"class":164,"line":328},[162,9850,4690],{"class":168},[162,9852,9525],{"class":172},[162,9854,19],{"class":168},[162,9856,4316],{"class":172},[162,9858,4338],{"class":168},[162,9860,9861],{"class":164,"line":466},[162,9862,1498],{"class":168},[19,9864,9865],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,9867,9869],{"id":9868},"_35const修饰指针","3.5const修饰指针",[19,9871,9872],{},"三种情况：",[4279,9874,9875,9878,9881],{},[1455,9876,9877],{},"const修饰指针 常量指针",[1455,9879,9880],{},"const修饰常量 指针常量",[1455,9882,9883],{},"const即修饰指针，又修饰常量",[1452,9885,9886],{},[1455,9887,9888],{},"常量指针",[153,9890,9892],{"className":3305,"code":9891,"language":3307,"meta":158,"style":158},"const int *p=&a;\n",[71,9893,9894],{"__ignoreMap":158},[162,9895,9896,9899,9901,9903,9905,9907],{"class":164,"line":165},[162,9897,9898],{"class":172},"const",[162,9900,5500],{"class":172},[162,9902,9624],{"class":172},[162,9904,19],{"class":168},[162,9906,9445],{"class":172},[162,9908,9303],{"class":168},[19,9910,9911],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[1452,9913,9914],{"start":197},[1455,9915,9916],{},"指针常量",[153,9918,9920],{"className":3305,"code":9919,"language":3307,"meta":158,"style":158},"int *const p=&a;\n",[71,9921,9922],{"__ignoreMap":158},[162,9923,9924,9926,9929,9932,9934],{"class":164,"line":165},[162,9925,3319],{"class":172},[162,9927,9928],{"class":172}," *const",[162,9930,9931],{"class":168}," p",[162,9933,9445],{"class":172},[162,9935,9303],{"class":168},[19,9937,9938],{},"指针的指向不可以改，指针指向的值可以改",[1452,9940,9941],{"start":228},[1455,9942,9883],{},[153,9944,9946],{"className":3305,"code":9945,"language":3307,"meta":158,"style":158},"const int *const p=&a;\n",[71,9947,9948],{"__ignoreMap":158},[162,9949,9950,9952,9954,9956,9958,9960],{"class":164,"line":165},[162,9951,9898],{"class":172},[162,9953,5500],{"class":172},[162,9955,9928],{"class":172},[162,9957,9931],{"class":168},[162,9959,9445],{"class":172},[162,9961,9303],{"class":168},[19,9963,9964],{},"指针的指向和指针指向的值都不可以改变",[14,9966,9968],{"id":9967},"_36指针和数组","3.6指针和数组",[153,9970,9972],{"className":3305,"code":9971,"language":3307,"meta":158,"style":158},"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",[71,9973,9974,9982,9986,9991,10045,10066,10082,10098,10109,10126,10131,10145,10171,10175,10187,10196,10200],{"__ignoreMap":158},[162,9975,9976,9978,9980],{"class":164,"line":165},[162,9977,3319],{"class":172},[162,9979,5092],{"class":5082},[162,9981,1526],{"class":168},[162,9983,9984],{"class":164,"line":197},[162,9985,4685],{"class":168},[162,9987,9988],{"class":164,"line":228},[162,9989,9990],{"class":361},"    \u002F\u002F利用指针访问数组中的元素\n",[162,9992,9993,9995,9997,9999,10001,10003,10005,10007,10009,10011,10013,10015,10017,10019,10021,10023,10025,10027,10029,10031,10033,10035,10037,10039,10041,10043],{"class":164,"line":252},[162,9994,5103],{"class":172},[162,9996,7075],{"class":168},[162,9998,1006],{"class":207},[162,10000,3120],{"class":168},[162,10002,173],{"class":172},[162,10004,967],{"class":168},[162,10006,208],{"class":207},[162,10008,3670],{"class":168},[162,10010,213],{"class":207},[162,10012,3670],{"class":168},[162,10014,218],{"class":207},[162,10016,3670],{"class":168},[162,10018,223],{"class":207},[162,10020,3670],{"class":168},[162,10022,637],{"class":207},[162,10024,3670],{"class":168},[162,10026,1314],{"class":207},[162,10028,3670],{"class":168},[162,10030,3661],{"class":207},[162,10032,3670],{"class":168},[162,10034,3687],{"class":207},[162,10036,3670],{"class":168},[162,10038,3711],{"class":207},[162,10040,3670],{"class":168},[162,10042,1006],{"class":207},[162,10044,7108],{"class":168},[162,10046,10047,10049,10051,10054,10056,10058,10060,10062,10064],{"class":164,"line":328},[162,10048,4690],{"class":168},[162,10050,4316],{"class":172},[162,10052,10053],{"class":179},"\"数组的第一个元素为：\"",[162,10055,4316],{"class":172},[162,10057,7019],{"class":168},[162,10059,312],{"class":207},[162,10061,3120],{"class":168},[162,10063,4316],{"class":172},[162,10065,4338],{"class":168},[162,10067,10068,10070,10072,10074,10076,10079],{"class":164,"line":466},[162,10069,5103],{"class":172},[162,10071,9624],{"class":172},[162,10073,19],{"class":168},[162,10075,173],{"class":172},[162,10077,10078],{"class":168},"arr;",[162,10080,10081],{"class":361},"\u002F\u002F注意数才要加取地址符号&\n",[162,10083,10084,10086,10088,10090,10092,10094,10096],{"class":164,"line":471},[162,10085,4690],{"class":168},[162,10087,4316],{"class":172},[162,10089,10053],{"class":179},[162,10091,9525],{"class":172},[162,10093,19],{"class":168},[162,10095,4316],{"class":172},[162,10097,4338],{"class":168},[162,10099,10100,10102,10104,10106],{"class":164,"line":687},[162,10101,9442],{"class":168},[162,10103,5410],{"class":172},[162,10105,3367],{"class":168},[162,10107,10108],{"class":361}," \u002F\u002F让指针向后偏移4个字节\n",[162,10110,10111,10113,10115,10118,10120,10122,10124],{"class":164,"line":692},[162,10112,4690],{"class":168},[162,10114,4316],{"class":172},[162,10116,10117],{"class":179},"\"数组的第二个元素为：\"",[162,10119,9525],{"class":172},[162,10121,19],{"class":168},[162,10123,4316],{"class":172},[162,10125,4338],{"class":168},[162,10127,10128],{"class":164,"line":698},[162,10129,10130],{"class":361},"    \u002F\u002F利用指针遍历数组\n",[162,10132,10133,10135,10137,10140,10142],{"class":164,"line":2955},[162,10134,5103],{"class":172},[162,10136,9624],{"class":172},[162,10138,10139],{"class":168},"p2",[162,10141,173],{"class":172},[162,10143,10144],{"class":168},"arr;\n",[162,10146,10147,10149,10151,10153,10155,10157,10159,10161,10163,10165,10167,10169],{"class":164,"line":2960},[162,10148,6315],{"class":172},[162,10150,1003],{"class":168},[162,10152,3319],{"class":172},[162,10154,6147],{"class":168},[162,10156,173],{"class":172},[162,10158,312],{"class":207},[162,10160,6154],{"class":168},[162,10162,4187],{"class":172},[162,10164,1006],{"class":207},[162,10166,6154],{"class":168},[162,10168,5410],{"class":172},[162,10170,434],{"class":168},[162,10172,10173],{"class":164,"line":2971},[162,10174,5148],{"class":168},[162,10176,10177,10179,10181,10183,10185],{"class":164,"line":2984},[162,10178,6565],{"class":168},[162,10180,9525],{"class":172},[162,10182,10139],{"class":168},[162,10184,4316],{"class":172},[162,10186,4338],{"class":168},[162,10188,10189,10192,10194],{"class":164,"line":2989},[162,10190,10191],{"class":168},"        p2",[162,10193,5410],{"class":172},[162,10195,4433],{"class":168},[162,10197,10198],{"class":164,"line":3011},[162,10199,5305],{"class":168},[162,10201,10202],{"class":164,"line":3022},[162,10203,1498],{"class":168},[14,10205,10207],{"id":10206},"_37指针和函数","3.7指针和函数",[19,10209,10210],{},"利用指针做函数参数，可以修改实参的值",[19,10212,10213],{},"值传递：只改变形参，不改变实参",[19,10215,10216],{},"地址传递：",[153,10218,10220],{"className":3305,"code":10219,"language":3307,"meta":158,"style":158},"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",[71,10221,10222,10247,10251,10263,10274,10284,10288,10296,10300,10312,10324,10329,10345,10360,10375],{"__ignoreMap":158},[162,10223,10224,10226,10228,10230,10232,10234,10237,10239,10241,10243,10245],{"class":164,"line":165},[162,10225,8471],{"class":172},[162,10227,8474],{"class":5082},[162,10229,604],{"class":168},[162,10231,3319],{"class":172},[162,10233,9624],{"class":172},[162,10235,10236],{"class":671},"p1",[162,10238,3670],{"class":168},[162,10240,3319],{"class":172},[162,10242,9624],{"class":172},[162,10244,10139],{"class":671},[162,10246,434],{"class":168},[162,10248,10249],{"class":164,"line":197},[162,10250,4685],{"class":168},[162,10252,10253,10255,10257,10260],{"class":164,"line":228},[162,10254,5103],{"class":172},[162,10256,7367],{"class":168},[162,10258,10259],{"class":172},"=*",[162,10261,10262],{"class":168},"p1;\n",[162,10264,10265,10267,10269,10271],{"class":164,"line":252},[162,10266,9509],{"class":172},[162,10268,10236],{"class":168},[162,10270,10259],{"class":172},[162,10272,10273],{"class":168},"p2;\n",[162,10275,10276,10278,10280,10282],{"class":164,"line":328},[162,10277,9509],{"class":172},[162,10279,10139],{"class":168},[162,10281,173],{"class":172},[162,10283,7392],{"class":168},[162,10285,10286],{"class":164,"line":466},[162,10287,1498],{"class":168},[162,10289,10290,10292,10294],{"class":164,"line":471},[162,10291,3319],{"class":172},[162,10293,5092],{"class":5082},[162,10295,1526],{"class":168},[162,10297,10298],{"class":164,"line":687},[162,10299,4685],{"class":168},[162,10301,10302,10304,10306,10308,10310],{"class":164,"line":692},[162,10303,5103],{"class":172},[162,10305,4538],{"class":168},[162,10307,173],{"class":172},[162,10309,1006],{"class":207},[162,10311,4433],{"class":168},[162,10313,10314,10316,10318,10320,10322],{"class":164,"line":698},[162,10315,5103],{"class":172},[162,10317,5950],{"class":168},[162,10319,173],{"class":172},[162,10321,1011],{"class":207},[162,10323,4433],{"class":168},[162,10325,10326],{"class":164,"line":2955},[162,10327,10328],{"class":361},"    \u002F\u002F地址传递\n",[162,10330,10331,10333,10335,10337,10340,10342],{"class":164,"line":2960},[162,10332,8668],{"class":5082},[162,10334,604],{"class":168},[162,10336,1667],{"class":172},[162,10338,10339],{"class":168},"a,",[162,10341,1667],{"class":172},[162,10343,10344],{"class":168},"b);\n",[162,10346,10347,10349,10351,10353,10355,10357],{"class":164,"line":2971},[162,10348,4690],{"class":168},[162,10350,4316],{"class":172},[162,10352,3538],{"class":168},[162,10354,4316],{"class":172},[162,10356,4381],{"class":168},[162,10358,10359],{"class":361},"\u002F\u002F20\n",[162,10361,10362,10364,10366,10368,10370,10372],{"class":164,"line":2984},[162,10363,4690],{"class":168},[162,10365,4316],{"class":172},[162,10367,3561],{"class":168},[162,10369,4316],{"class":172},[162,10371,4381],{"class":168},[162,10373,10374],{"class":361},"\u002F\u002F10\n",[162,10376,10377],{"class":164,"line":2989},[162,10378,1498],{"class":168},[19,10380,10381],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,10383,10385],{"id":10384},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,10387,10388],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,10390,10391,10392,10394],{},"例如数组：int arr",[162,10393,1006],{},"={4,3,6,9,1,2,10,8,7,5}",[153,10396,10398],{"className":3305,"code":10397,"language":3307,"meta":158,"style":158},"#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",[71,10399,10400,10406,10416,10439,10443,10473,10477,10511,10515,10533,10537,10548,10563,10578,10582,10586,10590,10594,10598,10606,10610,10615,10669,10681,10693,10698,10706,10710,10715,10740,10744,10759,10768,10772],{"__ignoreMap":158},[162,10401,10402,10404],{"class":164,"line":165},[162,10403,5068],{"class":172},[162,10405,5071],{"class":179},[162,10407,10408,10410,10412,10414],{"class":164,"line":197},[162,10409,5076],{"class":172},[162,10411,5079],{"class":172},[162,10413,5083],{"class":5082},[162,10415,4433],{"class":168},[162,10417,10418,10420,10423,10425,10427,10429,10431,10433,10435,10437],{"class":164,"line":228},[162,10419,8471],{"class":172},[162,10421,10422],{"class":5082}," bubbleSort",[162,10424,604],{"class":168},[162,10426,3319],{"class":172},[162,10428,9624],{"class":172},[162,10430,19],{"class":671},[162,10432,3670],{"class":168},[162,10434,3319],{"class":172},[162,10436,949],{"class":671},[162,10438,434],{"class":168},[162,10440,10441],{"class":164,"line":252},[162,10442,4685],{"class":168},[162,10444,10445,10447,10449,10451,10453,10455,10457,10459,10461,10463,10465,10467,10469,10471],{"class":164,"line":328},[162,10446,6315],{"class":172},[162,10448,604],{"class":168},[162,10450,3319],{"class":172},[162,10452,6147],{"class":168},[162,10454,173],{"class":172},[162,10456,312],{"class":207},[162,10458,6154],{"class":168},[162,10460,4187],{"class":172},[162,10462,607],{"class":168},[162,10464,353],{"class":172},[162,10466,208],{"class":207},[162,10468,6154],{"class":168},[162,10470,5410],{"class":172},[162,10472,434],{"class":168},[162,10474,10475],{"class":164,"line":466},[162,10476,5148],{"class":168},[162,10478,10479,10481,10483,10485,10487,10489,10491,10493,10495,10497,10499,10501,10503,10505,10507,10509],{"class":164,"line":471},[162,10480,6517],{"class":172},[162,10482,604],{"class":168},[162,10484,3319],{"class":172},[162,10486,6524],{"class":168},[162,10488,173],{"class":172},[162,10490,312],{"class":207},[162,10492,6531],{"class":168},[162,10494,4187],{"class":172},[162,10496,607],{"class":168},[162,10498,353],{"class":172},[162,10500,3732],{"class":168},[162,10502,353],{"class":172},[162,10504,208],{"class":207},[162,10506,6531],{"class":168},[162,10508,5410],{"class":172},[162,10510,434],{"class":168},[162,10512,10513],{"class":164,"line":687},[162,10514,5627],{"class":168},[162,10516,10517,10519,10522,10524,10527,10529,10531],{"class":164,"line":692},[162,10518,7752],{"class":172},[162,10520,10521],{"class":168},"(p[j]",[162,10523,3000],{"class":172},[162,10525,10526],{"class":168},"p[j",[162,10528,3771],{"class":172},[162,10530,208],{"class":207},[162,10532,315],{"class":168},[162,10534,10535],{"class":164,"line":698},[162,10536,7771],{"class":168},[162,10538,10539,10541,10543,10545],{"class":164,"line":2955},[162,10540,7776],{"class":172},[162,10542,7367],{"class":168},[162,10544,173],{"class":172},[162,10546,10547],{"class":168},"p[j];\n",[162,10549,10550,10553,10555,10557,10559,10561],{"class":164,"line":2960},[162,10551,10552],{"class":168},"                p[j]",[162,10554,173],{"class":172},[162,10556,10526],{"class":168},[162,10558,3771],{"class":172},[162,10560,208],{"class":207},[162,10562,7799],{"class":168},[162,10564,10565,10568,10570,10572,10574,10576],{"class":164,"line":2971},[162,10566,10567],{"class":168},"                p[j",[162,10569,3771],{"class":172},[162,10571,208],{"class":207},[162,10573,3120],{"class":168},[162,10575,173],{"class":172},[162,10577,7392],{"class":168},[162,10579,10580],{"class":164,"line":2984},[162,10581,7819],{"class":168},[162,10583,10584],{"class":164,"line":2989},[162,10585,5646],{"class":168},[162,10587,10588],{"class":164,"line":3011},[162,10589,5305],{"class":168},[162,10591,10592],{"class":164,"line":3022},[162,10593,1498],{"class":168},[162,10595,10596],{"class":164,"line":3027},[162,10597,301],{"emptyLinePlaceholder":300},[162,10599,10600,10602,10604],{"class":164,"line":3046},[162,10601,3319],{"class":172},[162,10603,5092],{"class":5082},[162,10605,1526],{"class":168},[162,10607,10608],{"class":164,"line":3052},[162,10609,4685],{"class":168},[162,10611,10612],{"class":164,"line":3057},[162,10613,10614],{"class":361},"    \u002F\u002F 1.创建数组\n",[162,10616,10617,10619,10621,10623,10625,10627,10629,10631,10633,10635,10637,10639,10641,10643,10645,10647,10649,10651,10653,10655,10657,10659,10661,10663,10665,10667],{"class":164,"line":3072},[162,10618,5103],{"class":172},[162,10620,7075],{"class":168},[162,10622,1006],{"class":207},[162,10624,3120],{"class":168},[162,10626,173],{"class":172},[162,10628,967],{"class":168},[162,10630,223],{"class":207},[162,10632,3670],{"class":168},[162,10634,218],{"class":207},[162,10636,3670],{"class":168},[162,10638,1314],{"class":207},[162,10640,3670],{"class":168},[162,10642,3711],{"class":207},[162,10644,3670],{"class":168},[162,10646,208],{"class":207},[162,10648,3670],{"class":168},[162,10650,213],{"class":207},[162,10652,3670],{"class":168},[162,10654,1006],{"class":207},[162,10656,3670],{"class":168},[162,10658,3687],{"class":207},[162,10660,3670],{"class":168},[162,10662,3661],{"class":207},[162,10664,3670],{"class":168},[162,10666,637],{"class":207},[162,10668,7108],{"class":168},[162,10670,10671,10673,10675,10677,10679],{"class":164,"line":3077},[162,10672,5103],{"class":172},[162,10674,949],{"class":168},[162,10676,173],{"class":172},[162,10678,1006],{"class":207},[162,10680,4433],{"class":168},[162,10682,10683,10685,10687,10689,10691],{"class":164,"line":3100},[162,10684,5103],{"class":172},[162,10686,9624],{"class":172},[162,10688,19],{"class":168},[162,10690,173],{"class":172},[162,10692,10144],{"class":168},[162,10694,10695],{"class":164,"line":3140},[162,10696,10697],{"class":361},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[162,10699,10700,10703],{"class":164,"line":4878},[162,10701,10702],{"class":5082},"    bubbleSort",[162,10704,10705],{"class":168},"(p,len);\n",[162,10707,10708],{"class":164,"line":4883},[162,10709,301],{"emptyLinePlaceholder":300},[162,10711,10712],{"class":164,"line":4897},[162,10713,10714],{"class":361},"    \u002F\u002F 3.打印排序后的数组\n",[162,10716,10717,10719,10721,10723,10725,10727,10729,10731,10733,10736,10738],{"class":164,"line":4902},[162,10718,6315],{"class":172},[162,10720,1003],{"class":168},[162,10722,3319],{"class":172},[162,10724,6147],{"class":168},[162,10726,173],{"class":172},[162,10728,312],{"class":207},[162,10730,6328],{"class":168},[162,10732,4187],{"class":172},[162,10734,10735],{"class":168},"len; i",[162,10737,5410],{"class":172},[162,10739,434],{"class":168},[162,10741,10742],{"class":164,"line":5694},[162,10743,5148],{"class":168},[162,10745,10746,10748,10750,10752,10754,10757],{"class":164,"line":5708},[162,10747,6565],{"class":168},[162,10749,9525],{"class":172},[162,10751,19],{"class":168},[162,10753,4316],{"class":172},[162,10755,10756],{"class":179},"\"\"",[162,10758,4433],{"class":168},[162,10760,10761,10764,10766],{"class":164,"line":5716},[162,10762,10763],{"class":168},"        p",[162,10765,5410],{"class":172},[162,10767,4433],{"class":168},[162,10769,10770],{"class":164,"line":5721},[162,10771,5305],{"class":168},[162,10773,10774],{"class":164,"line":5727},[162,10775,1498],{"class":168},[3219,10777,10778],{},"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":158,"searchDepth":197,"depth":197,"links":10780},[10781,10782,10783,10784,10785,10786,10787,10788],{"id":9389,"depth":197,"text":9390},{"id":9555,"depth":197,"text":9556},{"id":9711,"depth":197,"text":9712},{"id":9789,"depth":197,"text":9790},{"id":9868,"depth":197,"text":9869},{"id":9967,"depth":197,"text":9968},{"id":10206,"depth":197,"text":10207},{"id":10384,"depth":197,"text":10385},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":9378,"description":9386},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":10795,"title":10796,"body":10797,"description":10804,"extension":3242,"meta":13772,"navigation":300,"path":13773,"seo":13774,"stem":13775,"__hash__":13776},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":10798,"toc":13763},[10799,10802,10805,10809,10812,10815,10826,11164,11167,11171,11174,11181,11436,11440,11443,11446,11601,11605,11608,11611,11816,11820,11823,12126,12128,12136,12140,12143,12294,12296,12307,12364,12368,12373,13028,13036,13039,13133,13136,13755,13760],[10,10800,10796],{"id":10801},"_4结构体",[19,10803,10804],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,10806,10808],{"id":10807},"_41结构体定义与使用","4.1结构体定义与使用",[19,10810,10811],{},"语法：struct 结构体名 {结构体成员列表}；",[19,10813,10814],{},"通过结构体创建变量的方式：",[4279,10816,10817,10820,10823],{},[1455,10818,10819],{},"struct 结构体名 变量名",[1455,10821,10822],{},"struct 结构体名 变量名={成员1值，成员2值...}",[1455,10824,10825],{},"定义结构体时顺便创建变量",[153,10827,10829],{"className":3305,"code":10828,"language":3307,"meta":158,"style":158},"#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",[71,10830,10831,10837,10847,10854,10859,10867,10871,10876,10880,10885,10890,10895,10902,10907,10914,10918,10925,10929,10933,10937,10941,10945,10949,10955,10959,10965,10973,10981,10985,10990,10995,11006,11011,11023,11034,11045,11050,11074,11079,11085,11112,11117,11123,11135,11147,11159],{"__ignoreMap":158},[162,10832,10833,10835],{"class":164,"line":165},[162,10834,5068],{"class":172},[162,10836,5071],{"class":179},[162,10838,10839,10841,10843,10845],{"class":164,"line":197},[162,10840,5076],{"class":172},[162,10842,5079],{"class":172},[162,10844,5083],{"class":5082},[162,10846,4433],{"class":168},[162,10848,10849,10851],{"class":164,"line":228},[162,10850,5068],{"class":172},[162,10852,10853],{"class":179},"\u003Cstring>\n",[162,10855,10856],{"class":164,"line":252},[162,10857,10858],{"class":361},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[162,10860,10861,10864],{"class":164,"line":328},[162,10862,10863],{"class":172},"struct",[162,10865,10866],{"class":5082}," Student\n",[162,10868,10869],{"class":164,"line":466},[162,10870,4685],{"class":168},[162,10872,10873],{"class":164,"line":471},[162,10874,10875],{"class":361},"    \u002F\u002F成员列表\n",[162,10877,10878],{"class":164,"line":687},[162,10879,301],{"emptyLinePlaceholder":300},[162,10881,10882],{"class":164,"line":692},[162,10883,10884],{"class":361},"    \u002F\u002F姓名\n",[162,10886,10887],{"class":164,"line":698},[162,10888,10889],{"class":168},"    string name;\n",[162,10891,10892],{"class":164,"line":2955},[162,10893,10894],{"class":361},"    \u002F\u002F年龄\n",[162,10896,10897,10899],{"class":164,"line":2960},[162,10898,5103],{"class":172},[162,10900,10901],{"class":168}," age;\n",[162,10903,10904],{"class":164,"line":2971},[162,10905,10906],{"class":361},"    \u002F\u002F分数\n",[162,10908,10909,10911],{"class":164,"line":2984},[162,10910,5103],{"class":172},[162,10912,10913],{"class":168}," score;\n",[162,10915,10916],{"class":164,"line":2989},[162,10917,7108],{"class":168},[162,10919,10920,10922],{"class":164,"line":3011},[162,10921,10863],{"class":172},[162,10923,10924],{"class":5082}," School\n",[162,10926,10927],{"class":164,"line":3022},[162,10928,4685],{"class":168},[162,10930,10931],{"class":164,"line":3027},[162,10932,10875],{"class":361},[162,10934,10935],{"class":164,"line":3046},[162,10936,301],{"emptyLinePlaceholder":300},[162,10938,10939],{"class":164,"line":3052},[162,10940,10884],{"class":361},[162,10942,10943],{"class":164,"line":3057},[162,10944,10889],{"class":168},[162,10946,10947],{"class":164,"line":3072},[162,10948,10894],{"class":361},[162,10950,10951,10953],{"class":164,"line":3077},[162,10952,5103],{"class":172},[162,10954,10901],{"class":168},[162,10956,10957],{"class":164,"line":3100},[162,10958,10906],{"class":361},[162,10960,10961,10963],{"class":164,"line":3140},[162,10962,5103],{"class":172},[162,10964,10913],{"class":168},[162,10966,10967,10970],{"class":164,"line":4878},[162,10968,10969],{"class":168},"} s3;",[162,10971,10972],{"class":361}," \u002F\u002F创建结构体时就创建了变量\n",[162,10974,10975,10977,10979],{"class":164,"line":4883},[162,10976,3319],{"class":172},[162,10978,5092],{"class":5082},[162,10980,1526],{"class":168},[162,10982,10983],{"class":164,"line":4897},[162,10984,4685],{"class":168},[162,10986,10987],{"class":164,"line":4902},[162,10988,10989],{"class":361},"    \u002F\u002F2.通过学生类型创建具体学生\n",[162,10991,10992],{"class":164,"line":5694},[162,10993,10994],{"class":361},"    \u002F\u002F2.1 struct Student s1;\n",[162,10996,10997,11000,11003],{"class":164,"line":5708},[162,10998,10999],{"class":172},"    struct",[162,11001,11002],{"class":5082}," Student",[162,11004,11005],{"class":168}," s1;\n",[162,11007,11008],{"class":164,"line":5716},[162,11009,11010],{"class":361},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[162,11012,11013,11016,11018,11021],{"class":164,"line":5721},[162,11014,11015],{"class":168},"    s1.name",[162,11017,173],{"class":172},[162,11019,11020],{"class":179},"\"张三\"",[162,11022,4433],{"class":168},[162,11024,11025,11028,11030,11032],{"class":164,"line":5727},[162,11026,11027],{"class":168},"    s1.age",[162,11029,173],{"class":172},[162,11031,242],{"class":207},[162,11033,4433],{"class":168},[162,11035,11036,11039,11041,11043],{"class":164,"line":5733},[162,11037,11038],{"class":168},"    s1.score",[162,11040,173],{"class":172},[162,11042,885],{"class":207},[162,11044,4433],{"class":168},[162,11046,11047],{"class":164,"line":5738},[162,11048,11049],{"class":361},"    \u002F\u002F输出结果\n",[162,11051,11053,11055,11057,11060,11062,11065,11067,11070,11072],{"class":164,"line":11052},37,[162,11054,4690],{"class":168},[162,11056,4316],{"class":172},[162,11058,11059],{"class":168},"s1.name",[162,11061,4316],{"class":172},[162,11063,11064],{"class":168},"s1.age",[162,11066,4316],{"class":172},[162,11068,11069],{"class":168},"s1.score",[162,11071,4316],{"class":172},[162,11073,4338],{"class":168},[162,11075,11077],{"class":164,"line":11076},38,[162,11078,301],{"emptyLinePlaceholder":300},[162,11080,11082],{"class":164,"line":11081},39,[162,11083,11084],{"class":361},"    \u002F\u002F2.2 struct Student s2={...}\n",[162,11086,11088,11090,11092,11095,11097,11099,11102,11104,11106,11108,11110],{"class":164,"line":11087},40,[162,11089,10999],{"class":172},[162,11091,11002],{"class":5082},[162,11093,11094],{"class":168}," s2",[162,11096,173],{"class":172},[162,11098,967],{"class":168},[162,11100,11101],{"class":179},"\"王五\"",[162,11103,3670],{"class":168},[162,11105,242],{"class":207},[162,11107,3670],{"class":168},[162,11109,885],{"class":207},[162,11111,7108],{"class":168},[162,11113,11115],{"class":164,"line":11114},41,[162,11116,301],{"emptyLinePlaceholder":300},[162,11118,11120],{"class":164,"line":11119},42,[162,11121,11122],{"class":361},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[162,11124,11126,11129,11131,11133],{"class":164,"line":11125},43,[162,11127,11128],{"class":168},"    s3.name",[162,11130,173],{"class":172},[162,11132,6792],{"class":179},[162,11134,4433],{"class":168},[162,11136,11138,11141,11143,11145],{"class":164,"line":11137},44,[162,11139,11140],{"class":168},"    s3.age",[162,11142,173],{"class":172},[162,11144,242],{"class":207},[162,11146,4433],{"class":168},[162,11148,11150,11153,11155,11157],{"class":164,"line":11149},45,[162,11151,11152],{"class":168},"    s3.score",[162,11154,173],{"class":172},[162,11156,1011],{"class":207},[162,11158,4433],{"class":168},[162,11160,11162],{"class":164,"line":11161},46,[162,11163,1498],{"class":168},[19,11165,11166],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,11168,11170],{"id":11169},"_42结构体数组","4.2结构体数组",[19,11172,11173],{},"将自定义的结构体放入到数组中方便维护",[19,11175,11176,11177,11180],{},"语法：struct 结构体名 数组名",[162,11178,11179],{},"元素个数","={ {}，{},...{} };",[153,11182,11184],{"className":3305,"code":11183,"language":3307,"meta":158,"style":158},"#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",[71,11185,11186,11192,11202,11208,11213,11219,11223,11227,11233,11239,11243,11247,11255,11259,11264,11279,11283,11299,11315,11319,11324,11340,11355,11370,11375,11401,11405,11428,11432],{"__ignoreMap":158},[162,11187,11188,11190],{"class":164,"line":165},[162,11189,5068],{"class":172},[162,11191,5071],{"class":179},[162,11193,11194,11196,11198,11200],{"class":164,"line":197},[162,11195,5076],{"class":172},[162,11197,5079],{"class":172},[162,11199,5083],{"class":5082},[162,11201,4433],{"class":168},[162,11203,11204,11206],{"class":164,"line":228},[162,11205,5068],{"class":172},[162,11207,10853],{"class":179},[162,11209,11210],{"class":164,"line":252},[162,11211,11212],{"class":361},"\u002F\u002F1.定义结构体\n",[162,11214,11215,11217],{"class":164,"line":328},[162,11216,10863],{"class":172},[162,11218,10866],{"class":5082},[162,11220,11221],{"class":164,"line":466},[162,11222,4685],{"class":168},[162,11224,11225],{"class":164,"line":471},[162,11226,10889],{"class":168},[162,11228,11229,11231],{"class":164,"line":687},[162,11230,5103],{"class":172},[162,11232,10901],{"class":168},[162,11234,11235,11237],{"class":164,"line":692},[162,11236,5103],{"class":172},[162,11238,10913],{"class":168},[162,11240,11241],{"class":164,"line":698},[162,11242,301],{"emptyLinePlaceholder":300},[162,11244,11245],{"class":164,"line":2955},[162,11246,7108],{"class":168},[162,11248,11249,11251,11253],{"class":164,"line":2960},[162,11250,3319],{"class":172},[162,11252,5092],{"class":5082},[162,11254,1526],{"class":168},[162,11256,11257],{"class":164,"line":2971},[162,11258,4685],{"class":168},[162,11260,11261],{"class":164,"line":2984},[162,11262,11263],{"class":361},"    \u002F\u002F2.创建结构体数组\n",[162,11265,11266,11268,11270,11273,11275,11277],{"class":164,"line":2989},[162,11267,10999],{"class":172},[162,11269,11002],{"class":5082},[162,11271,11272],{"class":168}," stuArray[",[162,11274,213],{"class":207},[162,11276,3120],{"class":168},[162,11278,8017],{"class":172},[162,11280,11281],{"class":164,"line":3011},[162,11282,5148],{"class":168},[162,11284,11285,11287,11289,11291,11293,11295,11297],{"class":164,"line":3022},[162,11286,8026],{"class":168},[162,11288,11020],{"class":179},[162,11290,3670],{"class":168},[162,11292,242],{"class":207},[162,11294,3670],{"class":168},[162,11296,3608],{"class":207},[162,11298,2061],{"class":168},[162,11300,11301,11303,11305,11307,11309,11311,11313],{"class":164,"line":3027},[162,11302,8026],{"class":168},[162,11304,6792],{"class":179},[162,11306,3670],{"class":168},[162,11308,3863],{"class":207},[162,11310,3670],{"class":168},[162,11312,3863],{"class":207},[162,11314,1498],{"class":168},[162,11316,11317],{"class":164,"line":3046},[162,11318,5305],{"class":168},[162,11320,11321],{"class":164,"line":3052},[162,11322,11323],{"class":361},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[162,11325,11326,11329,11331,11334,11336,11338],{"class":164,"line":3057},[162,11327,11328],{"class":168},"    stuArray[",[162,11330,208],{"class":207},[162,11332,11333],{"class":168},"].name",[162,11335,173],{"class":172},[162,11337,6815],{"class":179},[162,11339,4433],{"class":168},[162,11341,11342,11344,11346,11349,11351,11353],{"class":164,"line":3072},[162,11343,11328],{"class":168},[162,11345,208],{"class":207},[162,11347,11348],{"class":168},"].age",[162,11350,173],{"class":172},[162,11352,213],{"class":207},[162,11354,4433],{"class":168},[162,11356,11357,11359,11361,11364,11366,11368],{"class":164,"line":3077},[162,11358,11328],{"class":168},[162,11360,208],{"class":207},[162,11362,11363],{"class":168},"].score",[162,11365,173],{"class":172},[162,11367,213],{"class":207},[162,11369,4433],{"class":168},[162,11371,11372],{"class":164,"line":3100},[162,11373,11374],{"class":361},"    \u002F\u002F4.遍历结构体数组\n",[162,11376,11377,11379,11381,11383,11385,11387,11389,11391,11393,11395,11397,11399],{"class":164,"line":3140},[162,11378,6315],{"class":172},[162,11380,1003],{"class":168},[162,11382,3319],{"class":172},[162,11384,6147],{"class":168},[162,11386,173],{"class":172},[162,11388,312],{"class":207},[162,11390,6154],{"class":168},[162,11392,4187],{"class":172},[162,11394,213],{"class":207},[162,11396,6154],{"class":168},[162,11398,5410],{"class":172},[162,11400,434],{"class":168},[162,11402,11403],{"class":164,"line":4878},[162,11404,5148],{"class":168},[162,11406,11407,11409,11411,11414,11416,11419,11421,11424,11426],{"class":164,"line":4883},[162,11408,6565],{"class":168},[162,11410,4316],{"class":172},[162,11412,11413],{"class":168},"stuArray[i].name",[162,11415,4316],{"class":172},[162,11417,11418],{"class":168},"stuArray[i].age",[162,11420,4316],{"class":172},[162,11422,11423],{"class":168},"stuArray[i].score",[162,11425,4316],{"class":172},[162,11427,4338],{"class":168},[162,11429,11430],{"class":164,"line":4897},[162,11431,5305],{"class":168},[162,11433,11434],{"class":164,"line":4902},[162,11435,1498],{"class":168},[14,11437,11439],{"id":11438},"_43结构体指针","4.3结构体指针",[19,11441,11442],{},"作用：通过指针访问结构体中的成员",[19,11444,11445],{},"利用操作符->可以通过结构体指针访问结构体属性",[153,11447,11449],{"className":3305,"code":11448,"language":3307,"meta":158,"style":158},"#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",[71,11450,11451,11457,11467,11473,11477,11483,11487,11491,11497,11503,11507,11515,11519,11524,11549,11554,11569,11574,11597],{"__ignoreMap":158},[162,11452,11453,11455],{"class":164,"line":165},[162,11454,5068],{"class":172},[162,11456,5071],{"class":179},[162,11458,11459,11461,11463,11465],{"class":164,"line":197},[162,11460,5076],{"class":172},[162,11462,5079],{"class":172},[162,11464,5083],{"class":5082},[162,11466,4433],{"class":168},[162,11468,11469,11471],{"class":164,"line":228},[162,11470,5068],{"class":172},[162,11472,10853],{"class":179},[162,11474,11475],{"class":164,"line":252},[162,11476,11212],{"class":361},[162,11478,11479,11481],{"class":164,"line":328},[162,11480,10863],{"class":172},[162,11482,10866],{"class":5082},[162,11484,11485],{"class":164,"line":466},[162,11486,4685],{"class":168},[162,11488,11489],{"class":164,"line":471},[162,11490,10889],{"class":168},[162,11492,11493,11495],{"class":164,"line":687},[162,11494,5103],{"class":172},[162,11496,10901],{"class":168},[162,11498,11499,11501],{"class":164,"line":692},[162,11500,5103],{"class":172},[162,11502,10913],{"class":168},[162,11504,11505],{"class":164,"line":698},[162,11506,7108],{"class":168},[162,11508,11509,11511,11513],{"class":164,"line":2955},[162,11510,3319],{"class":172},[162,11512,5092],{"class":5082},[162,11514,1526],{"class":168},[162,11516,11517],{"class":164,"line":2960},[162,11518,4685],{"class":168},[162,11520,11521],{"class":164,"line":2971},[162,11522,11523],{"class":361},"    \u002F\u002F创建学生结构体变量\n",[162,11525,11526,11528,11530,11533,11535,11537,11539,11541,11543,11545,11547],{"class":164,"line":2984},[162,11527,10999],{"class":172},[162,11529,11002],{"class":5082},[162,11531,11532],{"class":168}," s",[162,11534,173],{"class":172},[162,11536,967],{"class":168},[162,11538,11020],{"class":179},[162,11540,3670],{"class":168},[162,11542,242],{"class":207},[162,11544,3670],{"class":168},[162,11546,4845],{"class":207},[162,11548,7108],{"class":168},[162,11550,11551],{"class":164,"line":2989},[162,11552,11553],{"class":361},"    \u002F\u002F通过指针指向结构体变量\n",[162,11555,11556,11558,11560,11562,11564,11566],{"class":164,"line":3011},[162,11557,10999],{"class":172},[162,11559,11002],{"class":5082},[162,11561,9624],{"class":172},[162,11563,19],{"class":168},[162,11565,9445],{"class":172},[162,11567,11568],{"class":168},"s\n",[162,11570,11571],{"class":164,"line":3022},[162,11572,11573],{"class":361},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[162,11575,11576,11578,11580,11583,11585,11588,11590,11593,11595],{"class":164,"line":3027},[162,11577,4690],{"class":168},[162,11579,4316],{"class":172},[162,11581,11582],{"class":168},"p->name",[162,11584,4316],{"class":172},[162,11586,11587],{"class":168},"p->age",[162,11589,4316],{"class":172},[162,11591,11592],{"class":168},"p->score",[162,11594,4316],{"class":172},[162,11596,4338],{"class":168},[162,11598,11599],{"class":164,"line":3046},[162,11600,1498],{"class":168},[14,11602,11604],{"id":11603},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,11606,11607],{},"作用：结构体中的成员可以是另一个结构体",[19,11609,11610],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[153,11612,11614],{"className":3305,"code":11613,"language":3307,"meta":158,"style":158},"#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",[71,11615,11616,11622,11632,11638,11643,11651,11655,11659,11665,11671,11675,11680,11687,11691,11698,11702,11708,11713,11717,11725,11729,11734,11739,11744,11755,11767,11778,11790,11801,11812],{"__ignoreMap":158},[162,11617,11618,11620],{"class":164,"line":165},[162,11619,5068],{"class":172},[162,11621,5071],{"class":179},[162,11623,11624,11626,11628,11630],{"class":164,"line":197},[162,11625,5076],{"class":172},[162,11627,5079],{"class":172},[162,11629,5083],{"class":5082},[162,11631,4433],{"class":168},[162,11633,11634,11636],{"class":164,"line":228},[162,11635,5068],{"class":172},[162,11637,10853],{"class":179},[162,11639,11640],{"class":164,"line":252},[162,11641,11642],{"class":361},"\u002F\u002F定义学生结构体\n",[162,11644,11645,11647,11649],{"class":164,"line":328},[162,11646,10863],{"class":172},[162,11648,11002],{"class":5082},[162,11650,5791],{"class":168},[162,11652,11653],{"class":164,"line":466},[162,11654,4685],{"class":168},[162,11656,11657],{"class":164,"line":471},[162,11658,10889],{"class":168},[162,11660,11661,11663],{"class":164,"line":687},[162,11662,5103],{"class":172},[162,11664,10901],{"class":168},[162,11666,11667,11669],{"class":164,"line":692},[162,11668,5103],{"class":172},[162,11670,10913],{"class":168},[162,11672,11673],{"class":164,"line":698},[162,11674,1498],{"class":168},[162,11676,11677],{"class":164,"line":2955},[162,11678,11679],{"class":361},"\u002F\u002F定义老师结构体\n",[162,11681,11682,11684],{"class":164,"line":2960},[162,11683,10863],{"class":172},[162,11685,11686],{"class":5082}," Teacher\n",[162,11688,11689],{"class":164,"line":2971},[162,11690,4685],{"class":168},[162,11692,11693,11695],{"class":164,"line":2984},[162,11694,5103],{"class":172},[162,11696,11697],{"class":168}," id;\n",[162,11699,11700],{"class":164,"line":2989},[162,11701,10889],{"class":168},[162,11703,11704,11706],{"class":164,"line":3011},[162,11705,5103],{"class":172},[162,11707,10901],{"class":168},[162,11709,11710],{"class":164,"line":3022},[162,11711,11712],{"class":168},"    Student stu;\n",[162,11714,11715],{"class":164,"line":3027},[162,11716,1498],{"class":168},[162,11718,11719,11721,11723],{"class":164,"line":3046},[162,11720,3319],{"class":172},[162,11722,5092],{"class":5082},[162,11724,9085],{"class":168},[162,11726,11727],{"class":164,"line":3052},[162,11728,4685],{"class":168},[162,11730,11731],{"class":164,"line":3057},[162,11732,11733],{"class":361},"    \u002F\u002F结构体嵌套结构体\n",[162,11735,11736],{"class":164,"line":3072},[162,11737,11738],{"class":361},"    \u002F\u002F创建老师\n",[162,11740,11741],{"class":164,"line":3077},[162,11742,11743],{"class":168},"    Teacher t;\n",[162,11745,11746,11749,11751,11753],{"class":164,"line":3100},[162,11747,11748],{"class":168},"    t.id",[162,11750,173],{"class":172},[162,11752,3608],{"class":207},[162,11754,4433],{"class":168},[162,11756,11757,11760,11762,11765],{"class":164,"line":3140},[162,11758,11759],{"class":168},"    t.name",[162,11761,173],{"class":172},[162,11763,11764],{"class":179},"\"老王\"",[162,11766,4433],{"class":168},[162,11768,11769,11772,11774,11776],{"class":164,"line":4878},[162,11770,11771],{"class":168},"    t.age",[162,11773,173],{"class":172},[162,11775,242],{"class":207},[162,11777,4433],{"class":168},[162,11779,11780,11783,11785,11787],{"class":164,"line":4883},[162,11781,11782],{"class":168},"    t.stu.name",[162,11784,173],{"class":172},[162,11786,456],{"class":179},[162,11788,11789],{"class":168},"；\n",[162,11791,11792,11795,11797,11799],{"class":164,"line":4897},[162,11793,11794],{"class":168},"    t.stu.age",[162,11796,173],{"class":172},[162,11798,1011],{"class":207},[162,11800,4433],{"class":168},[162,11802,11803,11806,11808,11810],{"class":164,"line":4902},[162,11804,11805],{"class":168},"    t.stu.score",[162,11807,173],{"class":172},[162,11809,1314],{"class":207},[162,11811,4433],{"class":168},[162,11813,11814],{"class":164,"line":5694},[162,11815,1498],{"class":168},[14,11817,11819],{"id":11818},"_45结构体做函数参数","4.5结构体做函数参数",[19,11821,11822],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[153,11824,11826],{"className":3305,"code":11825,"language":3307,"meta":158,"style":158},"#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",[71,11827,11828,11834,11844,11850,11856,11860,11864,11870,11876,11880,11885,11890,11907,11911,11944,11948,11953,11972,11976,12007,12011,12019,12023,12032,12044,12056,12068,12081,12089,12102,12114,12122],{"__ignoreMap":158},[162,11829,11830,11832],{"class":164,"line":165},[162,11831,5068],{"class":172},[162,11833,5071],{"class":179},[162,11835,11836,11838,11840,11842],{"class":164,"line":197},[162,11837,5076],{"class":172},[162,11839,5079],{"class":172},[162,11841,5083],{"class":5082},[162,11843,4433],{"class":168},[162,11845,11846,11848],{"class":164,"line":228},[162,11847,5068],{"class":172},[162,11849,10853],{"class":179},[162,11851,11852,11854],{"class":164,"line":252},[162,11853,10863],{"class":172},[162,11855,10866],{"class":5082},[162,11857,11858],{"class":164,"line":328},[162,11859,4685],{"class":168},[162,11861,11862],{"class":164,"line":466},[162,11863,10889],{"class":168},[162,11865,11866,11868],{"class":164,"line":471},[162,11867,5103],{"class":172},[162,11869,10901],{"class":168},[162,11871,11872,11874],{"class":164,"line":687},[162,11873,5103],{"class":172},[162,11875,10913],{"class":168},[162,11877,11878],{"class":164,"line":692},[162,11879,7108],{"class":168},[162,11881,11882],{"class":164,"line":698},[162,11883,11884],{"class":361},"\u002F\u002F打印学生信息的函数\n",[162,11886,11887],{"class":164,"line":2955},[162,11888,11889],{"class":361},"\u002F\u002F值传递\n",[162,11891,11892,11894,11897,11899,11901,11903,11905],{"class":164,"line":2960},[162,11893,8471],{"class":172},[162,11895,11896],{"class":5082}," printStudent1",[162,11898,604],{"class":168},[162,11900,10863],{"class":172},[162,11902,11002],{"class":5082},[162,11904,11532],{"class":671},[162,11906,434],{"class":168},[162,11908,11909],{"class":164,"line":2971},[162,11910,4685],{"class":168},[162,11912,11913,11915,11917,11920,11922,11925,11927,11930,11932,11934,11936,11939,11941],{"class":164,"line":2984},[162,11914,9635],{"class":168},[162,11916,4316],{"class":172},[162,11918,11919],{"class":168}," s.name ",[162,11921,4316],{"class":172},[162,11923,11924],{"class":179}," \" \"",[162,11926,4584],{"class":172},[162,11928,11929],{"class":168}," s.age ",[162,11931,4316],{"class":172},[162,11933,11924],{"class":179},[162,11935,4584],{"class":172},[162,11937,11938],{"class":168}," s.score ",[162,11940,4316],{"class":172},[162,11942,11943],{"class":168}," endl;\n",[162,11945,11946],{"class":164,"line":2989},[162,11947,1498],{"class":168},[162,11949,11950],{"class":164,"line":3011},[162,11951,11952],{"class":361},"\u002F\u002F地址传递\n",[162,11954,11955,11957,11960,11962,11964,11966,11968,11970],{"class":164,"line":3022},[162,11956,8471],{"class":172},[162,11958,11959],{"class":5082}," printStudent2",[162,11961,604],{"class":168},[162,11963,10863],{"class":172},[162,11965,11002],{"class":5082},[162,11967,9624],{"class":172},[162,11969,3979],{"class":671},[162,11971,434],{"class":168},[162,11973,11974],{"class":164,"line":3027},[162,11975,4685],{"class":168},[162,11977,11978,11980,11982,11985,11987,11989,11991,11994,11996,11998,12000,12003,12005],{"class":164,"line":3046},[162,11979,9635],{"class":168},[162,11981,4316],{"class":172},[162,11983,11984],{"class":168}," s->name ",[162,11986,4316],{"class":172},[162,11988,11924],{"class":179},[162,11990,4584],{"class":172},[162,11992,11993],{"class":168}," s->age ",[162,11995,4316],{"class":172},[162,11997,11924],{"class":179},[162,11999,4584],{"class":172},[162,12001,12002],{"class":168}," s->score ",[162,12004,4316],{"class":172},[162,12006,11943],{"class":168},[162,12008,12009],{"class":164,"line":3052},[162,12010,1498],{"class":168},[162,12012,12013,12015,12017],{"class":164,"line":3057},[162,12014,3319],{"class":172},[162,12016,5092],{"class":5082},[162,12018,1526],{"class":168},[162,12020,12021],{"class":164,"line":3072},[162,12022,4685],{"class":168},[162,12024,12025,12027,12029],{"class":164,"line":3077},[162,12026,10999],{"class":172},[162,12028,11002],{"class":5082},[162,12030,12031],{"class":168}," s;\n",[162,12033,12034,12037,12039,12042],{"class":164,"line":3100},[162,12035,12036],{"class":168},"    s.name ",[162,12038,173],{"class":172},[162,12040,12041],{"class":179}," \"张三\"",[162,12043,4433],{"class":168},[162,12045,12046,12049,12051,12054],{"class":164,"line":3140},[162,12047,12048],{"class":168},"    s.age ",[162,12050,173],{"class":172},[162,12052,12053],{"class":207}," 20",[162,12055,4433],{"class":168},[162,12057,12058,12061,12063,12066],{"class":164,"line":4878},[162,12059,12060],{"class":168},"    s.score ",[162,12062,173],{"class":172},[162,12064,12065],{"class":207}," 85",[162,12067,4433],{"class":168},[162,12069,12070,12072,12074,12077,12079],{"class":164,"line":4883},[162,12071,4690],{"class":168},[162,12073,4316],{"class":172},[162,12075,12076],{"class":179},"\"值传递:\"",[162,12078,4316],{"class":172},[162,12080,4338],{"class":168},[162,12082,12083,12086],{"class":164,"line":4897},[162,12084,12085],{"class":5082},"    printStudent1",[162,12087,12088],{"class":168},"(s);\n",[162,12090,12091,12093,12095,12098,12100],{"class":164,"line":4902},[162,12092,4690],{"class":168},[162,12094,4316],{"class":172},[162,12096,12097],{"class":179},"\"地址传递:\"",[162,12099,4316],{"class":172},[162,12101,4338],{"class":168},[162,12103,12104,12107,12109,12111],{"class":164,"line":5694},[162,12105,12106],{"class":5082},"    printStudent2",[162,12108,604],{"class":168},[162,12110,1667],{"class":172},[162,12112,12113],{"class":168},"s); \n",[162,12115,12116,12118,12120],{"class":164,"line":5708},[162,12117,7203],{"class":172},[162,12119,2717],{"class":207},[162,12121,4433],{"class":168},[162,12123,12124],{"class":164,"line":5716},[162,12125,1498],{"class":168},[19,12127,1529],{},[4279,12129,12130,12133],{},[1455,12131,12132],{},"1.先定义结构体，不要在函数中写结构体的定义",[1455,12134,12135],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,12137,12139],{"id":12138},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,12141,12142],{},"用const防止误操作",[153,12144,12146],{"className":3305,"code":12145,"language":3307,"meta":158,"style":158},"#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",[71,12147,12148,12154,12164,12170,12175,12179,12183,12189,12195,12199,12215,12219,12242,12246,12254,12258,12279,12286,12290],{"__ignoreMap":158},[162,12149,12150,12152],{"class":164,"line":165},[162,12151,5068],{"class":172},[162,12153,5071],{"class":179},[162,12155,12156,12158,12160,12162],{"class":164,"line":197},[162,12157,5076],{"class":172},[162,12159,5079],{"class":172},[162,12161,5083],{"class":5082},[162,12163,4433],{"class":168},[162,12165,12166,12168],{"class":164,"line":228},[162,12167,5068],{"class":172},[162,12169,10853],{"class":179},[162,12171,12172],{"class":164,"line":252},[162,12173,12174],{"class":168},"sctuct Student\n",[162,12176,12177],{"class":164,"line":328},[162,12178,4685],{"class":168},[162,12180,12181],{"class":164,"line":466},[162,12182,10889],{"class":168},[162,12184,12185,12187],{"class":164,"line":471},[162,12186,5103],{"class":172},[162,12188,10901],{"class":168},[162,12190,12191,12193],{"class":164,"line":687},[162,12192,5103],{"class":172},[162,12194,10913],{"class":168},[162,12196,12197],{"class":164,"line":692},[162,12198,7108],{"class":168},[162,12200,12201,12203,12206,12208,12211,12213],{"class":164,"line":698},[162,12202,8471],{"class":172},[162,12204,12205],{"class":5082}," printStudents",[162,12207,604],{"class":168},[162,12209,12210],{"class":5082},"student",[162,12212,11532],{"class":671},[162,12214,434],{"class":168},[162,12216,12217],{"class":164,"line":2955},[162,12218,4685],{"class":168},[162,12220,12221,12223,12225,12228,12230,12233,12235,12238,12240],{"class":164,"line":2960},[162,12222,4690],{"class":168},[162,12224,4316],{"class":172},[162,12226,12227],{"class":168},"s.name",[162,12229,4316],{"class":172},[162,12231,12232],{"class":168},"s.age",[162,12234,4316],{"class":172},[162,12236,12237],{"class":168},"s.score",[162,12239,4316],{"class":172},[162,12241,4338],{"class":168},[162,12243,12244],{"class":164,"line":2971},[162,12245,1498],{"class":168},[162,12247,12248,12250,12252],{"class":164,"line":2984},[162,12249,3319],{"class":172},[162,12251,5092],{"class":5082},[162,12253,9085],{"class":168},[162,12255,12256],{"class":164,"line":2989},[162,12257,4685],{"class":168},[162,12259,12260,12263,12265,12267,12269,12271,12273,12275,12277],{"class":164,"line":3011},[162,12261,12262],{"class":168},"    Student s",[162,12264,173],{"class":172},[162,12266,967],{"class":168},[162,12268,11020],{"class":179},[162,12270,3670],{"class":168},[162,12272,242],{"class":207},[162,12274,3670],{"class":168},[162,12276,242],{"class":207},[162,12278,7108],{"class":168},[162,12280,12281,12284],{"class":164,"line":3022},[162,12282,12283],{"class":5082},"    printStudent",[162,12285,12088],{"class":168},[162,12287,12288],{"class":164,"line":3027},[162,12289,301],{"emptyLinePlaceholder":300},[162,12291,12292],{"class":164,"line":3046},[162,12293,1498],{"class":168},[19,12295,1529],{},[4279,12297,12298,12301,12304],{},[1455,12299,12300],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[1455,12302,12303],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[1455,12305,12306],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[153,12308,12310],{"className":3305,"code":12309,"language":3307,"meta":158,"style":158},"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",[71,12311,12312,12331,12335,12340,12360],{"__ignoreMap":158},[162,12313,12314,12316,12318,12320,12322,12325,12327,12329],{"class":164,"line":165},[162,12315,8471],{"class":172},[162,12317,12205],{"class":5082},[162,12319,604],{"class":168},[162,12321,9898],{"class":172},[162,12323,12324],{"class":5082}," student",[162,12326,9624],{"class":172},[162,12328,3979],{"class":671},[162,12330,434],{"class":168},[162,12332,12333],{"class":164,"line":197},[162,12334,4685],{"class":168},[162,12336,12337],{"class":164,"line":228},[162,12338,12339],{"class":361},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[162,12341,12342,12344,12346,12348,12350,12352,12354,12356,12358],{"class":164,"line":252},[162,12343,4690],{"class":168},[162,12345,4316],{"class":172},[162,12347,12227],{"class":168},[162,12349,4316],{"class":172},[162,12351,12232],{"class":168},[162,12353,4316],{"class":172},[162,12355,12237],{"class":168},[162,12357,4316],{"class":172},[162,12359,4338],{"class":168},[162,12361,12362],{"class":164,"line":328},[162,12363,1498],{"class":168},[14,12365,12367],{"id":12366},"_47案例","4.7案例",[1452,12369,12370],{},[1455,12371,12372],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[153,12374,12376],{"className":3305,"code":12375,"language":3307,"meta":158,"style":158},"#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",[71,12377,12378,12384,12394,12400,12407,12411,12417,12421,12426,12432,12438,12442,12446,12452,12456,12461,12466,12479,12483,12488,12514,12518,12530,12556,12560,12572,12581,12585,12590,12619,12623,12635,12644,12671,12682,12692,12696,12700,12704,12709,12733,12737,12761,12765,12784,12810,12814,12839,12862,12886,12891,12896,12901,12910,12915,12921,12942,12948,12962,12968,12995,13004,13010,13018,13023],{"__ignoreMap":158},[162,12379,12380,12382],{"class":164,"line":165},[162,12381,5068],{"class":172},[162,12383,5071],{"class":179},[162,12385,12386,12388,12390,12392],{"class":164,"line":197},[162,12387,5076],{"class":172},[162,12389,5079],{"class":172},[162,12391,5083],{"class":5082},[162,12393,4433],{"class":168},[162,12395,12396,12398],{"class":164,"line":228},[162,12397,5068],{"class":172},[162,12399,10853],{"class":179},[162,12401,12402,12404],{"class":164,"line":252},[162,12403,5068],{"class":172},[162,12405,12406],{"class":179},"\u003Cctime>\n",[162,12408,12409],{"class":164,"line":328},[162,12410,11642],{"class":361},[162,12412,12413,12415],{"class":164,"line":466},[162,12414,10863],{"class":172},[162,12416,10866],{"class":5082},[162,12418,12419],{"class":164,"line":471},[162,12420,4685],{"class":168},[162,12422,12423],{"class":164,"line":687},[162,12424,12425],{"class":168},"    string sName;\n",[162,12427,12428,12430],{"class":164,"line":692},[162,12429,5103],{"class":172},[162,12431,10901],{"class":168},[162,12433,12434,12436],{"class":164,"line":698},[162,12435,5103],{"class":172},[162,12437,10913],{"class":168},[162,12439,12440],{"class":164,"line":2955},[162,12441,7108],{"class":168},[162,12443,12444],{"class":164,"line":2960},[162,12445,11679],{"class":361},[162,12447,12448,12450],{"class":164,"line":2971},[162,12449,10863],{"class":172},[162,12451,11686],{"class":5082},[162,12453,12454],{"class":164,"line":2984},[162,12455,4685],{"class":168},[162,12457,12458],{"class":164,"line":2989},[162,12459,12460],{"class":168},"    string tName;\n",[162,12462,12463],{"class":164,"line":3011},[162,12464,12465],{"class":361},"    \u002F\u002F学生数组\n",[162,12467,12468,12470,12472,12475,12477],{"class":164,"line":3022},[162,12469,10999],{"class":172},[162,12471,11002],{"class":5082},[162,12473,12474],{"class":168}," sArray[",[162,12476,637],{"class":207},[162,12478,7799],{"class":168},[162,12480,12481],{"class":164,"line":3027},[162,12482,7108],{"class":168},[162,12484,12485],{"class":164,"line":3046},[162,12486,12487],{"class":361},"\u002F\u002F给老师和学生赋值的函数\n",[162,12489,12490,12492,12495,12497,12499,12502,12505,12508,12510,12512],{"class":164,"line":3052},[162,12491,8471],{"class":172},[162,12493,12494],{"class":5082}," allocateSpace",[162,12496,604],{"class":168},[162,12498,10863],{"class":172},[162,12500,12501],{"class":5082}," Teacher",[162,12503,12504],{"class":671}," tArray",[162,12506,12507],{"class":168},"[],",[162,12509,3319],{"class":172},[162,12511,949],{"class":671},[162,12513,434],{"class":168},[162,12515,12516],{"class":164,"line":3057},[162,12517,4685],{"class":168},[162,12519,12520,12523,12525,12528],{"class":164,"line":3072},[162,12521,12522],{"class":168},"    string nameSeed",[162,12524,173],{"class":172},[162,12526,12527],{"class":179},"\"ABCDE\"",[162,12529,4433],{"class":168},[162,12531,12532,12534,12536,12538,12540,12542,12544,12547,12549,12552,12554],{"class":164,"line":3077},[162,12533,6315],{"class":172},[162,12535,1003],{"class":168},[162,12537,3319],{"class":172},[162,12539,2642],{"class":168},[162,12541,173],{"class":172},[162,12543,2717],{"class":207},[162,12545,12546],{"class":168},"; i ",[162,12548,4187],{"class":172},[162,12550,12551],{"class":168}," len; i",[162,12553,5410],{"class":172},[162,12555,434],{"class":168},[162,12557,12558],{"class":164,"line":3100},[162,12559,5148],{"class":168},[162,12561,12562,12565,12567,12570],{"class":164,"line":3140},[162,12563,12564],{"class":168},"        tArray[i].tName ",[162,12566,173],{"class":172},[162,12568,12569],{"class":179}," \"Teacher_\"",[162,12571,4433],{"class":168},[162,12573,12574,12576,12578],{"class":164,"line":4878},[162,12575,12564],{"class":168},[162,12577,926],{"class":172},[162,12579,12580],{"class":168},"nameSeed[i];\n",[162,12582,12583],{"class":164,"line":4883},[162,12584,301],{"emptyLinePlaceholder":300},[162,12586,12587],{"class":164,"line":4897},[162,12588,12589],{"class":361},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[162,12591,12592,12594,12596,12598,12601,12603,12605,12608,12610,12612,12615,12617],{"class":164,"line":4902},[162,12593,6517],{"class":172},[162,12595,1003],{"class":168},[162,12597,3319],{"class":172},[162,12599,12600],{"class":168}," j ",[162,12602,173],{"class":172},[162,12604,2717],{"class":207},[162,12606,12607],{"class":168},"; j ",[162,12609,4187],{"class":172},[162,12611,5266],{"class":207},[162,12613,12614],{"class":168},"; j",[162,12616,5410],{"class":172},[162,12618,434],{"class":168},[162,12620,12621],{"class":164,"line":5694},[162,12622,5627],{"class":168},[162,12624,12625,12628,12630,12633],{"class":164,"line":5708},[162,12626,12627],{"class":168},"            tArray[i].sArray[j].sName ",[162,12629,173],{"class":172},[162,12631,12632],{"class":179}," \"Student_\"",[162,12634,4433],{"class":168},[162,12636,12637,12639,12641],{"class":164,"line":5716},[162,12638,12627],{"class":168},[162,12640,926],{"class":172},[162,12642,12643],{"class":168}," nameSeed[j];\n",[162,12645,12646,12649,12652,12654,12656,12658,12660,12662,12664,12666,12668],{"class":164,"line":5721},[162,12647,12648],{"class":172},"            int",[162,12650,12651],{"class":168}," random",[162,12653,173],{"class":172},[162,12655,5541],{"class":5082},[162,12657,5544],{"class":168},[162,12659,2708],{"class":172},[162,12661,4184],{"class":207},[162,12663,3771],{"class":172},[162,12665,3693],{"class":207},[162,12667,3367],{"class":168},[162,12669,12670],{"class":361},"\u002F\u002F40~99\n",[162,12672,12673,12676,12678,12680],{"class":164,"line":5727},[162,12674,12675],{"class":168},"            tArray[i].sArray[j].age ",[162,12677,173],{"class":172},[162,12679,12053],{"class":207},[162,12681,4433],{"class":168},[162,12683,12684,12687,12689],{"class":164,"line":5733},[162,12685,12686],{"class":168},"            tArray[i].sArray[j].score ",[162,12688,173],{"class":172},[162,12690,12691],{"class":168}," random;\n",[162,12693,12694],{"class":164,"line":5738},[162,12695,5646],{"class":168},[162,12697,12698],{"class":164,"line":11052},[162,12699,5305],{"class":168},[162,12701,12702],{"class":164,"line":11076},[162,12703,1498],{"class":168},[162,12705,12706],{"class":164,"line":11081},[162,12707,12708],{"class":361},"\u002F\u002F打印所有信息的函数\n",[162,12710,12711,12713,12716,12718,12720,12722,12724,12727,12729,12731],{"class":164,"line":11087},[162,12712,8471],{"class":172},[162,12714,12715],{"class":5082}," printInfo",[162,12717,604],{"class":168},[162,12719,10863],{"class":172},[162,12721,12501],{"class":5082},[162,12723,12504],{"class":671},[162,12725,12726],{"class":168},"[], ",[162,12728,3319],{"class":172},[162,12730,949],{"class":671},[162,12732,434],{"class":168},[162,12734,12735],{"class":164,"line":11114},[162,12736,4685],{"class":168},[162,12738,12739,12741,12743,12745,12747,12749,12751,12753,12755,12757,12759],{"class":164,"line":11119},[162,12740,6315],{"class":172},[162,12742,1003],{"class":168},[162,12744,3319],{"class":172},[162,12746,2642],{"class":168},[162,12748,173],{"class":172},[162,12750,2717],{"class":207},[162,12752,12546],{"class":168},[162,12754,4187],{"class":172},[162,12756,12551],{"class":168},[162,12758,5410],{"class":172},[162,12760,434],{"class":168},[162,12762,12763],{"class":164,"line":11125},[162,12764,5148],{"class":168},[162,12766,12767,12770,12772,12775,12777,12780,12782],{"class":164,"line":11137},[162,12768,12769],{"class":168},"        cout ",[162,12771,4316],{"class":172},[162,12773,12774],{"class":179}," \"Teacher: \"",[162,12776,4584],{"class":172},[162,12778,12779],{"class":168}," tArray[i].tName ",[162,12781,4316],{"class":172},[162,12783,11943],{"class":168},[162,12785,12786,12788,12790,12792,12794,12796,12798,12800,12802,12804,12806,12808],{"class":164,"line":11149},[162,12787,6517],{"class":172},[162,12789,1003],{"class":168},[162,12791,3319],{"class":172},[162,12793,12600],{"class":168},[162,12795,173],{"class":172},[162,12797,2717],{"class":207},[162,12799,12607],{"class":168},[162,12801,4187],{"class":172},[162,12803,5266],{"class":207},[162,12805,12614],{"class":168},[162,12807,5410],{"class":172},[162,12809,434],{"class":168},[162,12811,12812],{"class":164,"line":11161},[162,12813,5627],{"class":168},[162,12815,12817,12820,12822,12825,12827,12830,12832,12835,12837],{"class":164,"line":12816},47,[162,12818,12819],{"class":168},"            cout ",[162,12821,4316],{"class":172},[162,12823,12824],{"class":179}," \"",[162,12826,4373],{"class":207},[162,12828,12829],{"class":179},"Student: \"",[162,12831,4584],{"class":172},[162,12833,12834],{"class":168}," tArray[i].sArray[j].sName",[162,12836,4316],{"class":172},[162,12838,4338],{"class":168},[162,12840,12842,12844,12846,12848,12850,12853,12855,12858,12860],{"class":164,"line":12841},48,[162,12843,12819],{"class":168},[162,12845,4316],{"class":172},[162,12847,12824],{"class":179},[162,12849,4373],{"class":207},[162,12851,12852],{"class":179},"Age: \"",[162,12854,4584],{"class":172},[162,12856,12857],{"class":168}," tArray[i].sArray[j].age ",[162,12859,4316],{"class":172},[162,12861,11943],{"class":168},[162,12863,12865,12867,12869,12871,12873,12876,12878,12881,12883],{"class":164,"line":12864},49,[162,12866,12819],{"class":168},[162,12868,4316],{"class":172},[162,12870,12824],{"class":179},[162,12872,4373],{"class":207},[162,12874,12875],{"class":179},"Score: \"",[162,12877,4584],{"class":172},[162,12879,12880],{"class":168}," tArray[i].sArray[j].score ",[162,12882,4316],{"class":172},[162,12884,12885],{"class":168}," endl;   \n",[162,12887,12889],{"class":164,"line":12888},50,[162,12890,5646],{"class":168},[162,12892,12894],{"class":164,"line":12893},51,[162,12895,5305],{"class":168},[162,12897,12899],{"class":164,"line":12898},52,[162,12900,1498],{"class":168},[162,12902,12904,12906,12908],{"class":164,"line":12903},53,[162,12905,3319],{"class":172},[162,12907,5092],{"class":5082},[162,12909,1526],{"class":168},[162,12911,12913],{"class":164,"line":12912},54,[162,12914,4685],{"class":168},[162,12916,12918],{"class":164,"line":12917},55,[162,12919,12920],{"class":361},"    \u002F\u002F随机数种子\n",[162,12922,12924,12926,12928,12930,12932,12934,12936,12938,12940],{"class":164,"line":12923},56,[162,12925,5491],{"class":5082},[162,12927,5494],{"class":168},[162,12929,5497],{"class":172},[162,12931,5500],{"class":172},[162,12933,3720],{"class":168},[162,12935,5505],{"class":5082},[162,12937,604],{"class":168},[162,12939,5510],{"class":207},[162,12941,5513],{"class":168},[162,12943,12945],{"class":164,"line":12944},57,[162,12946,12947],{"class":361},"    \u002F\u002F1.创建3名老师的数组\n",[162,12949,12951,12953,12955,12958,12960],{"class":164,"line":12950},58,[162,12952,10999],{"class":172},[162,12954,12501],{"class":5082},[162,12956,12957],{"class":168}," tArray[",[162,12959,218],{"class":207},[162,12961,7799],{"class":168},[162,12963,12965],{"class":164,"line":12964},59,[162,12966,12967],{"class":361},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[162,12969,12971,12973,12976,12978,12981,12984,12986,12988,12991,12993],{"class":164,"line":12970},60,[162,12972,5103],{"class":172},[162,12974,12975],{"class":168}," len ",[162,12977,173],{"class":172},[162,12979,12980],{"class":172}," sizeof",[162,12982,12983],{"class":168},"(tArray) ",[162,12985,946],{"class":172},[162,12987,12980],{"class":172},[162,12989,12990],{"class":168},"(tArray[",[162,12992,312],{"class":207},[162,12994,6969],{"class":168},[162,12996,12998,13001],{"class":164,"line":12997},61,[162,12999,13000],{"class":5082},"    allocateSpace",[162,13002,13003],{"class":168},"(tArray, len);\n",[162,13005,13007],{"class":164,"line":13006},62,[162,13008,13009],{"class":361},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[162,13011,13013,13016],{"class":164,"line":13012},63,[162,13014,13015],{"class":5082},"    printInfo",[162,13017,13003],{"class":168},[162,13019,13021],{"class":164,"line":13020},64,[162,13022,301],{"emptyLinePlaceholder":300},[162,13024,13026],{"class":164,"line":13025},65,[162,13027,1498],{"class":168},[1452,13029,13030],{"start":197},[1455,13031,13032,13035],{},[3453,13033,13034],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,13037,13038],{},"五名英雄信息如下：",[153,13040,13044],{"className":13041,"code":13042,"language":13043,"meta":158,"style":158},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[71,13045,13046,13064,13081,13098,13115],{"__ignoreMap":158},[162,13047,13048,13050,13053,13055,13057,13059,13062],{"class":164,"line":165},[162,13049,8026],{"class":168},[162,13051,13052],{"class":179},"\"刘备\"",[162,13054,3670],{"class":168},[162,13056,4057],{"class":207},[162,13058,3670],{"class":168},[162,13060,13061],{"class":179},"\"男\"",[162,13063,2061],{"class":168},[162,13065,13066,13068,13071,13073,13075,13077,13079],{"class":164,"line":197},[162,13067,8026],{"class":168},[162,13069,13070],{"class":179},"\"关羽\"",[162,13072,3670],{"class":168},[162,13074,4032],{"class":207},[162,13076,3670],{"class":168},[162,13078,13061],{"class":179},[162,13080,2061],{"class":168},[162,13082,13083,13085,13088,13090,13092,13094,13096],{"class":164,"line":228},[162,13084,8026],{"class":168},[162,13086,13087],{"class":179},"\"张飞\"",[162,13089,3670],{"class":168},[162,13091,1011],{"class":207},[162,13093,3670],{"class":168},[162,13095,13061],{"class":179},[162,13097,2061],{"class":168},[162,13099,13100,13102,13105,13107,13109,13111,13113],{"class":164,"line":252},[162,13101,8026],{"class":168},[162,13103,13104],{"class":179},"\"赵云\"",[162,13106,3670],{"class":168},[162,13108,4008],{"class":207},[162,13110,3670],{"class":168},[162,13112,13061],{"class":179},[162,13114,2061],{"class":168},[162,13116,13117,13119,13122,13124,13126,13128,13131],{"class":164,"line":328},[162,13118,8026],{"class":168},[162,13120,13121],{"class":179},"\"貂蝉\"",[162,13123,3670],{"class":168},[162,13125,2110],{"class":207},[162,13127,3670],{"class":168},[162,13129,13130],{"class":179},"\"女\"",[162,13132,2061],{"class":168},[19,13134,13135],{},"代码：",[153,13137,13139],{"className":3305,"code":13138,"language":3307,"meta":158,"style":158},"#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",[71,13140,13141,13147,13157,13163,13170,13174,13178,13184,13189,13193,13198,13221,13225,13250,13254,13287,13292,13321,13326,13341,13367,13387,13392,13397,13401,13405,13410,13432,13436,13460,13464,13526,13530,13534,13542,13546,13551,13562,13566,13582,13598,13614,13630,13646,13650,13670,13691,13696,13709,13716,13721,13727,13732,13745,13751],{"__ignoreMap":158},[162,13142,13143,13145],{"class":164,"line":165},[162,13144,5068],{"class":172},[162,13146,5071],{"class":179},[162,13148,13149,13151,13153,13155],{"class":164,"line":197},[162,13150,5076],{"class":172},[162,13152,5079],{"class":172},[162,13154,5083],{"class":5082},[162,13156,4433],{"class":168},[162,13158,13159,13161],{"class":164,"line":228},[162,13160,5068],{"class":172},[162,13162,10853],{"class":179},[162,13164,13165,13167],{"class":164,"line":252},[162,13166,10863],{"class":172},[162,13168,13169],{"class":5082}," Sanguo\n",[162,13171,13172],{"class":164,"line":328},[162,13173,4685],{"class":168},[162,13175,13176],{"class":164,"line":466},[162,13177,10889],{"class":168},[162,13179,13180,13182],{"class":164,"line":471},[162,13181,5103],{"class":172},[162,13183,10901],{"class":168},[162,13185,13186],{"class":164,"line":687},[162,13187,13188],{"class":168},"    string gender;\n",[162,13190,13191],{"class":164,"line":692},[162,13192,7108],{"class":168},[162,13194,13195],{"class":164,"line":698},[162,13196,13197],{"class":361},"\u002F\u002F定义排序函数\n",[162,13199,13200,13202,13204,13206,13209,13211,13213,13215,13217,13219],{"class":164,"line":2955},[162,13201,8471],{"class":172},[162,13203,10422],{"class":5082},[162,13205,604],{"class":168},[162,13207,13208],{"class":5082},"Sanguo",[162,13210,9624],{"class":172},[162,13212,3979],{"class":671},[162,13214,3670],{"class":168},[162,13216,3319],{"class":172},[162,13218,949],{"class":671},[162,13220,434],{"class":168},[162,13222,13223],{"class":164,"line":2960},[162,13224,4685],{"class":168},[162,13226,13227,13229,13231,13233,13235,13237,13239,13241,13243,13246,13248],{"class":164,"line":2971},[162,13228,6315],{"class":172},[162,13230,604],{"class":168},[162,13232,3319],{"class":172},[162,13234,6147],{"class":168},[162,13236,173],{"class":172},[162,13238,312],{"class":207},[162,13240,6154],{"class":168},[162,13242,4187],{"class":172},[162,13244,13245],{"class":168},"len;i",[162,13247,5410],{"class":172},[162,13249,434],{"class":168},[162,13251,13252],{"class":164,"line":2984},[162,13253,5148],{"class":168},[162,13255,13256,13259,13261,13263,13265,13267,13269,13271,13273,13275,13277,13279,13281,13283,13285],{"class":164,"line":2989},[162,13257,13258],{"class":172},"     for",[162,13260,1003],{"class":168},[162,13262,3319],{"class":172},[162,13264,6524],{"class":168},[162,13266,173],{"class":172},[162,13268,312],{"class":207},[162,13270,6531],{"class":168},[162,13272,4187],{"class":172},[162,13274,607],{"class":168},[162,13276,353],{"class":172},[162,13278,208],{"class":207},[162,13280,353],{"class":172},[162,13282,6664],{"class":168},[162,13284,5410],{"class":172},[162,13286,434],{"class":168},[162,13288,13289],{"class":164,"line":3011},[162,13290,13291],{"class":168},"     {\n",[162,13293,13294,13297,13300,13302,13305,13307,13310,13312,13314,13316,13318],{"class":164,"line":3022},[162,13295,13296],{"class":172},"         if",[162,13298,13299],{"class":168}," ((s",[162,13301,3771],{"class":172},[162,13303,13304],{"class":168},"j)->age ",[162,13306,3000],{"class":172},[162,13308,13309],{"class":168}," (s",[162,13311,3771],{"class":172},[162,13313,3757],{"class":168},[162,13315,3771],{"class":172},[162,13317,208],{"class":207},[162,13319,13320],{"class":168},")->age)\n",[162,13322,13323],{"class":164,"line":3027},[162,13324,13325],{"class":168},"         {\n",[162,13327,13328,13331,13333,13336,13338],{"class":164,"line":3046},[162,13329,13330],{"class":168},"             Sanguo temp",[162,13332,10259],{"class":172},[162,13334,13335],{"class":168},"(s",[162,13337,3771],{"class":172},[162,13339,13340],{"class":168},"j);\n",[162,13342,13343,13346,13348,13350,13353,13355,13357,13359,13361,13363,13365],{"class":164,"line":3052},[162,13344,13345],{"class":172},"             *",[162,13347,13335],{"class":168},[162,13349,3771],{"class":172},[162,13351,13352],{"class":168},"j)",[162,13354,10259],{"class":172},[162,13356,13335],{"class":168},[162,13358,3771],{"class":172},[162,13360,3757],{"class":168},[162,13362,3771],{"class":172},[162,13364,208],{"class":207},[162,13366,5836],{"class":168},[162,13368,13369,13371,13373,13375,13377,13379,13381,13383,13385],{"class":164,"line":3057},[162,13370,13345],{"class":172},[162,13372,13335],{"class":168},[162,13374,3771],{"class":172},[162,13376,3757],{"class":168},[162,13378,3771],{"class":172},[162,13380,208],{"class":207},[162,13382,3720],{"class":168},[162,13384,173],{"class":172},[162,13386,7392],{"class":168},[162,13388,13389],{"class":164,"line":3072},[162,13390,13391],{"class":168},"         }\n",[162,13393,13394],{"class":164,"line":3077},[162,13395,13396],{"class":168},"     }\n",[162,13398,13399],{"class":164,"line":3100},[162,13400,5305],{"class":168},[162,13402,13403],{"class":164,"line":3140},[162,13404,1498],{"class":168},[162,13406,13407],{"class":164,"line":4878},[162,13408,13409],{"class":361},"\u002F\u002F定义打印函数\n",[162,13411,13412,13414,13416,13418,13420,13422,13424,13426,13428,13430],{"class":164,"line":4883},[162,13413,8471],{"class":172},[162,13415,12715],{"class":5082},[162,13417,604],{"class":168},[162,13419,13208],{"class":5082},[162,13421,9624],{"class":172},[162,13423,3979],{"class":671},[162,13425,3670],{"class":168},[162,13427,3319],{"class":172},[162,13429,949],{"class":671},[162,13431,434],{"class":168},[162,13433,13434],{"class":164,"line":4897},[162,13435,4685],{"class":168},[162,13437,13438,13440,13442,13444,13446,13448,13450,13452,13454,13456,13458],{"class":164,"line":4902},[162,13439,6315],{"class":172},[162,13441,1003],{"class":168},[162,13443,3319],{"class":172},[162,13445,6147],{"class":168},[162,13447,173],{"class":172},[162,13449,312],{"class":207},[162,13451,6154],{"class":168},[162,13453,4187],{"class":172},[162,13455,13245],{"class":168},[162,13457,5410],{"class":172},[162,13459,434],{"class":168},[162,13461,13462],{"class":164,"line":5694},[162,13463,5148],{"class":168},[162,13465,13466,13468,13470,13472,13474,13477,13479,13481,13483,13486,13488,13490,13492,13495,13497,13499,13501,13504,13506,13508,13510,13513,13515,13517,13519,13522,13524],{"class":164,"line":5708},[162,13467,6565],{"class":168},[162,13469,4316],{"class":172},[162,13471,979],{"class":179},[162,13473,4373],{"class":207},[162,13475,13476],{"class":179},"姓名：\"",[162,13478,4316],{"class":172},[162,13480,13335],{"class":168},[162,13482,3771],{"class":172},[162,13484,13485],{"class":168},"i)->name",[162,13487,4316],{"class":172},[162,13489,979],{"class":179},[162,13491,4373],{"class":207},[162,13493,13494],{"class":179},"年龄：\"",[162,13496,4316],{"class":172},[162,13498,13335],{"class":168},[162,13500,3771],{"class":172},[162,13502,13503],{"class":168},"i)->age",[162,13505,4316],{"class":172},[162,13507,979],{"class":179},[162,13509,4373],{"class":207},[162,13511,13512],{"class":179},"性别：\"",[162,13514,4316],{"class":172},[162,13516,13335],{"class":168},[162,13518,3771],{"class":172},[162,13520,13521],{"class":168},"i)->gender",[162,13523,4316],{"class":172},[162,13525,4338],{"class":168},[162,13527,13528],{"class":164,"line":5716},[162,13529,5305],{"class":168},[162,13531,13532],{"class":164,"line":5721},[162,13533,1498],{"class":168},[162,13535,13536,13538,13540],{"class":164,"line":5727},[162,13537,3319],{"class":172},[162,13539,5092],{"class":5082},[162,13541,1526],{"class":168},[162,13543,13544],{"class":164,"line":5733},[162,13545,4685],{"class":168},[162,13547,13548],{"class":164,"line":5738},[162,13549,13550],{"class":361},"    \u002F\u002F定义结构体变量\n",[162,13552,13553,13556,13558,13560],{"class":164,"line":11052},[162,13554,13555],{"class":168},"    Sanguo s1[",[162,13557,637],{"class":207},[162,13559,3120],{"class":168},[162,13561,8017],{"class":172},[162,13563,13564],{"class":164,"line":11076},[162,13565,5148],{"class":168},[162,13567,13568,13570,13572,13574,13576,13578,13580],{"class":164,"line":11081},[162,13569,8026],{"class":168},[162,13571,13052],{"class":179},[162,13573,3670],{"class":168},[162,13575,4057],{"class":207},[162,13577,3670],{"class":168},[162,13579,13061],{"class":179},[162,13581,2061],{"class":168},[162,13583,13584,13586,13588,13590,13592,13594,13596],{"class":164,"line":11087},[162,13585,8026],{"class":168},[162,13587,13070],{"class":179},[162,13589,3670],{"class":168},[162,13591,4032],{"class":207},[162,13593,3670],{"class":168},[162,13595,13061],{"class":179},[162,13597,2061],{"class":168},[162,13599,13600,13602,13604,13606,13608,13610,13612],{"class":164,"line":11114},[162,13601,8026],{"class":168},[162,13603,13087],{"class":179},[162,13605,3670],{"class":168},[162,13607,1011],{"class":207},[162,13609,3670],{"class":168},[162,13611,13061],{"class":179},[162,13613,2061],{"class":168},[162,13615,13616,13618,13620,13622,13624,13626,13628],{"class":164,"line":11119},[162,13617,8026],{"class":168},[162,13619,13104],{"class":179},[162,13621,3670],{"class":168},[162,13623,4008],{"class":207},[162,13625,3670],{"class":168},[162,13627,13061],{"class":179},[162,13629,2061],{"class":168},[162,13631,13632,13634,13636,13638,13640,13642,13644],{"class":164,"line":11125},[162,13633,8026],{"class":168},[162,13635,13121],{"class":179},[162,13637,3670],{"class":168},[162,13639,2110],{"class":207},[162,13641,3670],{"class":168},[162,13643,13130],{"class":179},[162,13645,2061],{"class":168},[162,13647,13648],{"class":164,"line":11137},[162,13649,8059],{"class":168},[162,13651,13652,13654,13656,13658,13661,13663,13666,13668],{"class":164,"line":11149},[162,13653,5103],{"class":172},[162,13655,949],{"class":168},[162,13657,7315],{"class":172},[162,13659,13660],{"class":168},"(s1)",[162,13662,7321],{"class":172},[162,13664,13665],{"class":168},"(s1[",[162,13667,312],{"class":207},[162,13669,6969],{"class":168},[162,13671,13672,13675,13677,13679,13681,13684,13687,13689],{"class":164,"line":11161},[162,13673,13674],{"class":168},"    Sanguo ",[162,13676,3745],{"class":172},[162,13678,1518],{"class":168},[162,13680,173],{"class":172},[162,13682,13683],{"class":172}," &",[162,13685,13686],{"class":168},"s1[",[162,13688,312],{"class":207},[162,13690,7799],{"class":168},[162,13692,13693],{"class":164,"line":12816},[162,13694,13695],{"class":361},"    \u002F\u002F排序前：\n",[162,13697,13698,13700,13702,13705,13707],{"class":164,"line":12841},[162,13699,9635],{"class":168},[162,13701,4316],{"class":172},[162,13703,13704],{"class":179}," \"排序前：\"",[162,13706,4584],{"class":172},[162,13708,11943],{"class":168},[162,13710,13711,13713],{"class":164,"line":12864},[162,13712,13015],{"class":5082},[162,13714,13715],{"class":168},"(s,len);\n",[162,13717,13718],{"class":164,"line":12888},[162,13719,13720],{"class":361},"    \u002F\u002F调用排序函数\n",[162,13722,13723,13725],{"class":164,"line":12893},[162,13724,10702],{"class":5082},[162,13726,13715],{"class":168},[162,13728,13729],{"class":164,"line":12898},[162,13730,13731],{"class":361},"    \u002F\u002F排序后\n",[162,13733,13734,13736,13738,13741,13743],{"class":164,"line":12903},[162,13735,9635],{"class":168},[162,13737,4316],{"class":172},[162,13739,13740],{"class":179}," \"排序后：\"",[162,13742,4584],{"class":172},[162,13744,11943],{"class":168},[162,13746,13747,13749],{"class":164,"line":12912},[162,13748,13015],{"class":5082},[162,13750,13715],{"class":168},[162,13752,13753],{"class":164,"line":12917},[162,13754,1498],{"class":168},[19,13756,13757,13758,2747],{},"注意：使用指针时直接用传首地址**&s",[162,13759,312],{},[3219,13761,13762],{},"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":158,"searchDepth":197,"depth":197,"links":13764},[13765,13766,13767,13768,13769,13770,13771],{"id":10807,"depth":197,"text":10808},{"id":11169,"depth":197,"text":11170},{"id":11438,"depth":197,"text":11439},{"id":11603,"depth":197,"text":11604},{"id":11818,"depth":197,"text":11819},{"id":12138,"depth":197,"text":12139},{"id":12366,"depth":197,"text":12367},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":10796,"description":10804},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":13778,"title":13779,"body":13780,"description":158,"extension":3242,"meta":15121,"navigation":300,"path":15122,"seo":15123,"stem":15124,"__hash__":15125},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":13781,"toc":15115},[13782,13785,13789,13795,13809,13814,13817,13821,13828,13834,13837,13844,13850,13855,13858,13861,13864,14426,14429,14443,14447,14452,14468,14608,14611,14617,14620,14625,14633,14741,14744,14749,14752,14757,14760,14766,14769,15112],[10,13783,13779],{"id":13784},"_5程序内存模型",[14,13786,13788],{"id":13787},"_51内存分区模型","5.1内存分区模型",[19,13790,13791,13792],{},"C++程序在执行时，将内存大方向划分为",[3453,13793,13794],{},"4个区域",[4279,13796,13797,13800,13803,13806],{},[1455,13798,13799],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[1455,13801,13802],{},"全局区：存放全局变量和静态变量以及常量",[1455,13804,13805],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[1455,13807,13808],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,13810,13811],{},[3453,13812,13813],{},"内存四区意义：",[19,13815,13816],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[3284,13818,13820],{"id":13819},"_511程序运行前","5.1.1程序运行前",[19,13822,13823,13824,13827],{},"​\t在程序编译后，生成了exe可执行程序，",[3453,13825,13826],{},"未执行该程序前","分为两个区域",[19,13829,13830,13831],{},"​\t",[3453,13832,13833],{},"代码区：",[19,13835,13836],{},"​\t\t存放 CPU 执行的机器指令",[19,13838,13839,13840,13843],{},"​\t\t代码区是",[3453,13841,13842],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,13845,13839,13846,13849],{},[3453,13847,13848],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,13851,13830,13852],{},[3453,13853,13854],{},"全局区：",[19,13856,13857],{},"​\t\t全局变量和静态变量存放在此.",[19,13859,13860],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,13862,13863],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[153,13865,13867],{"className":3305,"code":13866,"language":3307,"meta":158,"style":158},"\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",[71,13868,13869,13874,13887,13900,13904,13909,13924,13939,13943,13952,13956,13961,13974,13987,13991,13996,14021,14046,14050,14077,14103,14107,14112,14128,14143,14147,14173,14199,14203,14228,14253,14257,14283,14309,14313,14329,14344,14370,14396,14400,14410,14414,14422],{"__ignoreMap":158},[162,13870,13871],{"class":164,"line":165},[162,13872,13873],{"class":361},"\u002F\u002F全局变量\n",[162,13875,13876,13878,13881,13883,13885],{"class":164,"line":197},[162,13877,3319],{"class":172},[162,13879,13880],{"class":168}," g_a ",[162,13882,173],{"class":172},[162,13884,5156],{"class":207},[162,13886,4433],{"class":168},[162,13888,13889,13891,13894,13896,13898],{"class":164,"line":228},[162,13890,3319],{"class":172},[162,13892,13893],{"class":168}," g_b ",[162,13895,173],{"class":172},[162,13897,5156],{"class":207},[162,13899,4433],{"class":168},[162,13901,13902],{"class":164,"line":252},[162,13903,301],{"emptyLinePlaceholder":300},[162,13905,13906],{"class":164,"line":328},[162,13907,13908],{"class":361},"\u002F\u002F全局常量\n",[162,13910,13911,13913,13915,13918,13920,13922],{"class":164,"line":466},[162,13912,9898],{"class":172},[162,13914,5500],{"class":172},[162,13916,13917],{"class":168}," c_g_a ",[162,13919,173],{"class":172},[162,13921,5156],{"class":207},[162,13923,4433],{"class":168},[162,13925,13926,13928,13930,13933,13935,13937],{"class":164,"line":471},[162,13927,9898],{"class":172},[162,13929,5500],{"class":172},[162,13931,13932],{"class":168}," c_g_b ",[162,13934,173],{"class":172},[162,13936,5156],{"class":207},[162,13938,4433],{"class":168},[162,13940,13941],{"class":164,"line":687},[162,13942,301],{"emptyLinePlaceholder":300},[162,13944,13945,13947,13949],{"class":164,"line":692},[162,13946,3319],{"class":172},[162,13948,5092],{"class":5082},[162,13950,13951],{"class":168},"() {\n",[162,13953,13954],{"class":164,"line":698},[162,13955,301],{"emptyLinePlaceholder":300},[162,13957,13958],{"class":164,"line":2955},[162,13959,13960],{"class":361},"    \u002F\u002F局部变量\n",[162,13962,13963,13965,13968,13970,13972],{"class":164,"line":2960},[162,13964,5103],{"class":172},[162,13966,13967],{"class":168}," a ",[162,13969,173],{"class":172},[162,13971,5156],{"class":207},[162,13973,4433],{"class":168},[162,13975,13976,13978,13981,13983,13985],{"class":164,"line":2971},[162,13977,5103],{"class":172},[162,13979,13980],{"class":168}," b ",[162,13982,173],{"class":172},[162,13984,5156],{"class":207},[162,13986,4433],{"class":168},[162,13988,13989],{"class":164,"line":2984},[162,13990,301],{"emptyLinePlaceholder":300},[162,13992,13993],{"class":164,"line":2989},[162,13994,13995],{"class":361},"    \u002F\u002F打印地址\n",[162,13997,13998,14000,14002,14005,14007,14009,14011,14013,14015,14017,14019],{"class":164,"line":3011},[162,13999,9635],{"class":168},[162,14001,4316],{"class":172},[162,14003,14004],{"class":179}," \"局部变量a地址为： \"",[162,14006,4584],{"class":172},[162,14008,1003],{"class":168},[162,14010,3319],{"class":172},[162,14012,3720],{"class":168},[162,14014,1667],{"class":172},[162,14016,1616],{"class":168},[162,14018,4316],{"class":172},[162,14020,11943],{"class":168},[162,14022,14023,14025,14027,14030,14032,14034,14036,14038,14040,14042,14044],{"class":164,"line":3022},[162,14024,9635],{"class":168},[162,14026,4316],{"class":172},[162,14028,14029],{"class":179}," \"局部变量b地址为： \"",[162,14031,4584],{"class":172},[162,14033,1003],{"class":168},[162,14035,3319],{"class":172},[162,14037,3720],{"class":168},[162,14039,1667],{"class":172},[162,14041,1637],{"class":168},[162,14043,4316],{"class":172},[162,14045,11943],{"class":168},[162,14047,14048],{"class":164,"line":3027},[162,14049,301],{"emptyLinePlaceholder":300},[162,14051,14052,14054,14056,14059,14061,14064,14066,14068,14070,14073,14075],{"class":164,"line":3046},[162,14053,9635],{"class":168},[162,14055,4316],{"class":172},[162,14057,14058],{"class":179}," \"全局变量g_a地址为： \"",[162,14060,4584],{"class":172},[162,14062,14063],{"class":168},"  (",[162,14065,3319],{"class":172},[162,14067,3720],{"class":168},[162,14069,1667],{"class":172},[162,14071,14072],{"class":168},"g_a ",[162,14074,4316],{"class":172},[162,14076,11943],{"class":168},[162,14078,14079,14081,14083,14086,14088,14090,14092,14094,14096,14099,14101],{"class":164,"line":3052},[162,14080,9635],{"class":168},[162,14082,4316],{"class":172},[162,14084,14085],{"class":179}," \"全局变量g_b地址为： \"",[162,14087,4584],{"class":172},[162,14089,14063],{"class":168},[162,14091,3319],{"class":172},[162,14093,3720],{"class":168},[162,14095,1667],{"class":172},[162,14097,14098],{"class":168},"g_b ",[162,14100,4316],{"class":172},[162,14102,11943],{"class":168},[162,14104,14105],{"class":164,"line":3057},[162,14106,301],{"emptyLinePlaceholder":300},[162,14108,14109],{"class":164,"line":3072},[162,14110,14111],{"class":361},"    \u002F\u002F静态变量\n",[162,14113,14114,14117,14119,14122,14124,14126],{"class":164,"line":3077},[162,14115,14116],{"class":172},"    static",[162,14118,5500],{"class":172},[162,14120,14121],{"class":168}," s_a ",[162,14123,173],{"class":172},[162,14125,5156],{"class":207},[162,14127,4433],{"class":168},[162,14129,14130,14132,14134,14137,14139,14141],{"class":164,"line":3100},[162,14131,14116],{"class":172},[162,14133,5500],{"class":172},[162,14135,14136],{"class":168}," s_b ",[162,14138,173],{"class":172},[162,14140,5156],{"class":207},[162,14142,4433],{"class":168},[162,14144,14145],{"class":164,"line":3140},[162,14146,301],{"emptyLinePlaceholder":300},[162,14148,14149,14151,14153,14156,14158,14160,14162,14164,14166,14169,14171],{"class":164,"line":4878},[162,14150,9635],{"class":168},[162,14152,4316],{"class":172},[162,14154,14155],{"class":179}," \"静态变量s_a地址为： \"",[162,14157,4584],{"class":172},[162,14159,1003],{"class":168},[162,14161,3319],{"class":172},[162,14163,3720],{"class":168},[162,14165,1667],{"class":172},[162,14167,14168],{"class":168},"s_a ",[162,14170,4316],{"class":172},[162,14172,11943],{"class":168},[162,14174,14175,14177,14179,14182,14184,14186,14188,14190,14192,14195,14197],{"class":164,"line":4883},[162,14176,9635],{"class":168},[162,14178,4316],{"class":172},[162,14180,14181],{"class":179}," \"静态变量s_b地址为： \"",[162,14183,4584],{"class":172},[162,14185,1003],{"class":168},[162,14187,3319],{"class":172},[162,14189,3720],{"class":168},[162,14191,1667],{"class":172},[162,14193,14194],{"class":168},"s_b ",[162,14196,4316],{"class":172},[162,14198,11943],{"class":168},[162,14200,14201],{"class":164,"line":4897},[162,14202,301],{"emptyLinePlaceholder":300},[162,14204,14205,14207,14209,14212,14214,14216,14218,14220,14222,14224,14226],{"class":164,"line":4902},[162,14206,9635],{"class":168},[162,14208,4316],{"class":172},[162,14210,14211],{"class":179}," \"字符串常量地址为： \"",[162,14213,4584],{"class":172},[162,14215,1003],{"class":168},[162,14217,3319],{"class":172},[162,14219,3720],{"class":168},[162,14221,1667],{"class":172},[162,14223,4333],{"class":179},[162,14225,4584],{"class":172},[162,14227,11943],{"class":168},[162,14229,14230,14232,14234,14236,14238,14240,14242,14244,14246,14249,14251],{"class":164,"line":5694},[162,14231,9635],{"class":168},[162,14233,4316],{"class":172},[162,14235,14211],{"class":179},[162,14237,4584],{"class":172},[162,14239,1003],{"class":168},[162,14241,3319],{"class":172},[162,14243,3720],{"class":168},[162,14245,1667],{"class":172},[162,14247,14248],{"class":179},"\"hello world1\"",[162,14250,4584],{"class":172},[162,14252,11943],{"class":168},[162,14254,14255],{"class":164,"line":5708},[162,14256,301],{"emptyLinePlaceholder":300},[162,14258,14259,14261,14263,14266,14268,14270,14272,14274,14276,14279,14281],{"class":164,"line":5716},[162,14260,9635],{"class":168},[162,14262,4316],{"class":172},[162,14264,14265],{"class":179}," \"全局常量c_g_a地址为： \"",[162,14267,4584],{"class":172},[162,14269,1003],{"class":168},[162,14271,3319],{"class":172},[162,14273,3720],{"class":168},[162,14275,1667],{"class":172},[162,14277,14278],{"class":168},"c_g_a ",[162,14280,4316],{"class":172},[162,14282,11943],{"class":168},[162,14284,14285,14287,14289,14292,14294,14296,14298,14300,14302,14305,14307],{"class":164,"line":5721},[162,14286,9635],{"class":168},[162,14288,4316],{"class":172},[162,14290,14291],{"class":179}," \"全局常量c_g_b地址为： \"",[162,14293,4584],{"class":172},[162,14295,1003],{"class":168},[162,14297,3319],{"class":172},[162,14299,3720],{"class":168},[162,14301,1667],{"class":172},[162,14303,14304],{"class":168},"c_g_b ",[162,14306,4316],{"class":172},[162,14308,11943],{"class":168},[162,14310,14311],{"class":164,"line":5727},[162,14312,301],{"emptyLinePlaceholder":300},[162,14314,14315,14318,14320,14323,14325,14327],{"class":164,"line":5733},[162,14316,14317],{"class":172},"    const",[162,14319,5500],{"class":172},[162,14321,14322],{"class":168}," c_l_a ",[162,14324,173],{"class":172},[162,14326,5156],{"class":207},[162,14328,4433],{"class":168},[162,14330,14331,14333,14335,14338,14340,14342],{"class":164,"line":5738},[162,14332,14317],{"class":172},[162,14334,5500],{"class":172},[162,14336,14337],{"class":168}," c_l_b ",[162,14339,173],{"class":172},[162,14341,5156],{"class":207},[162,14343,4433],{"class":168},[162,14345,14346,14348,14350,14353,14355,14357,14359,14361,14363,14366,14368],{"class":164,"line":11052},[162,14347,9635],{"class":168},[162,14349,4316],{"class":172},[162,14351,14352],{"class":179}," \"局部常量c_l_a地址为： \"",[162,14354,4584],{"class":172},[162,14356,1003],{"class":168},[162,14358,3319],{"class":172},[162,14360,3720],{"class":168},[162,14362,1667],{"class":172},[162,14364,14365],{"class":168},"c_l_a ",[162,14367,4316],{"class":172},[162,14369,11943],{"class":168},[162,14371,14372,14374,14376,14379,14381,14383,14385,14387,14389,14392,14394],{"class":164,"line":11076},[162,14373,9635],{"class":168},[162,14375,4316],{"class":172},[162,14377,14378],{"class":179}," \"局部常量c_l_b地址为： \"",[162,14380,4584],{"class":172},[162,14382,1003],{"class":168},[162,14384,3319],{"class":172},[162,14386,3720],{"class":168},[162,14388,1667],{"class":172},[162,14390,14391],{"class":168},"c_l_b ",[162,14393,4316],{"class":172},[162,14395,11943],{"class":168},[162,14397,14398],{"class":164,"line":11081},[162,14399,301],{"emptyLinePlaceholder":300},[162,14401,14402,14404,14406,14408],{"class":164,"line":11087},[162,14403,5421],{"class":5082},[162,14405,604],{"class":168},[162,14407,5426],{"class":179},[162,14409,5836],{"class":168},[162,14411,14412],{"class":164,"line":11114},[162,14413,301],{"emptyLinePlaceholder":300},[162,14415,14416,14418,14420],{"class":164,"line":11119},[162,14417,7203],{"class":172},[162,14419,2717],{"class":207},[162,14421,4433],{"class":168},[162,14423,14424],{"class":164,"line":11125},[162,14425,1498],{"class":168},[19,14427,14428],{},"总结：",[4279,14430,14431,14434,14437,14440],{},[1455,14432,14433],{},"c++中程序运行前分为全局区和代码区",[1455,14435,14436],{},"代码区特点是共享和只读",[1455,14438,14439],{},"全局区中存放全局变量、静态变量、常量",[1455,14441,14442],{},"常量区中存放const修饰的全局常量和字符串常量",[3284,14444,14446],{"id":14445},"_512程序运行后","5.1.2程序运行后",[1452,14448,14449],{},[1455,14450,14451],{},"栈区：",[4279,14453,14454,14461],{},[1455,14455,14456,14457,14460],{},"由编译器自动分配释放, 存放",[3453,14458,14459],{},"函数的参数值,局部变量","等",[1455,14462,14463,14464,14467],{},"注意事项：",[3453,14465,14466],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[153,14469,14471],{"className":3305,"code":14470,"language":3307,"meta":158,"style":158},"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",[71,14472,14473,14484,14488,14503,14515,14519,14523,14531,14536,14551,14569,14586,14596,14604],{"__ignoreMap":158},[162,14474,14475,14477,14479,14482],{"class":164,"line":165},[162,14476,3319],{"class":172},[162,14478,9624],{"class":172},[162,14480,14481],{"class":5082}," func",[162,14483,1526],{"class":168},[162,14485,14486],{"class":164,"line":197},[162,14487,4685],{"class":168},[162,14489,14490,14492,14494,14496,14498,14500],{"class":164,"line":228},[162,14491,5103],{"class":172},[162,14493,13967],{"class":168},[162,14495,173],{"class":172},[162,14497,5156],{"class":207},[162,14499,3367],{"class":168},[162,14501,14502],{"class":361}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[162,14504,14505,14507,14509,14512],{"class":164,"line":252},[162,14506,7203],{"class":172},[162,14508,13683],{"class":172},[162,14510,14511],{"class":168},"a;",[162,14513,14514],{"class":361}," \u002F\u002F放回局部变量的地址\n",[162,14516,14517],{"class":164,"line":328},[162,14518,1498],{"class":168},[162,14520,14521],{"class":164,"line":466},[162,14522,301],{"emptyLinePlaceholder":300},[162,14524,14525,14527,14529],{"class":164,"line":471},[162,14526,3319],{"class":172},[162,14528,5092],{"class":5082},[162,14530,13951],{"class":168},[162,14532,14533],{"class":164,"line":687},[162,14534,14535],{"class":361},"    \u002F\u002F接受func的返回值\n",[162,14537,14538,14540,14542,14545,14547,14549],{"class":164,"line":692},[162,14539,5103],{"class":172},[162,14541,9624],{"class":172},[162,14543,14544],{"class":168},"p ",[162,14546,173],{"class":172},[162,14548,14481],{"class":5082},[162,14550,8743],{"class":168},[162,14552,14553,14555,14557,14559,14561,14563,14566],{"class":164,"line":698},[162,14554,9635],{"class":168},[162,14556,4316],{"class":172},[162,14558,9624],{"class":172},[162,14560,14544],{"class":168},[162,14562,4316],{"class":172},[162,14564,14565],{"class":168}," endl;",[162,14567,14568],{"class":361}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[162,14570,14571,14573,14575,14577,14579,14581,14583],{"class":164,"line":2955},[162,14572,9635],{"class":168},[162,14574,4316],{"class":172},[162,14576,9624],{"class":172},[162,14578,14544],{"class":168},[162,14580,4316],{"class":172},[162,14582,14565],{"class":168},[162,14584,14585],{"class":361}," \u002F\u002F第二次这个数据不再保留\n",[162,14587,14588,14590,14592,14594],{"class":164,"line":2960},[162,14589,5421],{"class":5082},[162,14591,604],{"class":168},[162,14593,5426],{"class":179},[162,14595,5836],{"class":168},[162,14597,14598,14600,14602],{"class":164,"line":2971},[162,14599,7203],{"class":172},[162,14601,2717],{"class":207},[162,14603,4433],{"class":168},[162,14605,14606],{"class":164,"line":2984},[162,14607,1498],{"class":168},[19,14609,14610],{},"输出结果：",[19,14612,14613],{},[4602,14614],{"alt":14615,"src":14616},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,14618,14619],{},"总结：不要返回局部变量的地址",[1452,14621,14622],{"start":197},[1455,14623,14624],{},"堆区",[4279,14626,14627,14630],{},[1455,14628,14629],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[1455,14631,14632],{},"在c++中主要利用new在堆区开辟内存",[153,14634,14636],{"className":3305,"code":14635,"language":3307,"meta":158,"style":158},"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",[71,14637,14638,14653,14657,14662,14683,14690,14694,14702,14706,14711,14725,14737],{"__ignoreMap":158},[162,14639,14640,14642,14645,14648,14650],{"class":164,"line":165},[162,14641,3319],{"class":172},[162,14643,14644],{"class":172},"  *",[162,14646,14647],{"class":5082},"func",[162,14649,5544],{"class":168},[162,14651,14652],{"class":361},"  \u002F\u002F函数返回指针\n",[162,14654,14655],{"class":164,"line":197},[162,14656,4685],{"class":168},[162,14658,14659],{"class":164,"line":228},[162,14660,14661],{"class":361},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[162,14663,14664,14666,14668,14670,14672,14675,14677,14679,14681],{"class":164,"line":252},[162,14665,7259],{"class":172},[162,14667,9624],{"class":172},[162,14669,19],{"class":168},[162,14671,173],{"class":172},[162,14673,14674],{"class":172}," new",[162,14676,5500],{"class":172},[162,14678,604],{"class":168},[162,14680,1006],{"class":207},[162,14682,5836],{"class":168},[162,14684,14685,14687],{"class":164,"line":328},[162,14686,7493],{"class":172},[162,14688,14689],{"class":168}," p;\n",[162,14691,14692],{"class":164,"line":466},[162,14693,1498],{"class":168},[162,14695,14696,14698,14700],{"class":164,"line":471},[162,14697,3319],{"class":172},[162,14699,5092],{"class":5082},[162,14701,1526],{"class":168},[162,14703,14704],{"class":164,"line":687},[162,14705,4685],{"class":168},[162,14707,14708],{"class":164,"line":692},[162,14709,14710],{"class":361},"    \u002F\u002F在堆区开辟数据\n",[162,14712,14713,14715,14717,14719,14721,14723],{"class":164,"line":698},[162,14714,5103],{"class":172},[162,14716,9624],{"class":172},[162,14718,19],{"class":168},[162,14720,173],{"class":172},[162,14722,14647],{"class":5082},[162,14724,8743],{"class":168},[162,14726,14727,14729,14731,14733,14735],{"class":164,"line":2955},[162,14728,4690],{"class":168},[162,14730,9525],{"class":172},[162,14732,19],{"class":168},[162,14734,4316],{"class":172},[162,14736,4338],{"class":168},[162,14738,14739],{"class":164,"line":2960},[162,14740,1498],{"class":168},[19,14742,14743],{},"图片展示：",[19,14745,14746],{},[4602,14747],{"alt":14615,"src":14748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,14750,14751],{},"堆区内存由程序员管生死！！！",[1452,14753,14754],{"start":228},[1455,14755,14756],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,14758,14759],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,14761,14762,14763],{},"​语法：",[71,14764,14765],{}," new 数据类型",[19,14767,14768],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[153,14770,14772],{"className":3305,"code":14771,"language":3307,"meta":158,"style":158},"\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",[71,14773,14774,14779,14789,14793,14798,14803,14825,14829,14837,14841,14855,14867,14879,14891,14896,14901,14912,14916,14921,14929,14933,14938,14960,14986,14990,15008,15012,15038,15042,15054,15058,15063,15068,15076,15080,15084,15092,15096,15102,15108],{"__ignoreMap":158},[162,14775,14776],{"class":164,"line":165},[162,14777,14778],{"class":361},"\u002F\u002F1.new的基本语法\n",[162,14780,14781,14783,14785,14787],{"class":164,"line":197},[162,14782,3319],{"class":172},[162,14784,9624],{"class":172},[162,14786,14647],{"class":5082},[162,14788,1526],{"class":168},[162,14790,14791],{"class":164,"line":228},[162,14792,4685],{"class":168},[162,14794,14795],{"class":164,"line":252},[162,14796,14797],{"class":361},"    \u002F\u002F在堆区创建整型数据\n",[162,14799,14800],{"class":164,"line":328},[162,14801,14802],{"class":361},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[162,14804,14805,14807,14809,14811,14814,14816,14818,14820,14822],{"class":164,"line":466},[162,14806,5103],{"class":172},[162,14808,9624],{"class":172},[162,14810,19],{"class":168},[162,14812,14813],{"class":172},"=new",[162,14815,5500],{"class":172},[162,14817,604],{"class":168},[162,14819,1006],{"class":207},[162,14821,9073],{"class":168},[162,14823,14824],{"class":361},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[162,14826,14827],{"class":164,"line":471},[162,14828,1498],{"class":168},[162,14830,14831,14833,14835],{"class":164,"line":687},[162,14832,8471],{"class":172},[162,14834,8695],{"class":5082},[162,14836,1526],{"class":168},[162,14838,14839],{"class":164,"line":692},[162,14840,4685],{"class":168},[162,14842,14843,14845,14847,14849,14851,14853],{"class":164,"line":698},[162,14844,5103],{"class":172},[162,14846,9624],{"class":172},[162,14848,19],{"class":168},[162,14850,173],{"class":172},[162,14852,14647],{"class":5082},[162,14854,8743],{"class":168},[162,14856,14857,14859,14861,14863,14865],{"class":164,"line":2955},[162,14858,4690],{"class":168},[162,14860,9525],{"class":172},[162,14862,19],{"class":168},[162,14864,4316],{"class":172},[162,14866,4338],{"class":168},[162,14868,14869,14871,14873,14875,14877],{"class":164,"line":2960},[162,14870,4690],{"class":168},[162,14872,9525],{"class":172},[162,14874,19],{"class":168},[162,14876,4316],{"class":172},[162,14878,4338],{"class":168},[162,14880,14881,14883,14885,14887,14889],{"class":164,"line":2971},[162,14882,4690],{"class":168},[162,14884,9525],{"class":172},[162,14886,19],{"class":168},[162,14888,4316],{"class":172},[162,14890,4338],{"class":168},[162,14892,14893],{"class":164,"line":2984},[162,14894,14895],{"class":361},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[162,14897,14898],{"class":164,"line":2989},[162,14899,14900],{"class":361},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[162,14902,14903,14906,14909],{"class":164,"line":3011},[162,14904,14905],{"class":172},"    delete",[162,14907,14908],{"class":168}," p;",[162,14910,14911],{"class":361},"\u002F\u002F删除这块地址\n",[162,14913,14914],{"class":164,"line":3022},[162,14915,1498],{"class":168},[162,14917,14918],{"class":164,"line":3027},[162,14919,14920],{"class":361},"\u002F\u002F2.在堆区利用new开辟数组\n",[162,14922,14923,14925,14927],{"class":164,"line":3046},[162,14924,8471],{"class":172},[162,14926,8764],{"class":5082},[162,14928,1526],{"class":168},[162,14930,14931],{"class":164,"line":3052},[162,14932,4685],{"class":168},[162,14934,14935],{"class":164,"line":3057},[162,14936,14937],{"class":361},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[162,14939,14940,14942,14944,14946,14948,14950,14952,14954,14957],{"class":164,"line":3072},[162,14941,5103],{"class":172},[162,14943,9624],{"class":172},[162,14945,6993],{"class":168},[162,14947,14813],{"class":172},[162,14949,5500],{"class":172},[162,14951,4168],{"class":168},[162,14953,1006],{"class":207},[162,14955,14956],{"class":168},"];",[162,14958,14959],{"class":361},"\u002F\u002F10代表数组有10个元素\n",[162,14961,14962,14964,14966,14968,14970,14972,14974,14976,14978,14980,14982,14984],{"class":164,"line":3077},[162,14963,6315],{"class":172},[162,14965,1003],{"class":168},[162,14967,3319],{"class":172},[162,14969,6147],{"class":168},[162,14971,173],{"class":172},[162,14973,312],{"class":207},[162,14975,6154],{"class":168},[162,14977,4187],{"class":172},[162,14979,1006],{"class":207},[162,14981,6154],{"class":168},[162,14983,5410],{"class":172},[162,14985,434],{"class":168},[162,14987,14988],{"class":164,"line":3100},[162,14989,5148],{"class":168},[162,14991,14992,14995,14997,14999,15001,15003,15005],{"class":164,"line":3140},[162,14993,14994],{"class":168},"        arr[i]",[162,14996,173],{"class":172},[162,14998,3732],{"class":168},[162,15000,3771],{"class":172},[162,15002,3608],{"class":207},[162,15004,3367],{"class":168},[162,15006,15007],{"class":361},"\u002F\u002F给10个元素赋值100～109\n",[162,15009,15010],{"class":164,"line":4878},[162,15011,5305],{"class":168},[162,15013,15014,15016,15018,15020,15022,15024,15026,15028,15030,15032,15034,15036],{"class":164,"line":4883},[162,15015,6315],{"class":172},[162,15017,1003],{"class":168},[162,15019,3319],{"class":172},[162,15021,6147],{"class":168},[162,15023,173],{"class":172},[162,15025,312],{"class":207},[162,15027,6154],{"class":168},[162,15029,4187],{"class":172},[162,15031,1006],{"class":207},[162,15033,6154],{"class":168},[162,15035,5410],{"class":172},[162,15037,434],{"class":168},[162,15039,15040],{"class":164,"line":4897},[162,15041,5148],{"class":168},[162,15043,15044,15046,15048,15050,15052],{"class":164,"line":4902},[162,15045,6565],{"class":168},[162,15047,4316],{"class":172},[162,15049,7466],{"class":168},[162,15051,4316],{"class":172},[162,15053,4338],{"class":168},[162,15055,15056],{"class":164,"line":5694},[162,15057,5305],{"class":168},[162,15059,15060],{"class":164,"line":5708},[162,15061,15062],{"class":361},"    \u002F\u002F释放堆区数组\n",[162,15064,15065],{"class":164,"line":5716},[162,15066,15067],{"class":361},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[162,15069,15070,15073],{"class":164,"line":5721},[162,15071,15072],{"class":172},"    delete[]",[162,15074,15075],{"class":168}," arr;\n",[162,15077,15078],{"class":164,"line":5727},[162,15079,1498],{"class":168},[162,15081,15082],{"class":164,"line":5733},[162,15083,301],{"emptyLinePlaceholder":300},[162,15085,15086,15088,15090],{"class":164,"line":5738},[162,15087,3319],{"class":172},[162,15089,5092],{"class":5082},[162,15091,1526],{"class":168},[162,15093,15094],{"class":164,"line":11052},[162,15095,4685],{"class":168},[162,15097,15098,15100],{"class":164,"line":11076},[162,15099,8740],{"class":5082},[162,15101,8743],{"class":168},[162,15103,15104,15106],{"class":164,"line":11081},[162,15105,8809],{"class":5082},[162,15107,8743],{"class":168},[162,15109,15110],{"class":164,"line":11087},[162,15111,1498],{"class":168},[3219,15113,15114],{},"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":158,"searchDepth":197,"depth":197,"links":15116},[15117],{"id":13787,"depth":197,"text":13788,"children":15118},[15119,15120],{"id":13819,"depth":228,"text":13820},{"id":14445,"depth":228,"text":14446},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":13779,"description":158},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":15127,"title":15128,"body":15129,"description":158,"extension":3242,"meta":16609,"navigation":300,"path":16610,"seo":16611,"stem":16612,"__hash__":16613},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":15130,"toc":16601},[15131,15134,15138,15141,15144,15313,15317,15322,15339,15344,15496,15500,15503,15506,15899,15903,15906,15911,15914,16226,16230,16236,16396,16398,16406,16410,16413,16420,16598],[10,15132,15128],{"id":15133},"_6引用",[14,15135,15137],{"id":15136},"_61引用基本用法","6.1引用基本用法",[19,15139,15140],{},"引用的本质：给变量起别名",[19,15142,15143],{},"语法：数据类型 &别名=原名",[153,15145,15147],{"className":3305,"code":15146,"language":3307,"meta":158,"style":158},"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",[71,15148,15149,15157,15161,15173,15185,15189,15208,15227,15231,15242,15246,15265,15283,15287,15297,15301,15309],{"__ignoreMap":158},[162,15150,15151,15153,15155],{"class":164,"line":165},[162,15152,3319],{"class":172},[162,15154,5092],{"class":5082},[162,15156,13951],{"class":168},[162,15158,15159],{"class":164,"line":197},[162,15160,301],{"emptyLinePlaceholder":300},[162,15162,15163,15165,15167,15169,15171],{"class":164,"line":228},[162,15164,5103],{"class":172},[162,15166,13967],{"class":168},[162,15168,173],{"class":172},[162,15170,5156],{"class":207},[162,15172,4433],{"class":168},[162,15174,15175,15177,15179,15181,15183],{"class":164,"line":252},[162,15176,5103],{"class":172},[162,15178,13683],{"class":172},[162,15180,1637],{"class":168},[162,15182,173],{"class":172},[162,15184,4572],{"class":168},[162,15186,15187],{"class":164,"line":328},[162,15188,301],{"emptyLinePlaceholder":300},[162,15190,15191,15193,15195,15198,15200,15202,15204,15206],{"class":164,"line":466},[162,15192,9635],{"class":168},[162,15194,4316],{"class":172},[162,15196,15197],{"class":179}," \"a = \"",[162,15199,4584],{"class":172},[162,15201,13967],{"class":168},[162,15203,4316],{"class":172},[162,15205,14565],{"class":168},[162,15207,10374],{"class":361},[162,15209,15210,15212,15214,15217,15219,15221,15223,15225],{"class":164,"line":471},[162,15211,9635],{"class":168},[162,15213,4316],{"class":172},[162,15215,15216],{"class":179}," \"b = \"",[162,15218,4584],{"class":172},[162,15220,13980],{"class":168},[162,15222,4316],{"class":172},[162,15224,14565],{"class":168},[162,15226,10374],{"class":361},[162,15228,15229],{"class":164,"line":687},[162,15230,301],{"emptyLinePlaceholder":300},[162,15232,15233,15236,15238,15240],{"class":164,"line":692},[162,15234,15235],{"class":168},"    b ",[162,15237,173],{"class":172},[162,15239,8861],{"class":207},[162,15241,4433],{"class":168},[162,15243,15244],{"class":164,"line":698},[162,15245,301],{"emptyLinePlaceholder":300},[162,15247,15248,15250,15252,15254,15256,15258,15260,15262],{"class":164,"line":2955},[162,15249,9635],{"class":168},[162,15251,4316],{"class":172},[162,15253,15197],{"class":179},[162,15255,4584],{"class":172},[162,15257,13967],{"class":168},[162,15259,4316],{"class":172},[162,15261,14565],{"class":168},[162,15263,15264],{"class":361},"\u002F\u002F100\n",[162,15266,15267,15269,15271,15273,15275,15277,15279,15281],{"class":164,"line":2960},[162,15268,9635],{"class":168},[162,15270,4316],{"class":172},[162,15272,15216],{"class":179},[162,15274,4584],{"class":172},[162,15276,13980],{"class":168},[162,15278,4316],{"class":172},[162,15280,14565],{"class":168},[162,15282,15264],{"class":361},[162,15284,15285],{"class":164,"line":2971},[162,15286,301],{"emptyLinePlaceholder":300},[162,15288,15289,15291,15293,15295],{"class":164,"line":2984},[162,15290,5421],{"class":5082},[162,15292,604],{"class":168},[162,15294,5426],{"class":179},[162,15296,5836],{"class":168},[162,15298,15299],{"class":164,"line":2989},[162,15300,301],{"emptyLinePlaceholder":300},[162,15302,15303,15305,15307],{"class":164,"line":3011},[162,15304,7203],{"class":172},[162,15306,2717],{"class":207},[162,15308,4433],{"class":168},[162,15310,15311],{"class":164,"line":3022},[162,15312,1498],{"class":168},[14,15314,15316],{"id":15315},"_62引用的注意事项","6.2引用的注意事项",[1452,15318,15319],{},[1455,15320,15321],{},"引用必须要初始化",[153,15323,15325],{"className":3305,"code":15324,"language":3307,"meta":158,"style":158},"int &b;\u002F\u002F非常错误！\n",[71,15326,15327],{"__ignoreMap":158},[162,15328,15329,15331,15333,15336],{"class":164,"line":165},[162,15330,3319],{"class":172},[162,15332,13683],{"class":172},[162,15334,15335],{"class":168},"b;",[162,15337,15338],{"class":361},"\u002F\u002F非常错误！\n",[1452,15340,15341],{"start":197},[1455,15342,15343],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[153,15345,15347],{"className":3305,"code":15346,"language":3307,"meta":158,"style":158},"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",[71,15348,15349,15357,15369,15381,15389,15405,15418,15436,15454,15474,15484,15492],{"__ignoreMap":158},[162,15350,15351,15353,15355],{"class":164,"line":165},[162,15352,3319],{"class":172},[162,15354,5092],{"class":5082},[162,15356,13951],{"class":168},[162,15358,15359,15361,15363,15365,15367],{"class":164,"line":197},[162,15360,5103],{"class":172},[162,15362,13967],{"class":168},[162,15364,173],{"class":172},[162,15366,5156],{"class":207},[162,15368,4433],{"class":168},[162,15370,15371,15373,15375,15377,15379],{"class":164,"line":228},[162,15372,5103],{"class":172},[162,15374,13980],{"class":168},[162,15376,173],{"class":172},[162,15378,12053],{"class":207},[162,15380,4433],{"class":168},[162,15382,15383,15386],{"class":164,"line":252},[162,15384,15385],{"class":361},"    \u002F\u002Fint &c;",[162,15387,15388],{"class":361}," \u002F\u002F错误，引用必须初始化\n",[162,15390,15391,15393,15395,15397,15399,15402],{"class":164,"line":328},[162,15392,5103],{"class":172},[162,15394,13683],{"class":172},[162,15396,6063],{"class":168},[162,15398,173],{"class":172},[162,15400,15401],{"class":168}," a;",[162,15403,15404],{"class":361}," \u002F\u002F一旦初始化后，就不可以更改\n",[162,15406,15407,15410,15412,15415],{"class":164,"line":466},[162,15408,15409],{"class":168},"    c ",[162,15411,173],{"class":172},[162,15413,15414],{"class":168}," b;",[162,15416,15417],{"class":361}," \u002F\u002F这是赋值操作，不是更改引用\n",[162,15419,15420,15422,15424,15426,15428,15430,15432,15434],{"class":164,"line":471},[162,15421,9635],{"class":168},[162,15423,4316],{"class":172},[162,15425,15197],{"class":179},[162,15427,4584],{"class":172},[162,15429,13967],{"class":168},[162,15431,4316],{"class":172},[162,15433,14565],{"class":168},[162,15435,10359],{"class":361},[162,15437,15438,15440,15442,15444,15446,15448,15450,15452],{"class":164,"line":687},[162,15439,9635],{"class":168},[162,15441,4316],{"class":172},[162,15443,15216],{"class":179},[162,15445,4584],{"class":172},[162,15447,13980],{"class":168},[162,15449,4316],{"class":172},[162,15451,14565],{"class":168},[162,15453,10359],{"class":361},[162,15455,15456,15458,15460,15463,15465,15468,15470,15472],{"class":164,"line":692},[162,15457,9635],{"class":168},[162,15459,4316],{"class":172},[162,15461,15462],{"class":179}," \"c = \"",[162,15464,4584],{"class":172},[162,15466,15467],{"class":168}," c ",[162,15469,4316],{"class":172},[162,15471,14565],{"class":168},[162,15473,10359],{"class":361},[162,15475,15476,15478,15480,15482],{"class":164,"line":698},[162,15477,5421],{"class":5082},[162,15479,604],{"class":168},[162,15481,5426],{"class":179},[162,15483,5836],{"class":168},[162,15485,15486,15488,15490],{"class":164,"line":2955},[162,15487,7203],{"class":172},[162,15489,2717],{"class":207},[162,15491,4433],{"class":168},[162,15493,15494],{"class":164,"line":2960},[162,15495,1498],{"class":168},[14,15497,15499],{"id":15498},"_63引用做函数参数","6.3引用做函数参数",[19,15501,15502],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,15504,15505],{},"优点：可以简化指针修改实参",[153,15507,15509],{"className":3305,"code":15508,"language":3307,"meta":158,"style":158},"\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",[71,15510,15511,15516,15538,15549,15559,15568,15572,15576,15581,15603,15615,15627,15637,15641,15645,15650,15672,15682,15690,15698,15702,15706,15714,15718,15730,15742,15746,15757,15783,15787,15807,15831,15835,15845,15869,15873,15883,15887,15895],{"__ignoreMap":158},[162,15512,15513],{"class":164,"line":165},[162,15514,15515],{"class":361},"\u002F\u002F1. 值传递\n",[162,15517,15518,15520,15523,15525,15527,15529,15531,15533,15535],{"class":164,"line":197},[162,15519,8471],{"class":172},[162,15521,15522],{"class":5082}," mySwap01",[162,15524,604],{"class":168},[162,15526,3319],{"class":172},[162,15528,4538],{"class":671},[162,15530,183],{"class":168},[162,15532,3319],{"class":172},[162,15534,5950],{"class":671},[162,15536,15537],{"class":168},") {\n",[162,15539,15540,15542,15545,15547],{"class":164,"line":228},[162,15541,5103],{"class":172},[162,15543,15544],{"class":168}," temp ",[162,15546,173],{"class":172},[162,15548,4572],{"class":168},[162,15550,15551,15554,15556],{"class":164,"line":252},[162,15552,15553],{"class":168},"    a ",[162,15555,173],{"class":172},[162,15557,15558],{"class":168}," b;\n",[162,15560,15561,15563,15565],{"class":164,"line":328},[162,15562,15235],{"class":168},[162,15564,173],{"class":172},[162,15566,15567],{"class":168}," temp;\n",[162,15569,15570],{"class":164,"line":466},[162,15571,1498],{"class":168},[162,15573,15574],{"class":164,"line":471},[162,15575,301],{"emptyLinePlaceholder":300},[162,15577,15578],{"class":164,"line":687},[162,15579,15580],{"class":361},"\u002F\u002F2. 地址传递\n",[162,15582,15583,15585,15588,15590,15593,15595,15597,15599,15601],{"class":164,"line":692},[162,15584,8471],{"class":172},[162,15586,15587],{"class":5082}," mySwap02",[162,15589,604],{"class":168},[162,15591,15592],{"class":172},"int*",[162,15594,4538],{"class":671},[162,15596,183],{"class":168},[162,15598,15592],{"class":172},[162,15600,5950],{"class":671},[162,15602,15537],{"class":168},[162,15604,15605,15607,15609,15611,15613],{"class":164,"line":698},[162,15606,5103],{"class":172},[162,15608,15544],{"class":168},[162,15610,173],{"class":172},[162,15612,9624],{"class":172},[162,15614,9303],{"class":168},[162,15616,15617,15619,15621,15623,15625],{"class":164,"line":2955},[162,15618,9509],{"class":172},[162,15620,1616],{"class":168},[162,15622,173],{"class":172},[162,15624,9624],{"class":172},[162,15626,9175],{"class":168},[162,15628,15629,15631,15633,15635],{"class":164,"line":2960},[162,15630,9509],{"class":172},[162,15632,1637],{"class":168},[162,15634,173],{"class":172},[162,15636,15567],{"class":168},[162,15638,15639],{"class":164,"line":2971},[162,15640,1498],{"class":168},[162,15642,15643],{"class":164,"line":2984},[162,15644,301],{"emptyLinePlaceholder":300},[162,15646,15647],{"class":164,"line":2989},[162,15648,15649],{"class":361},"\u002F\u002F3. 引用传递\n",[162,15651,15652,15654,15657,15659,15662,15664,15666,15668,15670],{"class":164,"line":3011},[162,15653,8471],{"class":172},[162,15655,15656],{"class":5082}," mySwap03",[162,15658,604],{"class":168},[162,15660,15661],{"class":172},"int&",[162,15663,4538],{"class":671},[162,15665,183],{"class":168},[162,15667,15661],{"class":172},[162,15669,5950],{"class":671},[162,15671,15537],{"class":168},[162,15673,15674,15676,15678,15680],{"class":164,"line":3022},[162,15675,5103],{"class":172},[162,15677,15544],{"class":168},[162,15679,173],{"class":172},[162,15681,4572],{"class":168},[162,15683,15684,15686,15688],{"class":164,"line":3027},[162,15685,15553],{"class":168},[162,15687,173],{"class":172},[162,15689,15558],{"class":168},[162,15691,15692,15694,15696],{"class":164,"line":3046},[162,15693,15235],{"class":168},[162,15695,173],{"class":172},[162,15697,15567],{"class":168},[162,15699,15700],{"class":164,"line":3052},[162,15701,1498],{"class":168},[162,15703,15704],{"class":164,"line":3057},[162,15705,301],{"emptyLinePlaceholder":300},[162,15707,15708,15710,15712],{"class":164,"line":3072},[162,15709,3319],{"class":172},[162,15711,5092],{"class":5082},[162,15713,13951],{"class":168},[162,15715,15716],{"class":164,"line":3077},[162,15717,301],{"emptyLinePlaceholder":300},[162,15719,15720,15722,15724,15726,15728],{"class":164,"line":3100},[162,15721,5103],{"class":172},[162,15723,13967],{"class":168},[162,15725,173],{"class":172},[162,15727,5156],{"class":207},[162,15729,4433],{"class":168},[162,15731,15732,15734,15736,15738,15740],{"class":164,"line":3140},[162,15733,5103],{"class":172},[162,15735,13980],{"class":168},[162,15737,173],{"class":172},[162,15739,12053],{"class":207},[162,15741,4433],{"class":168},[162,15743,15744],{"class":164,"line":4878},[162,15745,301],{"emptyLinePlaceholder":300},[162,15747,15748,15751,15754],{"class":164,"line":4883},[162,15749,15750],{"class":5082},"    mySwap01",[162,15752,15753],{"class":168},"(a, b);",[162,15755,15756],{"class":361},"\u002F\u002F值传递，形参不会修饰实参\n",[162,15758,15759,15761,15763,15766,15768,15770,15772,15775,15777,15779,15781],{"class":164,"line":4897},[162,15760,9635],{"class":168},[162,15762,4316],{"class":172},[162,15764,15765],{"class":179}," \"a:\"",[162,15767,4584],{"class":172},[162,15769,13967],{"class":168},[162,15771,4316],{"class":172},[162,15773,15774],{"class":179}," \" b:\"",[162,15776,4584],{"class":172},[162,15778,13980],{"class":168},[162,15780,4316],{"class":172},[162,15782,11943],{"class":168},[162,15784,15785],{"class":164,"line":4902},[162,15786,301],{"emptyLinePlaceholder":300},[162,15788,15789,15792,15794,15796,15799,15801,15804],{"class":164,"line":5694},[162,15790,15791],{"class":5082},"    mySwap02",[162,15793,604],{"class":168},[162,15795,1667],{"class":172},[162,15797,15798],{"class":168},"a, ",[162,15800,1667],{"class":172},[162,15802,15803],{"class":168},"b);",[162,15805,15806],{"class":361},"\u002F\u002F地址传递，形参会修饰实参\n",[162,15808,15809,15811,15813,15815,15817,15819,15821,15823,15825,15827,15829],{"class":164,"line":5708},[162,15810,9635],{"class":168},[162,15812,4316],{"class":172},[162,15814,15765],{"class":179},[162,15816,4584],{"class":172},[162,15818,13967],{"class":168},[162,15820,4316],{"class":172},[162,15822,15774],{"class":179},[162,15824,4584],{"class":172},[162,15826,13980],{"class":168},[162,15828,4316],{"class":172},[162,15830,11943],{"class":168},[162,15832,15833],{"class":164,"line":5716},[162,15834,301],{"emptyLinePlaceholder":300},[162,15836,15837,15840,15842],{"class":164,"line":5721},[162,15838,15839],{"class":5082},"    mySwap03",[162,15841,15753],{"class":168},[162,15843,15844],{"class":361},"\u002F\u002F引用传递，形参会修饰实参\n",[162,15846,15847,15849,15851,15853,15855,15857,15859,15861,15863,15865,15867],{"class":164,"line":5727},[162,15848,9635],{"class":168},[162,15850,4316],{"class":172},[162,15852,15765],{"class":179},[162,15854,4584],{"class":172},[162,15856,13967],{"class":168},[162,15858,4316],{"class":172},[162,15860,15774],{"class":179},[162,15862,4584],{"class":172},[162,15864,13980],{"class":168},[162,15866,4316],{"class":172},[162,15868,11943],{"class":168},[162,15870,15871],{"class":164,"line":5733},[162,15872,301],{"emptyLinePlaceholder":300},[162,15874,15875,15877,15879,15881],{"class":164,"line":5738},[162,15876,5421],{"class":5082},[162,15878,604],{"class":168},[162,15880,5426],{"class":179},[162,15882,5836],{"class":168},[162,15884,15885],{"class":164,"line":11052},[162,15886,301],{"emptyLinePlaceholder":300},[162,15888,15889,15891,15893],{"class":164,"line":11076},[162,15890,7203],{"class":172},[162,15892,2717],{"class":207},[162,15894,4433],{"class":168},[162,15896,15897],{"class":164,"line":11081},[162,15898,1498],{"class":168},[14,15900,15902],{"id":15901},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,15904,15905],{},"作用：引用是可以作为函数的返回值存在的",[19,15907,1529,15908],{},[3453,15909,15910],{},"不要返回局部变量引用",[19,15912,15913],{},"用法：函数调用作为左值",[153,15915,15917],{"className":13041,"code":15916,"language":13043,"meta":158,"style":158},"\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",[71,15918,15919,15924,15932,15947,15953,15957,15961,15966,15974,15991,15997,16001,16005,16013,16017,16022,16036,16056,16075,16079,16084,16097,16117,16135,16139,16155,16159,16178,16196,16200,16210,16214,16222],{"__ignoreMap":158},[162,15920,15921],{"class":164,"line":165},[162,15922,15923],{"class":361},"\u002F\u002F返回局部变量引用\n",[162,15925,15926,15928,15930],{"class":164,"line":197},[162,15927,15661],{"class":172},[162,15929,8695],{"class":5082},[162,15931,13951],{"class":168},[162,15933,15934,15936,15938,15940,15942,15944],{"class":164,"line":228},[162,15935,5103],{"class":172},[162,15937,13967],{"class":168},[162,15939,173],{"class":172},[162,15941,5156],{"class":207},[162,15943,3367],{"class":168},[162,15945,15946],{"class":361}," \u002F\u002F局部变量\n",[162,15948,15949,15951],{"class":164,"line":252},[162,15950,7203],{"class":172},[162,15952,4572],{"class":168},[162,15954,15955],{"class":164,"line":328},[162,15956,1498],{"class":168},[162,15958,15959],{"class":164,"line":466},[162,15960,301],{"emptyLinePlaceholder":300},[162,15962,15963],{"class":164,"line":471},[162,15964,15965],{"class":361},"\u002F\u002F返回静态变量引用\n",[162,15967,15968,15970,15972],{"class":164,"line":687},[162,15969,15661],{"class":172},[162,15971,8764],{"class":5082},[162,15973,13951],{"class":168},[162,15975,15976,15978,15980,15982,15984,15986,15988],{"class":164,"line":692},[162,15977,14116],{"class":172},[162,15979,5500],{"class":172},[162,15981,13967],{"class":168},[162,15983,173],{"class":172},[162,15985,12053],{"class":207},[162,15987,3367],{"class":168},[162,15989,15990],{"class":361},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[162,15992,15993,15995],{"class":164,"line":698},[162,15994,7203],{"class":172},[162,15996,4572],{"class":168},[162,15998,15999],{"class":164,"line":2955},[162,16000,1498],{"class":168},[162,16002,16003],{"class":164,"line":2960},[162,16004,301],{"emptyLinePlaceholder":300},[162,16006,16007,16009,16011],{"class":164,"line":2971},[162,16008,3319],{"class":172},[162,16010,5092],{"class":5082},[162,16012,13951],{"class":168},[162,16014,16015],{"class":164,"line":2984},[162,16016,301],{"emptyLinePlaceholder":300},[162,16018,16019],{"class":164,"line":2989},[162,16020,16021],{"class":361},"    \u002F\u002F不能返回局部变量的引用\n",[162,16023,16024,16027,16030,16032,16034],{"class":164,"line":3011},[162,16025,16026],{"class":172},"    int&",[162,16028,16029],{"class":168}," ref ",[162,16031,173],{"class":172},[162,16033,8695],{"class":5082},[162,16035,8743],{"class":168},[162,16037,16038,16040,16042,16045,16047,16049,16051,16053],{"class":164,"line":3022},[162,16039,9635],{"class":168},[162,16041,4316],{"class":172},[162,16043,16044],{"class":179}," \"ref = \"",[162,16046,4584],{"class":172},[162,16048,16029],{"class":168},[162,16050,4316],{"class":172},[162,16052,14565],{"class":168},[162,16054,16055],{"class":361},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[162,16057,16058,16060,16062,16064,16066,16068,16070,16072],{"class":164,"line":3027},[162,16059,9635],{"class":168},[162,16061,4316],{"class":172},[162,16063,16044],{"class":179},[162,16065,4584],{"class":172},[162,16067,16029],{"class":168},[162,16069,4316],{"class":172},[162,16071,14565],{"class":168},[162,16073,16074],{"class":361},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[162,16076,16077],{"class":164,"line":3046},[162,16078,301],{"emptyLinePlaceholder":300},[162,16080,16081],{"class":164,"line":3052},[162,16082,16083],{"class":361},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[162,16085,16086,16088,16091,16093,16095],{"class":164,"line":3057},[162,16087,16026],{"class":172},[162,16089,16090],{"class":168}," ref2 ",[162,16092,173],{"class":172},[162,16094,8764],{"class":5082},[162,16096,8743],{"class":168},[162,16098,16099,16101,16103,16106,16108,16110,16112,16114],{"class":164,"line":3072},[162,16100,9635],{"class":168},[162,16102,4316],{"class":172},[162,16104,16105],{"class":179}," \"ref2 = \"",[162,16107,4584],{"class":172},[162,16109,16090],{"class":168},[162,16111,4316],{"class":172},[162,16113,14565],{"class":168},[162,16115,16116],{"class":361}," \u002F\u002F20\n",[162,16118,16119,16121,16123,16125,16127,16129,16131,16133],{"class":164,"line":3077},[162,16120,9635],{"class":168},[162,16122,4316],{"class":172},[162,16124,16105],{"class":179},[162,16126,4584],{"class":172},[162,16128,16090],{"class":168},[162,16130,4316],{"class":172},[162,16132,14565],{"class":168},[162,16134,16116],{"class":361},[162,16136,16137],{"class":164,"line":3100},[162,16138,301],{"emptyLinePlaceholder":300},[162,16140,16141,16143,16146,16148,16150,16152],{"class":164,"line":3140},[162,16142,8809],{"class":5082},[162,16144,16145],{"class":168},"() ",[162,16147,173],{"class":172},[162,16149,6115],{"class":207},[162,16151,3367],{"class":168},[162,16153,16154],{"class":361},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[162,16156,16157],{"class":164,"line":4878},[162,16158,301],{"emptyLinePlaceholder":300},[162,16160,16161,16163,16165,16167,16169,16171,16173,16175],{"class":164,"line":4883},[162,16162,9635],{"class":168},[162,16164,4316],{"class":172},[162,16166,16105],{"class":179},[162,16168,4584],{"class":172},[162,16170,16090],{"class":168},[162,16172,4316],{"class":172},[162,16174,14565],{"class":168},[162,16176,16177],{"class":361}," \u002F\u002F1000\n",[162,16179,16180,16182,16184,16186,16188,16190,16192,16194],{"class":164,"line":4897},[162,16181,9635],{"class":168},[162,16183,4316],{"class":172},[162,16185,16105],{"class":179},[162,16187,4584],{"class":172},[162,16189,16090],{"class":168},[162,16191,4316],{"class":172},[162,16193,14565],{"class":168},[162,16195,16177],{"class":361},[162,16197,16198],{"class":164,"line":4902},[162,16199,301],{"emptyLinePlaceholder":300},[162,16201,16202,16204,16206,16208],{"class":164,"line":5694},[162,16203,5421],{"class":5082},[162,16205,604],{"class":168},[162,16207,5426],{"class":179},[162,16209,5836],{"class":168},[162,16211,16212],{"class":164,"line":5708},[162,16213,301],{"emptyLinePlaceholder":300},[162,16215,16216,16218,16220],{"class":164,"line":5716},[162,16217,7203],{"class":172},[162,16219,2717],{"class":207},[162,16221,4433],{"class":168},[162,16223,16224],{"class":164,"line":5721},[162,16225,1498],{"class":168},[14,16227,16229],{"id":16228},"_65引用的本质","6.5引用的本质",[19,16231,16232,16233],{},"本质：",[3453,16234,16235],{},"引用的本质在c++内部实现是一个指针常量.",[153,16237,16239],{"className":3305,"code":16238,"language":3307,"meta":158,"style":158},"\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",[71,16240,16241,16246,16262,16276,16280,16289,16301,16306,16311,16322,16335,16339,16355,16372,16376,16384,16392],{"__ignoreMap":158},[162,16242,16243],{"class":164,"line":165},[162,16244,16245],{"class":361},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[162,16247,16248,16250,16252,16254,16256,16259],{"class":164,"line":197},[162,16249,8471],{"class":172},[162,16251,14481],{"class":5082},[162,16253,604],{"class":168},[162,16255,15661],{"class":172},[162,16257,16258],{"class":671}," ref",[162,16260,16261],{"class":168},"){\n",[162,16263,16264,16267,16269,16271,16273],{"class":164,"line":228},[162,16265,16266],{"class":168},"    ref ",[162,16268,173],{"class":172},[162,16270,8861],{"class":207},[162,16272,3367],{"class":168},[162,16274,16275],{"class":361}," \u002F\u002F ref是引用，转换为*ref = 100\n",[162,16277,16278],{"class":164,"line":252},[162,16279,1498],{"class":168},[162,16281,16282,16284,16286],{"class":164,"line":328},[162,16283,3319],{"class":172},[162,16285,5092],{"class":5082},[162,16287,16288],{"class":168},"(){\n",[162,16290,16291,16293,16295,16297,16299],{"class":164,"line":466},[162,16292,5103],{"class":172},[162,16294,13967],{"class":168},[162,16296,173],{"class":172},[162,16298,5156],{"class":207},[162,16300,4433],{"class":168},[162,16302,16303],{"class":164,"line":471},[162,16304,16305],{"class":168},"    \n",[162,16307,16308],{"class":164,"line":687},[162,16309,16310],{"class":361},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[162,16312,16313,16315,16317,16319],{"class":164,"line":692},[162,16314,16026],{"class":172},[162,16316,16029],{"class":168},[162,16318,173],{"class":172},[162,16320,16321],{"class":168}," a; \n",[162,16323,16324,16326,16328,16330,16332],{"class":164,"line":698},[162,16325,16266],{"class":168},[162,16327,173],{"class":172},[162,16329,12053],{"class":207},[162,16331,3367],{"class":168},[162,16333,16334],{"class":361}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[162,16336,16337],{"class":164,"line":2955},[162,16338,16305],{"class":168},[162,16340,16341,16343,16345,16347,16349,16351,16353],{"class":164,"line":2960},[162,16342,9635],{"class":168},[162,16344,4316],{"class":172},[162,16346,15765],{"class":179},[162,16348,4584],{"class":172},[162,16350,13967],{"class":168},[162,16352,4316],{"class":172},[162,16354,11943],{"class":168},[162,16356,16357,16359,16361,16364,16366,16368,16370],{"class":164,"line":2971},[162,16358,9635],{"class":168},[162,16360,4316],{"class":172},[162,16362,16363],{"class":179}," \"ref:\"",[162,16365,4584],{"class":172},[162,16367,16029],{"class":168},[162,16369,4316],{"class":172},[162,16371,11943],{"class":168},[162,16373,16374],{"class":164,"line":2984},[162,16375,16305],{"class":168},[162,16377,16378,16381],{"class":164,"line":2989},[162,16379,16380],{"class":5082},"    func",[162,16382,16383],{"class":168},"(a);\n",[162,16385,16386,16388,16390],{"class":164,"line":3011},[162,16387,7203],{"class":172},[162,16389,2717],{"class":207},[162,16391,4433],{"class":168},[162,16393,16394],{"class":164,"line":3022},[162,16395,1498],{"class":168},[19,16397,14428],{},[1452,16399,16400,16403],{},[1455,16401,16402],{},"引用的本质，就是一个指针常量",[1455,16404,16405],{},"引用一旦初始化，就不可以发生改变",[14,16407,16409],{"id":16408},"_66常量引用","6.6常量引用",[19,16411,16412],{},"作用：常量引用主要用来修饰形参",[19,16414,16415,16416,16419],{},"在函数形参列表中，可以加",[3453,16417,16418],{},"const修饰形参","，防止形参改变实参",[153,16421,16423],{"className":3305,"code":16422,"language":3307,"meta":158,"style":158},"\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",[71,16424,16425,16430,16435,16454,16459,16472,16476,16480,16488,16492,16497,16502,16516,16520,16528,16540,16544,16549,16561,16568,16572,16582,16586,16594],{"__ignoreMap":158},[162,16426,16427],{"class":164,"line":165},[162,16428,16429],{"class":361},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[162,16431,16432],{"class":164,"line":197},[162,16433,16434],{"class":361},"\u002F\u002F加上const就不能修改实参的\n",[162,16436,16437,16439,16442,16444,16446,16449,16452],{"class":164,"line":228},[162,16438,8471],{"class":172},[162,16440,16441],{"class":5082}," showValue",[162,16443,604],{"class":168},[162,16445,9898],{"class":172},[162,16447,16448],{"class":172}," int&",[162,16450,16451],{"class":671}," v",[162,16453,15537],{"class":168},[162,16455,16456],{"class":164,"line":252},[162,16457,16458],{"class":361},"    \u002F\u002Fv += 100;\n",[162,16460,16461,16463,16465,16468,16470],{"class":164,"line":328},[162,16462,9635],{"class":168},[162,16464,4316],{"class":172},[162,16466,16467],{"class":168}," v ",[162,16469,4316],{"class":172},[162,16471,11943],{"class":168},[162,16473,16474],{"class":164,"line":466},[162,16475,1498],{"class":168},[162,16477,16478],{"class":164,"line":471},[162,16479,301],{"emptyLinePlaceholder":300},[162,16481,16482,16484,16486],{"class":164,"line":687},[162,16483,3319],{"class":172},[162,16485,5092],{"class":5082},[162,16487,13951],{"class":168},[162,16489,16490],{"class":164,"line":692},[162,16491,301],{"emptyLinePlaceholder":300},[162,16493,16494],{"class":164,"line":698},[162,16495,16496],{"class":361},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[162,16498,16499],{"class":164,"line":2955},[162,16500,16501],{"class":361},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[162,16503,16504,16506,16508,16510,16512,16514],{"class":164,"line":2960},[162,16505,14317],{"class":172},[162,16507,16448],{"class":172},[162,16509,16029],{"class":168},[162,16511,173],{"class":172},[162,16513,5156],{"class":207},[162,16515,4433],{"class":168},[162,16517,16518],{"class":164,"line":2971},[162,16519,301],{"emptyLinePlaceholder":300},[162,16521,16522,16525],{"class":164,"line":2984},[162,16523,16524],{"class":361},"    \u002F\u002Fref = 100;",[162,16526,16527],{"class":361},"  \u002F\u002F加入const后不可以修改变量\n",[162,16529,16530,16532,16534,16536,16538],{"class":164,"line":2989},[162,16531,9635],{"class":168},[162,16533,4316],{"class":172},[162,16535,16029],{"class":168},[162,16537,4316],{"class":172},[162,16539,11943],{"class":168},[162,16541,16542],{"class":164,"line":3011},[162,16543,301],{"emptyLinePlaceholder":300},[162,16545,16546],{"class":164,"line":3022},[162,16547,16548],{"class":361},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[162,16550,16551,16553,16555,16557,16559],{"class":164,"line":3027},[162,16552,5103],{"class":172},[162,16554,13967],{"class":168},[162,16556,173],{"class":172},[162,16558,5156],{"class":207},[162,16560,4433],{"class":168},[162,16562,16563,16566],{"class":164,"line":3046},[162,16564,16565],{"class":5082},"    showValue",[162,16567,16383],{"class":168},[162,16569,16570],{"class":164,"line":3052},[162,16571,301],{"emptyLinePlaceholder":300},[162,16573,16574,16576,16578,16580],{"class":164,"line":3057},[162,16575,5421],{"class":5082},[162,16577,604],{"class":168},[162,16579,5426],{"class":179},[162,16581,5836],{"class":168},[162,16583,16584],{"class":164,"line":3072},[162,16585,301],{"emptyLinePlaceholder":300},[162,16587,16588,16590,16592],{"class":164,"line":3077},[162,16589,7203],{"class":172},[162,16591,2717],{"class":207},[162,16593,4433],{"class":168},[162,16595,16596],{"class":164,"line":3100},[162,16597,1498],{"class":168},[3219,16599,16600],{},"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":158,"searchDepth":197,"depth":197,"links":16602},[16603,16604,16605,16606,16607,16608],{"id":15136,"depth":197,"text":15137},{"id":15315,"depth":197,"text":15316},{"id":15498,"depth":197,"text":15499},{"id":15901,"depth":197,"text":15902},{"id":16228,"depth":197,"text":16229},{"id":16408,"depth":197,"text":16409},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":15128,"description":158},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":16615,"title":16616,"body":16617,"description":158,"extension":3242,"meta":17697,"navigation":300,"path":17698,"seo":17699,"stem":17700,"__hash__":17701},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":16618,"toc":17689},[16619,16622,16626,16629,16634,16865,16867,16878,16882,16885,16893,16997,17000,17004,17007,17011,17014,17019,17041,17047,17374,17377,17381,17389,17686],[10,16620,16616],{"id":16621},"_7函数高级部分",[14,16623,16625],{"id":16624},"_71函数默认参数","7.1函数默认参数",[19,16627,16628],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,16630,8289,16631],{},[71,16632,16633],{}," 返回值类型  函数名 （参数= 默认值）{}",[153,16635,16637],{"className":3305,"code":16636,"language":3307,"meta":158,"style":158},"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",[71,16638,16639,16674,16689,16693,16697,16702,16707,16736,16756,16766,16770,16774,16782,16786,16813,16835,16839,16849,16853,16861],{"__ignoreMap":158},[162,16640,16641,16643,16645,16647,16649,16651,16653,16655,16657,16660,16662,16664,16666,16668,16670,16672],{"class":164,"line":165},[162,16642,3319],{"class":172},[162,16644,14481],{"class":5082},[162,16646,604],{"class":168},[162,16648,3319],{"class":172},[162,16650,4538],{"class":671},[162,16652,183],{"class":168},[162,16654,3319],{"class":172},[162,16656,5950],{"class":671},[162,16658,16659],{"class":172}," =",[162,16661,5156],{"class":207},[162,16663,183],{"class":168},[162,16665,3319],{"class":172},[162,16667,5966],{"class":671},[162,16669,16659],{"class":172},[162,16671,5156],{"class":207},[162,16673,15537],{"class":168},[162,16675,16676,16678,16680,16682,16684,16686],{"class":164,"line":197},[162,16677,7203],{"class":172},[162,16679,13967],{"class":168},[162,16681,3771],{"class":172},[162,16683,13980],{"class":168},[162,16685,3771],{"class":172},[162,16687,16688],{"class":168}," c;\n",[162,16690,16691],{"class":164,"line":228},[162,16692,1498],{"class":168},[162,16694,16695],{"class":164,"line":252},[162,16696,301],{"emptyLinePlaceholder":300},[162,16698,16699],{"class":164,"line":328},[162,16700,16701],{"class":361},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[162,16703,16704],{"class":164,"line":466},[162,16705,16706],{"class":361},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[162,16708,16709,16711,16714,16716,16718,16720,16722,16724,16726,16728,16730,16732,16734],{"class":164,"line":471},[162,16710,3319],{"class":172},[162,16712,16713],{"class":5082}," func2",[162,16715,604],{"class":168},[162,16717,3319],{"class":172},[162,16719,4538],{"class":671},[162,16721,16659],{"class":172},[162,16723,5156],{"class":207},[162,16725,183],{"class":168},[162,16727,3319],{"class":172},[162,16729,5950],{"class":671},[162,16731,16659],{"class":172},[162,16733,5156],{"class":207},[162,16735,5836],{"class":168},[162,16737,16738,16740,16742,16744,16746,16748,16750,16752,16754],{"class":164,"line":687},[162,16739,3319],{"class":172},[162,16741,16713],{"class":5082},[162,16743,604],{"class":168},[162,16745,3319],{"class":172},[162,16747,4538],{"class":671},[162,16749,183],{"class":168},[162,16751,3319],{"class":172},[162,16753,5950],{"class":671},[162,16755,15537],{"class":168},[162,16757,16758,16760,16762,16764],{"class":164,"line":692},[162,16759,7203],{"class":172},[162,16761,13967],{"class":168},[162,16763,3771],{"class":172},[162,16765,15558],{"class":168},[162,16767,16768],{"class":164,"line":698},[162,16769,1498],{"class":168},[162,16771,16772],{"class":164,"line":2955},[162,16773,301],{"emptyLinePlaceholder":300},[162,16775,16776,16778,16780],{"class":164,"line":2960},[162,16777,3319],{"class":172},[162,16779,5092],{"class":5082},[162,16781,13951],{"class":168},[162,16783,16784],{"class":164,"line":2971},[162,16785,301],{"emptyLinePlaceholder":300},[162,16787,16788,16790,16792,16795,16797,16799,16801,16803,16805,16807,16809,16811],{"class":164,"line":2984},[162,16789,9635],{"class":168},[162,16791,4316],{"class":172},[162,16793,16794],{"class":179}," \"ret = \"",[162,16796,4584],{"class":172},[162,16798,14481],{"class":5082},[162,16800,604],{"class":168},[162,16802,1011],{"class":207},[162,16804,183],{"class":168},[162,16806,1011],{"class":207},[162,16808,1823],{"class":168},[162,16810,4316],{"class":172},[162,16812,11943],{"class":168},[162,16814,16815,16817,16819,16821,16823,16825,16827,16829,16831,16833],{"class":164,"line":2989},[162,16816,9635],{"class":168},[162,16818,4316],{"class":172},[162,16820,16794],{"class":179},[162,16822,4584],{"class":172},[162,16824,14481],{"class":5082},[162,16826,604],{"class":168},[162,16828,3608],{"class":207},[162,16830,1823],{"class":168},[162,16832,4316],{"class":172},[162,16834,11943],{"class":168},[162,16836,16837],{"class":164,"line":3011},[162,16838,301],{"emptyLinePlaceholder":300},[162,16840,16841,16843,16845,16847],{"class":164,"line":3022},[162,16842,5421],{"class":5082},[162,16844,604],{"class":168},[162,16846,5426],{"class":179},[162,16848,5836],{"class":168},[162,16850,16851],{"class":164,"line":3027},[162,16852,301],{"emptyLinePlaceholder":300},[162,16854,16855,16857,16859],{"class":164,"line":3046},[162,16856,7203],{"class":172},[162,16858,2717],{"class":207},[162,16860,4433],{"class":168},[162,16862,16863],{"class":164,"line":3052},[162,16864,1498],{"class":168},[19,16866,14428],{},[1452,16868,16869,16872,16875],{},[1455,16870,16871],{},"我传就用我；没传就用你",[1455,16873,16874],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[1455,16876,16877],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,16879,16881],{"id":16880},"_72函数的占位参数","7.2函数的占位参数",[19,16883,16884],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,16886,16887,16889,16890],{},[3453,16888,8289],{}," ",[71,16891,16892],{},"返回值类型 函数名 (数据类型){}",[153,16894,16896],{"className":3305,"code":16895,"language":3307,"meta":158,"style":158},"\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",[71,16897,16898,16903,16921,16934,16938,16946,16950,16967,16971,16981,16985,16993],{"__ignoreMap":158},[162,16899,16900],{"class":164,"line":165},[162,16901,16902],{"class":361},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[162,16904,16905,16907,16909,16911,16913,16915,16917,16919],{"class":164,"line":197},[162,16906,8471],{"class":172},[162,16908,14481],{"class":5082},[162,16910,604],{"class":168},[162,16912,3319],{"class":172},[162,16914,4538],{"class":671},[162,16916,183],{"class":168},[162,16918,3319],{"class":172},[162,16920,15537],{"class":168},[162,16922,16923,16925,16927,16930,16932],{"class":164,"line":228},[162,16924,9635],{"class":168},[162,16926,4316],{"class":172},[162,16928,16929],{"class":179}," \"this is func\"",[162,16931,4584],{"class":172},[162,16933,11943],{"class":168},[162,16935,16936],{"class":164,"line":252},[162,16937,1498],{"class":168},[162,16939,16940,16942,16944],{"class":164,"line":328},[162,16941,3319],{"class":172},[162,16943,5092],{"class":5082},[162,16945,13951],{"class":168},[162,16947,16948],{"class":164,"line":466},[162,16949,301],{"emptyLinePlaceholder":300},[162,16951,16952,16954,16956,16958,16960,16962,16964],{"class":164,"line":471},[162,16953,16380],{"class":5082},[162,16955,604],{"class":168},[162,16957,1006],{"class":207},[162,16959,3670],{"class":168},[162,16961,1006],{"class":207},[162,16963,9073],{"class":168},[162,16965,16966],{"class":361}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[162,16968,16969],{"class":164,"line":687},[162,16970,301],{"emptyLinePlaceholder":300},[162,16972,16973,16975,16977,16979],{"class":164,"line":692},[162,16974,5421],{"class":5082},[162,16976,604],{"class":168},[162,16978,5426],{"class":179},[162,16980,5836],{"class":168},[162,16982,16983],{"class":164,"line":698},[162,16984,301],{"emptyLinePlaceholder":300},[162,16986,16987,16989,16991],{"class":164,"line":2955},[162,16988,7203],{"class":172},[162,16990,2717],{"class":207},[162,16992,4433],{"class":168},[162,16994,16995],{"class":164,"line":2960},[162,16996,1498],{"class":168},[19,16998,16999],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,17001,17003],{"id":17002},"_73函数重载","7.3函数重载",[19,17005,17006],{},"意思是函数名是可以相同的",[3284,17008,17010],{"id":17009},"_731基本语法","7.3.1基本语法",[19,17012,17013],{},"作用：函数名可以相同，提高复用性",[19,17015,17016],{},[3453,17017,17018],{},"函数重载满足条件：",[4279,17020,17021,17024,17027],{},[1455,17022,17023],{},"同一个作用域下",[1455,17025,17026],{},"函数名称相同",[1455,17028,17029,17030,17033,17034,17037,17038],{},"函数参数",[3453,17031,17032],{},"类型不同","  或者 ",[3453,17035,17036],{},"个数不同"," 或者 ",[3453,17039,17040],{},"顺序不同",[19,17042,17043,17046],{},[3453,17044,17045],{},"注意:","  函数的返回值不可以作为函数重载的条件",[153,17048,17050],{"className":13041,"code":17049,"language":13043,"meta":158,"style":158},"\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",[71,17051,17052,17057,17065,17069,17082,17086,17100,17104,17117,17121,17136,17140,17153,17157,17178,17182,17195,17199,17219,17223,17236,17240,17244,17249,17254,17259,17264,17269,17273,17277,17285,17289,17295,17305,17315,17329,17344,17348,17358,17362,17370],{"__ignoreMap":158},[162,17053,17054],{"class":164,"line":165},[162,17055,17056],{"class":361},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[162,17058,17059,17061,17063],{"class":164,"line":197},[162,17060,8471],{"class":172},[162,17062,14481],{"class":5082},[162,17064,1526],{"class":168},[162,17066,17067],{"class":164,"line":228},[162,17068,4685],{"class":168},[162,17070,17071,17073,17075,17078,17080],{"class":164,"line":252},[162,17072,9635],{"class":168},[162,17074,4316],{"class":172},[162,17076,17077],{"class":179}," \"func 的调用！\"",[162,17079,4584],{"class":172},[162,17081,11943],{"class":168},[162,17083,17084],{"class":164,"line":328},[162,17085,1498],{"class":168},[162,17087,17088,17090,17092,17094,17096,17098],{"class":164,"line":466},[162,17089,8471],{"class":172},[162,17091,14481],{"class":5082},[162,17093,604],{"class":168},[162,17095,3319],{"class":172},[162,17097,4538],{"class":671},[162,17099,434],{"class":168},[162,17101,17102],{"class":164,"line":471},[162,17103,4685],{"class":168},[162,17105,17106,17108,17110,17113,17115],{"class":164,"line":687},[162,17107,9635],{"class":168},[162,17109,4316],{"class":172},[162,17111,17112],{"class":179}," \"func (int a) 的调用！\"",[162,17114,4584],{"class":172},[162,17116,11943],{"class":168},[162,17118,17119],{"class":164,"line":692},[162,17120,1498],{"class":168},[162,17122,17123,17125,17127,17129,17132,17134],{"class":164,"line":698},[162,17124,8471],{"class":172},[162,17126,14481],{"class":5082},[162,17128,604],{"class":168},[162,17130,17131],{"class":172},"double",[162,17133,4538],{"class":671},[162,17135,434],{"class":168},[162,17137,17138],{"class":164,"line":2955},[162,17139,4685],{"class":168},[162,17141,17142,17144,17146,17149,17151],{"class":164,"line":2960},[162,17143,9635],{"class":168},[162,17145,4316],{"class":172},[162,17147,17148],{"class":179}," \"func (double a)的调用！\"",[162,17150,4584],{"class":172},[162,17152,11943],{"class":168},[162,17154,17155],{"class":164,"line":2971},[162,17156,1498],{"class":168},[162,17158,17159,17161,17163,17165,17167,17169,17172,17174,17176],{"class":164,"line":2984},[162,17160,8471],{"class":172},[162,17162,14481],{"class":5082},[162,17164,604],{"class":168},[162,17166,3319],{"class":172},[162,17168,4538],{"class":671},[162,17170,17171],{"class":168}," ,",[162,17173,17131],{"class":172},[162,17175,5950],{"class":671},[162,17177,434],{"class":168},[162,17179,17180],{"class":164,"line":2989},[162,17181,4685],{"class":168},[162,17183,17184,17186,17188,17191,17193],{"class":164,"line":3011},[162,17185,9635],{"class":168},[162,17187,4316],{"class":172},[162,17189,17190],{"class":179}," \"func (int a ,double b) 的调用！\"",[162,17192,4584],{"class":172},[162,17194,11943],{"class":168},[162,17196,17197],{"class":164,"line":3022},[162,17198,1498],{"class":168},[162,17200,17201,17203,17205,17207,17209,17211,17213,17215,17217],{"class":164,"line":3027},[162,17202,8471],{"class":172},[162,17204,14481],{"class":5082},[162,17206,604],{"class":168},[162,17208,17131],{"class":172},[162,17210,4538],{"class":671},[162,17212,17171],{"class":168},[162,17214,3319],{"class":172},[162,17216,5950],{"class":671},[162,17218,434],{"class":168},[162,17220,17221],{"class":164,"line":3046},[162,17222,4685],{"class":168},[162,17224,17225,17227,17229,17232,17234],{"class":164,"line":3052},[162,17226,9635],{"class":168},[162,17228,4316],{"class":172},[162,17230,17231],{"class":179}," \"func (double a ,int b)的调用！\"",[162,17233,4584],{"class":172},[162,17235,11943],{"class":168},[162,17237,17238],{"class":164,"line":3057},[162,17239,1498],{"class":168},[162,17241,17242],{"class":164,"line":3072},[162,17243,301],{"emptyLinePlaceholder":300},[162,17245,17246],{"class":164,"line":3077},[162,17247,17248],{"class":361},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[162,17250,17251],{"class":164,"line":3100},[162,17252,17253],{"class":361},"\u002F\u002Fint func(double a, int b)\n",[162,17255,17256],{"class":164,"line":3140},[162,17257,17258],{"class":361},"\u002F\u002F{\n",[162,17260,17261],{"class":164,"line":4878},[162,17262,17263],{"class":361},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[162,17265,17266],{"class":164,"line":4883},[162,17267,17268],{"class":361},"\u002F\u002F}\n",[162,17270,17271],{"class":164,"line":4897},[162,17272,301],{"emptyLinePlaceholder":300},[162,17274,17275],{"class":164,"line":4902},[162,17276,301],{"emptyLinePlaceholder":300},[162,17278,17279,17281,17283],{"class":164,"line":5694},[162,17280,3319],{"class":172},[162,17282,5092],{"class":5082},[162,17284,13951],{"class":168},[162,17286,17287],{"class":164,"line":5708},[162,17288,301],{"emptyLinePlaceholder":300},[162,17290,17291,17293],{"class":164,"line":5716},[162,17292,16380],{"class":5082},[162,17294,8743],{"class":168},[162,17296,17297,17299,17301,17303],{"class":164,"line":5721},[162,17298,16380],{"class":5082},[162,17300,604],{"class":168},[162,17302,1006],{"class":207},[162,17304,5836],{"class":168},[162,17306,17307,17309,17311,17313],{"class":164,"line":5727},[162,17308,16380],{"class":5082},[162,17310,604],{"class":168},[162,17312,3362],{"class":207},[162,17314,5836],{"class":168},[162,17316,17317,17319,17321,17323,17325,17327],{"class":164,"line":5733},[162,17318,16380],{"class":5082},[162,17320,604],{"class":168},[162,17322,1006],{"class":207},[162,17324,3670],{"class":168},[162,17326,3362],{"class":207},[162,17328,5836],{"class":168},[162,17330,17331,17333,17335,17337,17340,17342],{"class":164,"line":5738},[162,17332,16380],{"class":5082},[162,17334,604],{"class":168},[162,17336,3362],{"class":207},[162,17338,17339],{"class":168}," , ",[162,17341,1006],{"class":207},[162,17343,5836],{"class":168},[162,17345,17346],{"class":164,"line":11052},[162,17347,16305],{"class":168},[162,17349,17350,17352,17354,17356],{"class":164,"line":11076},[162,17351,5421],{"class":5082},[162,17353,604],{"class":168},[162,17355,5426],{"class":179},[162,17357,5836],{"class":168},[162,17359,17360],{"class":164,"line":11081},[162,17361,301],{"emptyLinePlaceholder":300},[162,17363,17364,17366,17368],{"class":164,"line":11087},[162,17365,7203],{"class":172},[162,17367,2717],{"class":207},[162,17369,4433],{"class":168},[162,17371,17372],{"class":164,"line":11114},[162,17373,1498],{"class":168},[19,17375,17376],{},"重点：函数返回值不可以作为函数重载条件！",[3284,17378,17380],{"id":17379},"_732注意事项","7.3.2注意事项",[4279,17382,17383,17386],{},[1455,17384,17385],{},"引用作为重载条件!!!",[1455,17387,17388],{},"函数重载碰到函数默认参数",[153,17390,17392],{"className":3305,"code":17391,"language":3307,"meta":158,"style":158},"\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",[71,17393,17394,17399,17404,17408,17424,17428,17441,17445,17449,17467,17471,17484,17488,17492,17496,17501,17505,17529,17533,17546,17550,17554,17568,17572,17585,17589,17593,17601,17605,17617,17627,17640,17644,17648,17656,17660,17670,17674,17682],{"__ignoreMap":158},[162,17395,17396],{"class":164,"line":165},[162,17397,17398],{"class":361},"\u002F\u002F函数重载注意事项\n",[162,17400,17401],{"class":164,"line":197},[162,17402,17403],{"class":361},"\u002F\u002F1、引用作为重载条件\n",[162,17405,17406],{"class":164,"line":228},[162,17407,301],{"emptyLinePlaceholder":300},[162,17409,17410,17412,17414,17416,17418,17420,17422],{"class":164,"line":252},[162,17411,8471],{"class":172},[162,17413,14481],{"class":5082},[162,17415,604],{"class":168},[162,17417,3319],{"class":172},[162,17419,13683],{"class":172},[162,17421,3538],{"class":671},[162,17423,434],{"class":168},[162,17425,17426],{"class":164,"line":328},[162,17427,4685],{"class":168},[162,17429,17430,17432,17434,17437,17439],{"class":164,"line":466},[162,17431,9635],{"class":168},[162,17433,4316],{"class":172},[162,17435,17436],{"class":179}," \"func (int &a) 调用 \"",[162,17438,4584],{"class":172},[162,17440,11943],{"class":168},[162,17442,17443],{"class":164,"line":471},[162,17444,1498],{"class":168},[162,17446,17447],{"class":164,"line":687},[162,17448,301],{"emptyLinePlaceholder":300},[162,17450,17451,17453,17455,17457,17459,17461,17463,17465],{"class":164,"line":692},[162,17452,8471],{"class":172},[162,17454,14481],{"class":5082},[162,17456,604],{"class":168},[162,17458,9898],{"class":172},[162,17460,5500],{"class":172},[162,17462,13683],{"class":172},[162,17464,3538],{"class":671},[162,17466,434],{"class":168},[162,17468,17469],{"class":164,"line":698},[162,17470,4685],{"class":168},[162,17472,17473,17475,17477,17480,17482],{"class":164,"line":2955},[162,17474,9635],{"class":168},[162,17476,4316],{"class":172},[162,17478,17479],{"class":179}," \"func (const int &a) 调用 \"",[162,17481,4584],{"class":172},[162,17483,11943],{"class":168},[162,17485,17486],{"class":164,"line":2960},[162,17487,1498],{"class":168},[162,17489,17490],{"class":164,"line":2971},[162,17491,301],{"emptyLinePlaceholder":300},[162,17493,17494],{"class":164,"line":2984},[162,17495,301],{"emptyLinePlaceholder":300},[162,17497,17498],{"class":164,"line":2989},[162,17499,17500],{"class":361},"\u002F\u002F2、函数重载碰到函数默认参数\n",[162,17502,17503],{"class":164,"line":3011},[162,17504,301],{"emptyLinePlaceholder":300},[162,17506,17507,17509,17511,17513,17515,17517,17519,17521,17523,17525,17527],{"class":164,"line":3022},[162,17508,8471],{"class":172},[162,17510,16713],{"class":5082},[162,17512,604],{"class":168},[162,17514,3319],{"class":172},[162,17516,4538],{"class":671},[162,17518,183],{"class":168},[162,17520,3319],{"class":172},[162,17522,5950],{"class":671},[162,17524,16659],{"class":172},[162,17526,5156],{"class":207},[162,17528,434],{"class":168},[162,17530,17531],{"class":164,"line":3027},[162,17532,4685],{"class":168},[162,17534,17535,17537,17539,17542,17544],{"class":164,"line":3046},[162,17536,9635],{"class":168},[162,17538,4316],{"class":172},[162,17540,17541],{"class":179}," \"func2(int a, int b = 10) 调用\"",[162,17543,4584],{"class":172},[162,17545,11943],{"class":168},[162,17547,17548],{"class":164,"line":3052},[162,17549,1498],{"class":168},[162,17551,17552],{"class":164,"line":3057},[162,17553,301],{"emptyLinePlaceholder":300},[162,17555,17556,17558,17560,17562,17564,17566],{"class":164,"line":3072},[162,17557,8471],{"class":172},[162,17559,16713],{"class":5082},[162,17561,604],{"class":168},[162,17563,3319],{"class":172},[162,17565,4538],{"class":671},[162,17567,434],{"class":168},[162,17569,17570],{"class":164,"line":3077},[162,17571,4685],{"class":168},[162,17573,17574,17576,17578,17581,17583],{"class":164,"line":3100},[162,17575,9635],{"class":168},[162,17577,4316],{"class":172},[162,17579,17580],{"class":179}," \"func2(int a) 调用\"",[162,17582,4584],{"class":172},[162,17584,11943],{"class":168},[162,17586,17587],{"class":164,"line":3140},[162,17588,1498],{"class":168},[162,17590,17591],{"class":164,"line":4878},[162,17592,301],{"emptyLinePlaceholder":300},[162,17594,17595,17597,17599],{"class":164,"line":4883},[162,17596,3319],{"class":172},[162,17598,5092],{"class":5082},[162,17600,13951],{"class":168},[162,17602,17603],{"class":164,"line":4897},[162,17604,16305],{"class":168},[162,17606,17607,17609,17611,17613,17615],{"class":164,"line":4902},[162,17608,5103],{"class":172},[162,17610,13967],{"class":168},[162,17612,173],{"class":172},[162,17614,5156],{"class":207},[162,17616,4433],{"class":168},[162,17618,17619,17621,17624],{"class":164,"line":5694},[162,17620,16380],{"class":5082},[162,17622,17623],{"class":168},"(a);",[162,17625,17626],{"class":361}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[162,17628,17629,17631,17633,17635,17637],{"class":164,"line":5708},[162,17630,16380],{"class":5082},[162,17632,604],{"class":168},[162,17634,1006],{"class":207},[162,17636,9073],{"class":168},[162,17638,17639],{"class":361},"\u002F\u002F调用有const   10是个常量\n",[162,17641,17642],{"class":164,"line":5716},[162,17643,301],{"emptyLinePlaceholder":300},[162,17645,17646],{"class":164,"line":5721},[162,17647,301],{"emptyLinePlaceholder":300},[162,17649,17650,17653],{"class":164,"line":5727},[162,17651,17652],{"class":361},"    \u002F\u002Ffunc2(10);",[162,17654,17655],{"class":361}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[162,17657,17658],{"class":164,"line":5733},[162,17659,301],{"emptyLinePlaceholder":300},[162,17661,17662,17664,17666,17668],{"class":164,"line":5738},[162,17663,5421],{"class":5082},[162,17665,604],{"class":168},[162,17667,5426],{"class":179},[162,17669,5836],{"class":168},[162,17671,17672],{"class":164,"line":11052},[162,17673,301],{"emptyLinePlaceholder":300},[162,17675,17676,17678,17680],{"class":164,"line":11076},[162,17677,7203],{"class":172},[162,17679,2717],{"class":207},[162,17681,4433],{"class":168},[162,17683,17684],{"class":164,"line":11081},[162,17685,1498],{"class":168},[3219,17687,17688],{},"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":158,"searchDepth":197,"depth":197,"links":17690},[17691,17692,17693],{"id":16624,"depth":197,"text":16625},{"id":16880,"depth":197,"text":16881},{"id":17002,"depth":197,"text":17003,"children":17694},[17695,17696],{"id":17009,"depth":228,"text":17010},{"id":17379,"depth":228,"text":17380},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":16616,"description":158},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":17703,"title":17704,"body":17705,"description":26456,"extension":3242,"meta":26457,"navigation":300,"path":26458,"seo":26459,"stem":26460,"__hash__":26461},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":17706,"toc":26437},[17707,17710,17716,17723,17728,17731,17734,17737,17741,17745,17748,17751,17759,17764,17767,17774,17779,17937,17940,18193,18196,18199,18202,18207,18210,18213,18224,18229,18465,18469,18479,18481,18489,18636,18640,18643,18646,18650,19094,19098,19106,19114,20026,20033,20038,20666,20669,20672,20675,20794,20797,20884,20887,21013,21016,21110,21113,21466,21470,21478,21482,21489,21492,21495,21506,21512,21517,21529,21537,21557,21565,21582,21768,21771,21775,21778,21781,21784,21787,21790,21793,21796,22256,22262,22266,22269,22280,22867,22870,23359,23363,23366,23369,23372,23375,23378,23386,23782,23786,23789,23792,24239,24242,24245,24250,24253,24258,24261,24265,24268,24270,24276,24279,24585,24595,24636,24640,24643,24645,24678,24681,24988,24990,25005,25008,25031,25040,25046,25049,25053,25056,25059,25064,25075,25080,25088,25093,25223,25226,25229,25404,25409,25621,25625,25628,25742,25747,25986,25990,25994,25997,26000,26005,26110,26113,26116,26119,26123,26234,26237,26240,26245,26297,26300,26303,26308,26354,26357,26362,26430,26432,26435],[10,17708,17704],{"id":17709},"_8类和对象",[19,17711,17712,17713],{},"C++面向对象的三大特性为",[3453,17714,17715],{},"封装、继承、多态",[19,17717,17718,17719,17722],{},"C++认为",[3453,17720,17721],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,17724,17725],{},[3453,17726,17727],{},"例如：",[19,17729,17730],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,17732,17733],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,17735,17736],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,17738,17740],{"id":17739},"_81封装","8.1封装",[3284,17742,17744],{"id":17743},"_811封装的意义","8.1.1封装的意义",[19,17746,17747],{},"封装是C++面向对象三大特性之一",[19,17749,17750],{},"封装的意义：",[4279,17752,17753,17756],{},[1455,17754,17755],{},"将属性和行为作为一个整体，表现生活中的事物",[1455,17757,17758],{},"将属性和行为加以权限控制",[19,17760,17761],{},[3453,17762,17763],{},"封装意义一：",[19,17765,17766],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,17768,17769,16889,17771],{},[3453,17770,8289],{},[71,17772,17773],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[1452,17775,17776],{},[1455,17777,17778],{},"**示例1：**设计一个圆类，求圆的周长",[153,17780,17782],{"className":3305,"code":17781,"language":3307,"meta":158,"style":158},"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",[71,17783,17784,17792,17796,17801,17806,17811,17816,17823,17828,17838,17842,17859,17863,17867,17875,17879,17884,17889,17894,17899,17910,17933],{"__ignoreMap":158},[162,17785,17786,17789],{"class":164,"line":165},[162,17787,17788],{"class":172},"class",[162,17790,17791],{"class":5082}," Circle\n",[162,17793,17794],{"class":164,"line":197},[162,17795,4685],{"class":168},[162,17797,17798],{"class":164,"line":228},[162,17799,17800],{"class":361},"    \u002F\u002F访问权限\n",[162,17802,17803],{"class":164,"line":252},[162,17804,17805],{"class":361},"    \u002F\u002F公共权限\n",[162,17807,17808],{"class":164,"line":328},[162,17809,17810],{"class":172},"public:\n",[162,17812,17813],{"class":164,"line":466},[162,17814,17815],{"class":361},"    \u002F\u002F属性\n",[162,17817,17818,17820],{"class":164,"line":471},[162,17819,5103],{"class":172},[162,17821,17822],{"class":168}," m_r;\n",[162,17824,17825],{"class":164,"line":687},[162,17826,17827],{"class":361},"    \u002F\u002F行为\n",[162,17829,17830,17833,17836],{"class":164,"line":692},[162,17831,17832],{"class":172},"    double",[162,17834,17835],{"class":5082}," calculateZC",[162,17837,1526],{"class":168},[162,17839,17840],{"class":164,"line":698},[162,17841,5148],{"class":168},[162,17843,17844,17847,17849,17851,17854,17856],{"class":164,"line":2955},[162,17845,17846],{"class":172},"        return",[162,17848,2711],{"class":207},[162,17850,3745],{"class":172},[162,17852,17853],{"class":168},"PI",[162,17855,3745],{"class":172},[162,17857,17858],{"class":168},"m_r;\n",[162,17860,17861],{"class":164,"line":2960},[162,17862,5305],{"class":168},[162,17864,17865],{"class":164,"line":2971},[162,17866,7108],{"class":168},[162,17868,17869,17871,17873],{"class":164,"line":2984},[162,17870,3319],{"class":172},[162,17872,5092],{"class":5082},[162,17874,1526],{"class":168},[162,17876,17877],{"class":164,"line":2989},[162,17878,4685],{"class":168},[162,17880,17881],{"class":164,"line":3011},[162,17882,17883],{"class":361},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[162,17885,17886],{"class":164,"line":3022},[162,17887,17888],{"class":361},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[162,17890,17891],{"class":164,"line":3027},[162,17892,17893],{"class":168},"    Circle c1;\n",[162,17895,17896],{"class":164,"line":3046},[162,17897,17898],{"class":361},"    \u002F\u002F给圆对象 的属性进行赋值\n",[162,17900,17901,17904,17906,17908],{"class":164,"line":3052},[162,17902,17903],{"class":168},"    c1.m_r",[162,17905,173],{"class":172},[162,17907,1006],{"class":207},[162,17909,4433],{"class":168},[162,17911,17912,17914,17916,17919,17921,17924,17927,17929,17931],{"class":164,"line":3057},[162,17913,4690],{"class":168},[162,17915,4316],{"class":172},[162,17917,17918],{"class":179},"\"圆的周长\"",[162,17920,4316],{"class":172},[162,17922,17923],{"class":168},"c1.",[162,17925,17926],{"class":5082},"calculateZC",[162,17928,5544],{"class":168},[162,17930,4316],{"class":172},[162,17932,4338],{"class":168},[162,17934,17935],{"class":164,"line":3072},[162,17936,1498],{"class":168},[19,17938,17939],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[153,17941,17943],{"className":3305,"code":17942,"language":3307,"meta":158,"style":158},"#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",[71,17944,17945,17951,17961,17967,17973,17977,17981,17986,17993,17998,18016,18020,18030,18034,18039,18055,18059,18069,18073,18078,18086,18090,18122,18126,18130,18138,18142,18147,18152,18166,18180,18189],{"__ignoreMap":158},[162,17946,17947,17949],{"class":164,"line":165},[162,17948,5068],{"class":172},[162,17950,5071],{"class":179},[162,17952,17953,17955,17957,17959],{"class":164,"line":197},[162,17954,5076],{"class":172},[162,17956,5079],{"class":172},[162,17958,5083],{"class":5082},[162,17960,4433],{"class":168},[162,17962,17963,17965],{"class":164,"line":228},[162,17964,5068],{"class":172},[162,17966,10853],{"class":179},[162,17968,17969,17971],{"class":164,"line":252},[162,17970,17788],{"class":172},[162,17972,10866],{"class":5082},[162,17974,17975],{"class":164,"line":328},[162,17976,4685],{"class":168},[162,17978,17979],{"class":164,"line":466},[162,17980,17810],{"class":172},[162,17982,17983],{"class":164,"line":471},[162,17984,17985],{"class":168},"    string m_name;\n",[162,17987,17988,17990],{"class":164,"line":687},[162,17989,5103],{"class":172},[162,17991,17992],{"class":168}," m_id;\n",[162,17994,17995],{"class":164,"line":692},[162,17996,17997],{"class":361},"    \u002F\u002F赋值姓名\n",[162,17999,18000,18003,18006,18008,18011,18014],{"class":164,"line":698},[162,18001,18002],{"class":172},"    void",[162,18004,18005],{"class":5082}," setName",[162,18007,604],{"class":168},[162,18009,18010],{"class":5082},"string",[162,18012,18013],{"class":671}," name",[162,18015,434],{"class":168},[162,18017,18018],{"class":164,"line":2955},[162,18019,5148],{"class":168},[162,18021,18022,18025,18027],{"class":164,"line":2960},[162,18023,18024],{"class":168},"        m_name",[162,18026,173],{"class":172},[162,18028,18029],{"class":168},"name;\n",[162,18031,18032],{"class":164,"line":2971},[162,18033,5305],{"class":168},[162,18035,18036],{"class":164,"line":2984},[162,18037,18038],{"class":361},"    \u002F\u002F赋值学号\n",[162,18040,18041,18043,18046,18048,18050,18053],{"class":164,"line":2989},[162,18042,18002],{"class":172},[162,18044,18045],{"class":5082}," setId",[162,18047,604],{"class":168},[162,18049,3319],{"class":172},[162,18051,18052],{"class":671}," id",[162,18054,434],{"class":168},[162,18056,18057],{"class":164,"line":3011},[162,18058,5148],{"class":168},[162,18060,18061,18064,18066],{"class":164,"line":3022},[162,18062,18063],{"class":168},"        m_id",[162,18065,173],{"class":172},[162,18067,18068],{"class":168},"id;\n",[162,18070,18071],{"class":164,"line":3027},[162,18072,5305],{"class":168},[162,18074,18075],{"class":164,"line":3046},[162,18076,18077],{"class":361},"    \u002F\u002F打印学生信息\n",[162,18079,18080,18082,18084],{"class":164,"line":3052},[162,18081,18002],{"class":172},[162,18083,12715],{"class":5082},[162,18085,1526],{"class":168},[162,18087,18088],{"class":164,"line":3057},[162,18089,5148],{"class":168},[162,18091,18092,18094,18096,18099,18101,18104,18106,18108,18110,18113,18115,18118,18120],{"class":164,"line":3072},[162,18093,6565],{"class":168},[162,18095,4316],{"class":172},[162,18097,18098],{"class":179},"\"姓名：\"",[162,18100,4316],{"class":172},[162,18102,18103],{"class":168},"m_name",[162,18105,4316],{"class":172},[162,18107,7471],{"class":179},[162,18109,4316],{"class":172},[162,18111,18112],{"class":179},"\"学号：\"",[162,18114,4316],{"class":172},[162,18116,18117],{"class":168},"m_id",[162,18119,4316],{"class":172},[162,18121,4338],{"class":168},[162,18123,18124],{"class":164,"line":3077},[162,18125,5305],{"class":168},[162,18127,18128],{"class":164,"line":3100},[162,18129,7108],{"class":168},[162,18131,18132,18134,18136],{"class":164,"line":3140},[162,18133,3319],{"class":172},[162,18135,5092],{"class":5082},[162,18137,1526],{"class":168},[162,18139,18140],{"class":164,"line":4878},[162,18141,4685],{"class":168},[162,18143,18144],{"class":164,"line":4883},[162,18145,18146],{"class":361},"    \u002F\u002F实例化\n",[162,18148,18149],{"class":164,"line":4897},[162,18150,18151],{"class":168},"    Student s1;\n",[162,18153,18154,18157,18160,18162,18164],{"class":164,"line":4902},[162,18155,18156],{"class":168},"    s1.",[162,18158,18159],{"class":5082},"setName",[162,18161,604],{"class":168},[162,18163,11020],{"class":179},[162,18165,5836],{"class":168},[162,18167,18168,18170,18173,18175,18178],{"class":164,"line":5694},[162,18169,18156],{"class":168},[162,18171,18172],{"class":5082},"setId",[162,18174,604],{"class":168},[162,18176,18177],{"class":207},"123456",[162,18179,5836],{"class":168},[162,18181,18182,18184,18187],{"class":164,"line":5708},[162,18183,18156],{"class":168},[162,18185,18186],{"class":5082},"printInfo",[162,18188,8743],{"class":168},[162,18190,18191],{"class":164,"line":5716},[162,18192,1498],{"class":168},[19,18194,18195],{},"类中的属性和行为统称为成员",[19,18197,18198],{},"属性：成员属性(成员变量)",[19,18200,18201],{},"方法：成员函数(成员方法)",[19,18203,18204],{},[3453,18205,18206],{},"封装意义二：",[19,18208,18209],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,18211,18212],{},"访问权限有三种：",[1452,18214,18215,18218,18221],{},[1455,18216,18217],{},"public        公共权限",[1455,18219,18220],{},"protected 保护权限",[1455,18222,18223],{},"private      私有权限",[19,18225,18226],{},[3453,18227,18228],{},"示例：",[153,18230,18232],{"className":13041,"code":18231,"language":13043,"meta":158,"style":158},"\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",[71,18233,18234,18239,18244,18249,18254,18258,18265,18269,18274,18278,18283,18287,18292,18297,18302,18306,18311,18316,18323,18327,18331,18339,18343,18354,18366,18378,18382,18386,18390,18398,18402,18407,18419,18427,18435,18439,18449,18453,18461],{"__ignoreMap":158},[162,18235,18236],{"class":164,"line":165},[162,18237,18238],{"class":361},"\u002F\u002F三种权限\n",[162,18240,18241],{"class":164,"line":197},[162,18242,18243],{"class":361},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[162,18245,18246],{"class":164,"line":228},[162,18247,18248],{"class":361},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[162,18250,18251],{"class":164,"line":252},[162,18252,18253],{"class":361},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[162,18255,18256],{"class":164,"line":328},[162,18257,301],{"emptyLinePlaceholder":300},[162,18259,18260,18262],{"class":164,"line":466},[162,18261,17788],{"class":172},[162,18263,18264],{"class":5082}," Person\n",[162,18266,18267],{"class":164,"line":471},[162,18268,4685],{"class":168},[162,18270,18271],{"class":164,"line":687},[162,18272,18273],{"class":361},"    \u002F\u002F姓名  公共权限\n",[162,18275,18276],{"class":164,"line":692},[162,18277,17810],{"class":172},[162,18279,18280],{"class":164,"line":698},[162,18281,18282],{"class":168},"    string m_Name;\n",[162,18284,18285],{"class":164,"line":2955},[162,18286,301],{"emptyLinePlaceholder":300},[162,18288,18289],{"class":164,"line":2960},[162,18290,18291],{"class":361},"    \u002F\u002F汽车  保护权限\n",[162,18293,18294],{"class":164,"line":2971},[162,18295,18296],{"class":172},"protected:\n",[162,18298,18299],{"class":164,"line":2984},[162,18300,18301],{"class":168},"    string m_Car;\n",[162,18303,18304],{"class":164,"line":2989},[162,18305,301],{"emptyLinePlaceholder":300},[162,18307,18308],{"class":164,"line":3011},[162,18309,18310],{"class":361},"    \u002F\u002F银行卡密码  私有权限\n",[162,18312,18313],{"class":164,"line":3022},[162,18314,18315],{"class":172},"private:\n",[162,18317,18318,18320],{"class":164,"line":3027},[162,18319,5103],{"class":172},[162,18321,18322],{"class":168}," m_Password;\n",[162,18324,18325],{"class":164,"line":3046},[162,18326,301],{"emptyLinePlaceholder":300},[162,18328,18329],{"class":164,"line":3052},[162,18330,17810],{"class":172},[162,18332,18333,18335,18337],{"class":164,"line":3057},[162,18334,18002],{"class":172},[162,18336,14481],{"class":5082},[162,18338,1526],{"class":168},[162,18340,18341],{"class":164,"line":3072},[162,18342,5148],{"class":168},[162,18344,18345,18348,18350,18352],{"class":164,"line":3077},[162,18346,18347],{"class":168},"        m_Name ",[162,18349,173],{"class":172},[162,18351,12041],{"class":179},[162,18353,4433],{"class":168},[162,18355,18356,18359,18361,18364],{"class":164,"line":3100},[162,18357,18358],{"class":168},"        m_Car ",[162,18360,173],{"class":172},[162,18362,18363],{"class":179}," \"拖拉机\"",[162,18365,4433],{"class":168},[162,18367,18368,18371,18373,18376],{"class":164,"line":3140},[162,18369,18370],{"class":168},"        m_Password ",[162,18372,173],{"class":172},[162,18374,18375],{"class":207}," 123456",[162,18377,4433],{"class":168},[162,18379,18380],{"class":164,"line":4878},[162,18381,5305],{"class":168},[162,18383,18384],{"class":164,"line":4883},[162,18385,7108],{"class":168},[162,18387,18388],{"class":164,"line":4897},[162,18389,301],{"emptyLinePlaceholder":300},[162,18391,18392,18394,18396],{"class":164,"line":4902},[162,18393,3319],{"class":172},[162,18395,5092],{"class":5082},[162,18397,13951],{"class":168},[162,18399,18400],{"class":164,"line":5694},[162,18401,301],{"emptyLinePlaceholder":300},[162,18403,18404],{"class":164,"line":5708},[162,18405,18406],{"class":168},"    Person p;\n",[162,18408,18409,18412,18414,18417],{"class":164,"line":5716},[162,18410,18411],{"class":168},"    p.m_Name ",[162,18413,173],{"class":172},[162,18415,18416],{"class":179}," \"李四\"",[162,18418,4433],{"class":168},[162,18420,18421,18424],{"class":164,"line":5721},[162,18422,18423],{"class":361},"    \u002F\u002Fp.m_Car = \"奔驰\";",[162,18425,18426],{"class":361},"  \u002F\u002F保护权限类外访问不到\n",[162,18428,18429,18432],{"class":164,"line":5727},[162,18430,18431],{"class":361},"    \u002F\u002Fp.m_Password = 123;",[162,18433,18434],{"class":361}," \u002F\u002F私有权限类外访问不到\n",[162,18436,18437],{"class":164,"line":5733},[162,18438,301],{"emptyLinePlaceholder":300},[162,18440,18441,18443,18445,18447],{"class":164,"line":5738},[162,18442,5421],{"class":5082},[162,18444,604],{"class":168},[162,18446,5426],{"class":179},[162,18448,5836],{"class":168},[162,18450,18451],{"class":164,"line":11052},[162,18452,301],{"emptyLinePlaceholder":300},[162,18454,18455,18457,18459],{"class":164,"line":11076},[162,18456,7203],{"class":172},[162,18458,2717],{"class":207},[162,18460,4433],{"class":168},[162,18462,18463],{"class":164,"line":11081},[162,18464,1498],{"class":168},[3284,18466,18468],{"id":18467},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,18470,18471,18472,18475,18476],{},"在C++中 struct和class唯一的",[3453,18473,18474],{},"区别","就在于 ",[3453,18477,18478],{},"默认的访问权限不同",[19,18480,1794],{},[4279,18482,18483,18486],{},[1455,18484,18485],{},"struct 默认权限为公共",[1455,18487,18488],{},"class   默认权限为私有",[153,18490,18492],{"className":13041,"code":18491,"language":13043,"meta":158,"style":158},"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",[71,18493,18494,18501,18505,18515,18519,18523,18530,18534,18544,18548,18552,18560,18564,18569,18583,18587,18592,18606,18610,18620,18624,18632],{"__ignoreMap":158},[162,18495,18496,18498],{"class":164,"line":165},[162,18497,17788],{"class":172},[162,18499,18500],{"class":5082}," C1\n",[162,18502,18503],{"class":164,"line":197},[162,18504,4685],{"class":168},[162,18506,18507,18509,18512],{"class":164,"line":228},[162,18508,5103],{"class":172},[162,18510,18511],{"class":168},"  m_A;",[162,18513,18514],{"class":361}," \u002F\u002F默认是私有权限\n",[162,18516,18517],{"class":164,"line":252},[162,18518,7108],{"class":168},[162,18520,18521],{"class":164,"line":328},[162,18522,301],{"emptyLinePlaceholder":300},[162,18524,18525,18527],{"class":164,"line":466},[162,18526,10863],{"class":172},[162,18528,18529],{"class":5082}," C2\n",[162,18531,18532],{"class":164,"line":471},[162,18533,4685],{"class":168},[162,18535,18536,18538,18541],{"class":164,"line":687},[162,18537,5103],{"class":172},[162,18539,18540],{"class":168}," m_A;",[162,18542,18543],{"class":361},"  \u002F\u002F默认是公共权限\n",[162,18545,18546],{"class":164,"line":692},[162,18547,7108],{"class":168},[162,18549,18550],{"class":164,"line":698},[162,18551,301],{"emptyLinePlaceholder":300},[162,18553,18554,18556,18558],{"class":164,"line":2955},[162,18555,3319],{"class":172},[162,18557,5092],{"class":5082},[162,18559,13951],{"class":168},[162,18561,18562],{"class":164,"line":2960},[162,18563,301],{"emptyLinePlaceholder":300},[162,18565,18566],{"class":164,"line":2971},[162,18567,18568],{"class":168},"    C1 c1;\n",[162,18570,18571,18574,18576,18578,18580],{"class":164,"line":2984},[162,18572,18573],{"class":168},"    c1.m_A ",[162,18575,173],{"class":172},[162,18577,5156],{"class":207},[162,18579,3367],{"class":168},[162,18581,18582],{"class":361}," \u002F\u002F错误，访问权限是私有\n",[162,18584,18585],{"class":164,"line":2989},[162,18586,301],{"emptyLinePlaceholder":300},[162,18588,18589],{"class":164,"line":3011},[162,18590,18591],{"class":168},"    C2 c2;\n",[162,18593,18594,18597,18599,18601,18603],{"class":164,"line":3022},[162,18595,18596],{"class":168},"    c2.m_A ",[162,18598,173],{"class":172},[162,18600,5156],{"class":207},[162,18602,3367],{"class":168},[162,18604,18605],{"class":361}," \u002F\u002F正确，访问权限是公共\n",[162,18607,18608],{"class":164,"line":3027},[162,18609,301],{"emptyLinePlaceholder":300},[162,18611,18612,18614,18616,18618],{"class":164,"line":3046},[162,18613,5421],{"class":5082},[162,18615,604],{"class":168},[162,18617,5426],{"class":179},[162,18619,5836],{"class":168},[162,18621,18622],{"class":164,"line":3052},[162,18623,301],{"emptyLinePlaceholder":300},[162,18625,18626,18628,18630],{"class":164,"line":3057},[162,18627,7203],{"class":172},[162,18629,2717],{"class":207},[162,18631,4433],{"class":168},[162,18633,18634],{"class":164,"line":3072},[162,18635,1498],{"class":168},[3284,18637,18639],{"id":18638},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,18641,18642],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,18644,18645],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,18647,18648],{},[3453,18649,18228],{},[153,18651,18653],{"className":13041,"code":18652,"language":13043,"meta":158,"style":158},"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",[71,18654,18655,18664,18668,18672,18677,18691,18700,18704,18714,18718,18725,18729,18733,18737,18742,18751,18758,18762,18767,18783,18806,18819,18826,18830,18839,18843,18847,18852,18868,18878,18882,18886,18890,18898,18902,18912,18916,18924,18928,18932,18940,18944,18948,18953,18966,18989,18993,18998,19011,19033,19037,19042,19056,19064,19068,19078,19082,19090],{"__ignoreMap":158},[162,18656,18657,18659,18662],{"class":164,"line":165},[162,18658,17788],{"class":172},[162,18660,18661],{"class":5082}," Person",[162,18663,1722],{"class":168},[162,18665,18666],{"class":164,"line":197},[162,18667,17810],{"class":172},[162,18669,18670],{"class":164,"line":228},[162,18671,301],{"emptyLinePlaceholder":300},[162,18673,18674],{"class":164,"line":252},[162,18675,18676],{"class":361},"    \u002F\u002F姓名设置可读可写\n",[162,18678,18679,18681,18683,18685,18687,18689],{"class":164,"line":328},[162,18680,18002],{"class":172},[162,18682,18005],{"class":5082},[162,18684,604],{"class":168},[162,18686,18010],{"class":5082},[162,18688,18013],{"class":671},[162,18690,15537],{"class":168},[162,18692,18693,18695,18697],{"class":164,"line":466},[162,18694,18347],{"class":168},[162,18696,173],{"class":172},[162,18698,18699],{"class":168}," name;\n",[162,18701,18702],{"class":164,"line":471},[162,18703,5305],{"class":168},[162,18705,18706,18709,18712],{"class":164,"line":687},[162,18707,18708],{"class":5082},"    string",[162,18710,18711],{"class":5082}," getName",[162,18713,1526],{"class":168},[162,18715,18716],{"class":164,"line":692},[162,18717,5148],{"class":168},[162,18719,18720,18722],{"class":164,"line":698},[162,18721,17846],{"class":172},[162,18723,18724],{"class":168}," m_Name;\n",[162,18726,18727],{"class":164,"line":2955},[162,18728,5305],{"class":168},[162,18730,18731],{"class":164,"line":2960},[162,18732,301],{"emptyLinePlaceholder":300},[162,18734,18735],{"class":164,"line":2971},[162,18736,301],{"emptyLinePlaceholder":300},[162,18738,18739],{"class":164,"line":2984},[162,18740,18741],{"class":361},"    \u002F\u002F获取年龄 \n",[162,18743,18744,18746,18749],{"class":164,"line":2989},[162,18745,5103],{"class":172},[162,18747,18748],{"class":5082}," getAge",[162,18750,13951],{"class":168},[162,18752,18753,18755],{"class":164,"line":3011},[162,18754,17846],{"class":172},[162,18756,18757],{"class":168}," m_Age;\n",[162,18759,18760],{"class":164,"line":3022},[162,18761,5305],{"class":168},[162,18763,18764],{"class":164,"line":3027},[162,18765,18766],{"class":361},"    \u002F\u002F设置年龄\n",[162,18768,18769,18771,18774,18776,18778,18781],{"class":164,"line":3046},[162,18770,18002],{"class":172},[162,18772,18773],{"class":5082}," setAge",[162,18775,604],{"class":168},[162,18777,3319],{"class":172},[162,18779,18780],{"class":671}," age",[162,18782,15537],{"class":168},[162,18784,18785,18787,18790,18792,18794,18796,18799,18801,18804],{"class":164,"line":3052},[162,18786,5614],{"class":172},[162,18788,18789],{"class":168}," (age ",[162,18791,4187],{"class":172},[162,18793,2717],{"class":207},[162,18795,6369],{"class":172},[162,18797,18798],{"class":168}," age ",[162,18800,3000],{"class":172},[162,18802,18803],{"class":207}," 150",[162,18805,15537],{"class":168},[162,18807,18808,18810,18812,18815,18817],{"class":164,"line":3057},[162,18809,12819],{"class":168},[162,18811,4316],{"class":172},[162,18813,18814],{"class":179}," \"你个老妖精!\"",[162,18816,4584],{"class":172},[162,18818,11943],{"class":168},[162,18820,18821,18824],{"class":164,"line":3072},[162,18822,18823],{"class":172},"            return",[162,18825,4433],{"class":168},[162,18827,18828],{"class":164,"line":3077},[162,18829,5646],{"class":168},[162,18831,18832,18835,18837],{"class":164,"line":3100},[162,18833,18834],{"class":168},"        m_Age ",[162,18836,173],{"class":172},[162,18838,10901],{"class":168},[162,18840,18841],{"class":164,"line":3140},[162,18842,5305],{"class":168},[162,18844,18845],{"class":164,"line":4878},[162,18846,301],{"emptyLinePlaceholder":300},[162,18848,18849],{"class":164,"line":4883},[162,18850,18851],{"class":361},"    \u002F\u002F情人设置为只写\n",[162,18853,18854,18856,18859,18861,18863,18866],{"class":164,"line":4897},[162,18855,18002],{"class":172},[162,18857,18858],{"class":5082}," setLover",[162,18860,604],{"class":168},[162,18862,18010],{"class":5082},[162,18864,18865],{"class":671}," lover",[162,18867,15537],{"class":168},[162,18869,18870,18873,18875],{"class":164,"line":4902},[162,18871,18872],{"class":168},"        m_Lover ",[162,18874,173],{"class":172},[162,18876,18877],{"class":168}," lover;\n",[162,18879,18880],{"class":164,"line":5694},[162,18881,5305],{"class":168},[162,18883,18884],{"class":164,"line":5708},[162,18885,301],{"emptyLinePlaceholder":300},[162,18887,18888],{"class":164,"line":5716},[162,18889,18315],{"class":172},[162,18891,18892,18895],{"class":164,"line":5721},[162,18893,18894],{"class":168},"    string m_Name;",[162,18896,18897],{"class":361}," \u002F\u002F可读可写  姓名\n",[162,18899,18900],{"class":164,"line":5727},[162,18901,16305],{"class":168},[162,18903,18904,18906,18909],{"class":164,"line":5733},[162,18905,5103],{"class":172},[162,18907,18908],{"class":168}," m_Age;",[162,18910,18911],{"class":361}," \u002F\u002F只读  年龄\n",[162,18913,18914],{"class":164,"line":5738},[162,18915,301],{"emptyLinePlaceholder":300},[162,18917,18918,18921],{"class":164,"line":11052},[162,18919,18920],{"class":168},"    string m_Lover;",[162,18922,18923],{"class":361}," \u002F\u002F只写  情人\n",[162,18925,18926],{"class":164,"line":11076},[162,18927,7108],{"class":168},[162,18929,18930],{"class":164,"line":11081},[162,18931,301],{"emptyLinePlaceholder":300},[162,18933,18934,18936,18938],{"class":164,"line":11087},[162,18935,3319],{"class":172},[162,18937,5092],{"class":5082},[162,18939,13951],{"class":168},[162,18941,18942],{"class":164,"line":11114},[162,18943,301],{"emptyLinePlaceholder":300},[162,18945,18946],{"class":164,"line":11119},[162,18947,18406],{"class":168},[162,18949,18950],{"class":164,"line":11125},[162,18951,18952],{"class":361},"    \u002F\u002F姓名设置\n",[162,18954,18955,18958,18960,18962,18964],{"class":164,"line":11137},[162,18956,18957],{"class":168},"    p.",[162,18959,18159],{"class":5082},[162,18961,604],{"class":168},[162,18963,11020],{"class":179},[162,18965,5836],{"class":168},[162,18967,18968,18970,18972,18975,18977,18980,18983,18985,18987],{"class":164,"line":11149},[162,18969,9635],{"class":168},[162,18971,4316],{"class":172},[162,18973,18974],{"class":179}," \"姓名： \"",[162,18976,4584],{"class":172},[162,18978,18979],{"class":168}," p.",[162,18981,18982],{"class":5082},"getName",[162,18984,16145],{"class":168},[162,18986,4316],{"class":172},[162,18988,11943],{"class":168},[162,18990,18991],{"class":164,"line":11161},[162,18992,301],{"emptyLinePlaceholder":300},[162,18994,18995],{"class":164,"line":12816},[162,18996,18997],{"class":361},"    \u002F\u002F年龄设置\n",[162,18999,19000,19002,19005,19007,19009],{"class":164,"line":12841},[162,19001,18957],{"class":168},[162,19003,19004],{"class":5082},"setAge",[162,19006,604],{"class":168},[162,19008,3941],{"class":207},[162,19010,5836],{"class":168},[162,19012,19013,19015,19017,19020,19022,19024,19027,19029,19031],{"class":164,"line":12864},[162,19014,9635],{"class":168},[162,19016,4316],{"class":172},[162,19018,19019],{"class":179}," \"年龄： \"",[162,19021,4584],{"class":172},[162,19023,18979],{"class":168},[162,19025,19026],{"class":5082},"getAge",[162,19028,16145],{"class":168},[162,19030,4316],{"class":172},[162,19032,11943],{"class":168},[162,19034,19035],{"class":164,"line":12888},[162,19036,301],{"emptyLinePlaceholder":300},[162,19038,19039],{"class":164,"line":12893},[162,19040,19041],{"class":361},"    \u002F\u002F情人设置\n",[162,19043,19044,19046,19049,19051,19054],{"class":164,"line":12898},[162,19045,18957],{"class":168},[162,19047,19048],{"class":5082},"setLover",[162,19050,604],{"class":168},[162,19052,19053],{"class":179},"\"苍井\"",[162,19055,5836],{"class":168},[162,19057,19058,19061],{"class":164,"line":12903},[162,19059,19060],{"class":361},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[162,19062,19063],{"class":361},"  \u002F\u002F只写属性，不可以读取\n",[162,19065,19066],{"class":164,"line":12912},[162,19067,301],{"emptyLinePlaceholder":300},[162,19069,19070,19072,19074,19076],{"class":164,"line":12917},[162,19071,5421],{"class":5082},[162,19073,604],{"class":168},[162,19075,5426],{"class":179},[162,19077,5836],{"class":168},[162,19079,19080],{"class":164,"line":12923},[162,19081,301],{"emptyLinePlaceholder":300},[162,19083,19084,19086,19088],{"class":164,"line":12944},[162,19085,7203],{"class":172},[162,19087,2717],{"class":207},[162,19089,4433],{"class":168},[162,19091,19092],{"class":164,"line":12950},[162,19093,1498],{"class":168},[3284,19095,19097],{"id":19096},"_814封装案例","8.1.4封装案例",[1452,19099,19100],{},[1455,19101,19102,19105],{},[3453,19103,19104],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[4279,19107,19108,19111],{},[1455,19109,19110],{},"求出立方体的面积和体积",[1455,19112,19113],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[153,19115,19117],{"className":3305,"code":19116,"language":3307,"meta":158,"style":158},"#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",[71,19118,19119,19125,19135,19142,19146,19150,19155,19185,19189,19199,19209,19219,19223,19232,19236,19272,19276,19285,19289,19305,19309,19314,19323,19327,19334,19338,19347,19351,19358,19362,19371,19375,19382,19386,19391,19408,19412,19458,19462,19471,19475,19479,19483,19492,19496,19500,19505,19509,19515,19521,19527,19531,19535,19540,19562,19566,19620,19624,19632,19636,19641,19646,19659,19666,19682,19693,19699,19722,19728,19751,19765,19785,19791,19802,19825,19847,19852,19858,19872,19885,19890,19904,19909,19915,19920,19934,19939,19944,19958,19970,19975,19988,19993,19998,20003,20016,20021],{"__ignoreMap":158},[162,19120,19121,19123],{"class":164,"line":165},[162,19122,5068],{"class":172},[162,19124,5071],{"class":179},[162,19126,19127,19129,19131,19133],{"class":164,"line":197},[162,19128,5076],{"class":172},[162,19130,5079],{"class":172},[162,19132,5083],{"class":5082},[162,19134,4433],{"class":168},[162,19136,19137,19139],{"class":164,"line":228},[162,19138,17788],{"class":172},[162,19140,19141],{"class":5082}," Cube\n",[162,19143,19144],{"class":164,"line":252},[162,19145,4685],{"class":168},[162,19147,19148],{"class":164,"line":328},[162,19149,17810],{"class":172},[162,19151,19152],{"class":164,"line":466},[162,19153,19154],{"class":361},"    \u002F\u002F输入长宽高\n",[162,19156,19157,19159,19162,19164,19166,19169,19171,19173,19176,19178,19180,19183],{"class":164,"line":471},[162,19158,18002],{"class":172},[162,19160,19161],{"class":5082}," setLwh",[162,19163,604],{"class":168},[162,19165,3319],{"class":172},[162,19167,19168],{"class":671}," l",[162,19170,3670],{"class":168},[162,19172,3319],{"class":172},[162,19174,19175],{"class":671}," w",[162,19177,3670],{"class":168},[162,19179,3319],{"class":172},[162,19181,19182],{"class":671}," h",[162,19184,434],{"class":168},[162,19186,19187],{"class":164,"line":687},[162,19188,5148],{"class":168},[162,19190,19191,19194,19196],{"class":164,"line":692},[162,19192,19193],{"class":168},"        m_L",[162,19195,173],{"class":172},[162,19197,19198],{"class":168},"l;\n",[162,19200,19201,19204,19206],{"class":164,"line":698},[162,19202,19203],{"class":168},"        m_W",[162,19205,173],{"class":172},[162,19207,19208],{"class":168},"w;\n",[162,19210,19211,19214,19216],{"class":164,"line":2955},[162,19212,19213],{"class":168},"        m_H",[162,19215,173],{"class":172},[162,19217,19218],{"class":168},"h;\n",[162,19220,19221],{"class":164,"line":2960},[162,19222,5305],{"class":168},[162,19224,19225,19227,19230],{"class":164,"line":2971},[162,19226,5103],{"class":172},[162,19228,19229],{"class":5082}," mianji",[162,19231,1526],{"class":168},[162,19233,19234],{"class":164,"line":2984},[162,19235,5148],{"class":168},[162,19237,19238,19240,19242,19244,19247,19249,19252,19254,19257,19259,19262,19264,19267,19269],{"class":164,"line":2989},[162,19239,17846],{"class":172},[162,19241,2711],{"class":207},[162,19243,3745],{"class":172},[162,19245,19246],{"class":168},"(m_L",[162,19248,3745],{"class":172},[162,19250,19251],{"class":168},"m_W ",[162,19253,3771],{"class":172},[162,19255,19256],{"class":168}," m_L",[162,19258,3745],{"class":172},[162,19260,19261],{"class":168},"m_H ",[162,19263,3771],{"class":172},[162,19265,19266],{"class":168}," m_W",[162,19268,3745],{"class":172},[162,19270,19271],{"class":168},"m_H);\n",[162,19273,19274],{"class":164,"line":3011},[162,19275,5305],{"class":168},[162,19277,19278,19280,19283],{"class":164,"line":3022},[162,19279,5103],{"class":172},[162,19281,19282],{"class":5082}," tiji",[162,19284,1526],{"class":168},[162,19286,19287],{"class":164,"line":3027},[162,19288,5148],{"class":168},[162,19290,19291,19293,19295,19297,19300,19302],{"class":164,"line":3046},[162,19292,17846],{"class":172},[162,19294,19256],{"class":168},[162,19296,3745],{"class":172},[162,19298,19299],{"class":168},"m_W",[162,19301,3745],{"class":172},[162,19303,19304],{"class":168},"m_H;\n",[162,19306,19307],{"class":164,"line":3052},[162,19308,5305],{"class":168},[162,19310,19311],{"class":164,"line":3057},[162,19312,19313],{"class":361},"    \u002F\u002F获取长宽高\n",[162,19315,19316,19318,19321],{"class":164,"line":3072},[162,19317,5103],{"class":172},[162,19319,19320],{"class":5082}," getLength",[162,19322,1526],{"class":168},[162,19324,19325],{"class":164,"line":3077},[162,19326,5148],{"class":168},[162,19328,19329,19331],{"class":164,"line":3100},[162,19330,17846],{"class":172},[162,19332,19333],{"class":168}," m_L;\n",[162,19335,19336],{"class":164,"line":3140},[162,19337,5305],{"class":168},[162,19339,19340,19342,19345],{"class":164,"line":4878},[162,19341,5103],{"class":172},[162,19343,19344],{"class":5082}," getWidth",[162,19346,1526],{"class":168},[162,19348,19349],{"class":164,"line":4883},[162,19350,5148],{"class":168},[162,19352,19353,19355],{"class":164,"line":4897},[162,19354,17846],{"class":172},[162,19356,19357],{"class":168}," m_W;\n",[162,19359,19360],{"class":164,"line":4902},[162,19361,5305],{"class":168},[162,19363,19364,19366,19369],{"class":164,"line":5694},[162,19365,5103],{"class":172},[162,19367,19368],{"class":5082}," getHeight",[162,19370,1526],{"class":168},[162,19372,19373],{"class":164,"line":5708},[162,19374,5148],{"class":168},[162,19376,19377,19379],{"class":164,"line":5716},[162,19378,17846],{"class":172},[162,19380,19381],{"class":168}," m_H;\n",[162,19383,19384],{"class":164,"line":5721},[162,19385,5305],{"class":168},[162,19387,19388],{"class":164,"line":5727},[162,19389,19390],{"class":361},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[162,19392,19393,19396,19399,19401,19404,19406],{"class":164,"line":5733},[162,19394,19395],{"class":172},"    bool",[162,19397,19398],{"class":5082}," isEqual",[162,19400,604],{"class":168},[162,19402,19403],{"class":5082},"Cube",[162,19405,5966],{"class":671},[162,19407,434],{"class":168},[162,19409,19410],{"class":164,"line":5738},[162,19411,5148],{"class":168},[162,19413,19414,19416,19419,19422,19424,19426,19429,19431,19434,19437,19439,19441,19444,19446,19448,19451,19453,19455],{"class":164,"line":11052},[162,19415,5614],{"class":172},[162,19417,19418],{"class":168}," (c.",[162,19420,19421],{"class":5082},"getLength",[162,19423,16145],{"class":168},[162,19425,2292],{"class":172},[162,19427,19428],{"class":168}," m_L ",[162,19430,4838],{"class":172},[162,19432,19433],{"class":168}," c.",[162,19435,19436],{"class":5082},"getWidth",[162,19438,16145],{"class":168},[162,19440,2292],{"class":172},[162,19442,19443],{"class":168}," m_W ",[162,19445,4838],{"class":172},[162,19447,19433],{"class":168},[162,19449,19450],{"class":5082},"getHeight",[162,19452,16145],{"class":168},[162,19454,2292],{"class":172},[162,19456,19457],{"class":168}," m_H)\n",[162,19459,19460],{"class":164,"line":11076},[162,19461,5627],{"class":168},[162,19463,19464,19466,19469],{"class":164,"line":11081},[162,19465,18823],{"class":172},[162,19467,19468],{"class":207}," true",[162,19470,4433],{"class":168},[162,19472,19473],{"class":164,"line":11087},[162,19474,5646],{"class":168},[162,19476,19477],{"class":164,"line":11114},[162,19478,5687],{"class":172},[162,19480,19481],{"class":164,"line":11119},[162,19482,5627],{"class":168},[162,19484,19485,19487,19490],{"class":164,"line":11125},[162,19486,18823],{"class":172},[162,19488,19489],{"class":207}," false",[162,19491,4433],{"class":168},[162,19493,19494],{"class":164,"line":11137},[162,19495,5646],{"class":168},[162,19497,19498],{"class":164,"line":11149},[162,19499,5305],{"class":168},[162,19501,19502],{"class":164,"line":11161},[162,19503,19504],{"class":361},"    \u002F\u002F私有属性\n",[162,19506,19507],{"class":164,"line":12816},[162,19508,18315],{"class":172},[162,19510,19511,19513],{"class":164,"line":12841},[162,19512,5103],{"class":172},[162,19514,19333],{"class":168},[162,19516,19517,19519],{"class":164,"line":12864},[162,19518,5103],{"class":172},[162,19520,19357],{"class":168},[162,19522,19523,19525],{"class":164,"line":12888},[162,19524,5103],{"class":172},[162,19526,19381],{"class":168},[162,19528,19529],{"class":164,"line":12893},[162,19530,301],{"emptyLinePlaceholder":300},[162,19532,19533],{"class":164,"line":12898},[162,19534,7108],{"class":168},[162,19536,19537],{"class":164,"line":12903},[162,19538,19539],{"class":361},"\u002F\u002F全局函数判断两个立方体是否相等\n",[162,19541,19542,19544,19546,19548,19550,19553,19555,19557,19560],{"class":164,"line":12912},[162,19543,4494],{"class":172},[162,19545,19398],{"class":5082},[162,19547,604],{"class":168},[162,19549,19403],{"class":5082},[162,19551,19552],{"class":671}," c1",[162,19554,3670],{"class":168},[162,19556,19403],{"class":5082},[162,19558,19559],{"class":671}," c2",[162,19561,434],{"class":168},[162,19563,19564],{"class":164,"line":12917},[162,19565,4685],{"class":168},[162,19567,19568,19570,19573,19575,19577,19579,19582,19584,19587,19589,19591,19593,19595,19597,19599,19601,19603,19605,19607,19609,19611,19613,19615,19617],{"class":164,"line":12923},[162,19569,7203],{"class":172},[162,19571,19572],{"class":168}," (c1.",[162,19574,19421],{"class":5082},[162,19576,16145],{"class":168},[162,19578,2292],{"class":172},[162,19580,19581],{"class":168}," c2.",[162,19583,19421],{"class":5082},[162,19585,19586],{"class":168},"()) ",[162,19588,4838],{"class":172},[162,19590,19572],{"class":168},[162,19592,19436],{"class":5082},[162,19594,16145],{"class":168},[162,19596,2292],{"class":172},[162,19598,19581],{"class":168},[162,19600,19436],{"class":5082},[162,19602,19586],{"class":168},[162,19604,4838],{"class":172},[162,19606,19572],{"class":168},[162,19608,19450],{"class":5082},[162,19610,16145],{"class":168},[162,19612,2292],{"class":172},[162,19614,19581],{"class":168},[162,19616,19450],{"class":5082},[162,19618,19619],{"class":168},"());\n",[162,19621,19622],{"class":164,"line":12944},[162,19623,1498],{"class":168},[162,19625,19626,19628,19630],{"class":164,"line":12950},[162,19627,3319],{"class":172},[162,19629,5092],{"class":5082},[162,19631,1526],{"class":168},[162,19633,19634],{"class":164,"line":12964},[162,19635,4685],{"class":168},[162,19637,19638],{"class":164,"line":12970},[162,19639,19640],{"class":168},"    Cube c1;\n",[162,19642,19643],{"class":164,"line":12997},[162,19644,19645],{"class":361},"    \u002F\u002F输入立方体的长宽高\n",[162,19647,19648,19650,19652,19655,19657],{"class":164,"line":13006},[162,19649,4690],{"class":168},[162,19651,4316],{"class":172},[162,19653,19654],{"class":179},"\"请输入第一个立方体的长、宽、高：\"",[162,19656,4316],{"class":172},[162,19658,4338],{"class":168},[162,19660,19661,19663],{"class":164,"line":13012},[162,19662,5103],{"class":172},[162,19664,19665],{"class":168}," l,w,h,l1,w1,h1;\n",[162,19667,19668,19670,19672,19674,19676,19678,19680],{"class":164,"line":13020},[162,19669,5130],{"class":168},[162,19671,4569],{"class":172},[162,19673,3808],{"class":168},[162,19675,4569],{"class":172},[162,19677,4077],{"class":168},[162,19679,4569],{"class":172},[162,19681,19218],{"class":168},[162,19683,19684,19687,19690],{"class":164,"line":13025},[162,19685,19686],{"class":168},"    c1.",[162,19688,19689],{"class":5082},"setLwh",[162,19691,19692],{"class":168},"(l,w,h);\n",[162,19694,19696],{"class":164,"line":19695},66,[162,19697,19698],{"class":361},"    \u002F\u002F面积\n",[162,19700,19702,19704,19706,19709,19711,19713,19716,19718,19720],{"class":164,"line":19701},67,[162,19703,4690],{"class":168},[162,19705,4316],{"class":172},[162,19707,19708],{"class":179},"\"立方体的表面积为：\"",[162,19710,4316],{"class":172},[162,19712,17923],{"class":168},[162,19714,19715],{"class":5082},"mianji",[162,19717,5544],{"class":168},[162,19719,4316],{"class":172},[162,19721,4338],{"class":168},[162,19723,19725],{"class":164,"line":19724},68,[162,19726,19727],{"class":361},"    \u002F\u002F体积\n",[162,19729,19731,19733,19735,19738,19740,19742,19745,19747,19749],{"class":164,"line":19730},69,[162,19732,4690],{"class":168},[162,19734,4316],{"class":172},[162,19736,19737],{"class":179},"\"立方体的体积为：\"",[162,19739,4316],{"class":172},[162,19741,17923],{"class":168},[162,19743,19744],{"class":5082},"tiji",[162,19746,5544],{"class":168},[162,19748,4316],{"class":172},[162,19750,4338],{"class":168},[162,19752,19754,19756,19758,19761,19763],{"class":164,"line":19753},70,[162,19755,4690],{"class":168},[162,19757,4316],{"class":172},[162,19759,19760],{"class":179},"\"请输入第二个立方体的长、宽、高：\"",[162,19762,4316],{"class":172},[162,19764,4338],{"class":168},[162,19766,19768,19770,19772,19775,19777,19780,19782],{"class":164,"line":19767},71,[162,19769,5130],{"class":168},[162,19771,4569],{"class":172},[162,19773,19774],{"class":168},"l1",[162,19776,4569],{"class":172},[162,19778,19779],{"class":168},"w1",[162,19781,4569],{"class":172},[162,19783,19784],{"class":168},"h1;\n",[162,19786,19788],{"class":164,"line":19787},72,[162,19789,19790],{"class":168},"    Cube c2;\n",[162,19792,19794,19797,19799],{"class":164,"line":19793},73,[162,19795,19796],{"class":168},"    c2.",[162,19798,19689],{"class":5082},[162,19800,19801],{"class":168},"(l1,w1,h1);\n",[162,19803,19805,19807,19809,19812,19814,19817,19819,19821,19823],{"class":164,"line":19804},74,[162,19806,4690],{"class":168},[162,19808,4316],{"class":172},[162,19810,19811],{"class":179},"\"第二个立方体的表面积为：\"",[162,19813,4316],{"class":172},[162,19815,19816],{"class":168},"c2.",[162,19818,19715],{"class":5082},[162,19820,5544],{"class":168},[162,19822,4316],{"class":172},[162,19824,4338],{"class":168},[162,19826,19828,19830,19832,19835,19837,19839,19841,19843,19845],{"class":164,"line":19827},75,[162,19829,4690],{"class":168},[162,19831,4316],{"class":172},[162,19833,19834],{"class":179},"\"第二个立方体的体积为：\"",[162,19836,4316],{"class":172},[162,19838,19816],{"class":168},[162,19840,19744],{"class":5082},[162,19842,5544],{"class":168},[162,19844,4316],{"class":172},[162,19846,4338],{"class":168},[162,19848,19850],{"class":164,"line":19849},76,[162,19851,301],{"emptyLinePlaceholder":300},[162,19853,19855],{"class":164,"line":19854},77,[162,19856,19857],{"class":361},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[162,19859,19861,19863,19865,19868,19870],{"class":164,"line":19860},78,[162,19862,4690],{"class":168},[162,19864,4316],{"class":172},[162,19866,19867],{"class":179},"\"内部函数判断结果：\"",[162,19869,4316],{"class":172},[162,19871,4338],{"class":168},[162,19873,19875,19877,19879,19882],{"class":164,"line":19874},79,[162,19876,2283],{"class":172},[162,19878,19572],{"class":168},[162,19880,19881],{"class":5082},"isEqual",[162,19883,19884],{"class":168},"(c2))\n",[162,19886,19888],{"class":164,"line":19887},80,[162,19889,5148],{"class":168},[162,19891,19893,19895,19897,19900,19902],{"class":164,"line":19892},81,[162,19894,6565],{"class":168},[162,19896,4316],{"class":172},[162,19898,19899],{"class":179},"\"两个立方体相等\"",[162,19901,4316],{"class":172},[162,19903,4338],{"class":168},[162,19905,19907],{"class":164,"line":19906},82,[162,19908,5305],{"class":168},[162,19910,19912],{"class":164,"line":19911},83,[162,19913,19914],{"class":172},"    else\n",[162,19916,19918],{"class":164,"line":19917},84,[162,19919,5148],{"class":168},[162,19921,19923,19925,19927,19930,19932],{"class":164,"line":19922},85,[162,19924,6565],{"class":168},[162,19926,4316],{"class":172},[162,19928,19929],{"class":179},"\"两个立方体不相等\"",[162,19931,4316],{"class":172},[162,19933,4338],{"class":168},[162,19935,19937],{"class":164,"line":19936},86,[162,19938,5305],{"class":168},[162,19940,19942],{"class":164,"line":19941},87,[162,19943,301],{"emptyLinePlaceholder":300},[162,19945,19947,19949,19951,19954,19956],{"class":164,"line":19946},88,[162,19948,4690],{"class":168},[162,19950,4316],{"class":172},[162,19952,19953],{"class":179},"\"全局函数判断结果：\"",[162,19955,4316],{"class":172},[162,19957,4338],{"class":168},[162,19959,19961,19963,19965,19967],{"class":164,"line":19960},89,[162,19962,2283],{"class":172},[162,19964,1003],{"class":168},[162,19966,19881],{"class":5082},[162,19968,19969],{"class":168},"(c1, c2))\n",[162,19971,19973],{"class":164,"line":19972},90,[162,19974,5148],{"class":168},[162,19976,19978,19980,19982,19984,19986],{"class":164,"line":19977},91,[162,19979,6565],{"class":168},[162,19981,4316],{"class":172},[162,19983,19899],{"class":179},[162,19985,4316],{"class":172},[162,19987,4338],{"class":168},[162,19989,19991],{"class":164,"line":19990},92,[162,19992,5305],{"class":168},[162,19994,19996],{"class":164,"line":19995},93,[162,19997,19914],{"class":172},[162,19999,20001],{"class":164,"line":20000},94,[162,20002,5148],{"class":168},[162,20004,20006,20008,20010,20012,20014],{"class":164,"line":20005},95,[162,20007,6565],{"class":168},[162,20009,4316],{"class":172},[162,20011,19929],{"class":179},[162,20013,4316],{"class":172},[162,20015,4338],{"class":168},[162,20017,20019],{"class":164,"line":20018},96,[162,20020,5305],{"class":168},[162,20022,20024],{"class":164,"line":20023},97,[162,20025,1498],{"class":168},[1452,20027,20028],{"start":197},[1455,20029,20030],{},[3453,20031,20032],{},"练习案例2：点和圆的关系",[4279,20034,20035],{},[1455,20036,20037],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[153,20039,20041],{"className":3305,"code":20040,"language":3307,"meta":158,"style":158},"#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",[71,20042,20043,20049,20059,20066,20073,20077,20081,20086,20120,20125,20141,20155,20159,20163,20170,20177,20181,20187,20191,20195,20199,20221,20244,20249,20263,20278,20282,20286,20292,20297,20302,20306,20332,20336,20366,20394,20422,20439,20443,20456,20460,20464,20468,20481,20485,20489,20497,20501,20505,20509,20514,20518,20529,20536,20545,20555,20566,20573,20586,20597,20607,20618,20625,20639,20644,20654,20662],{"__ignoreMap":158},[162,20044,20045,20047],{"class":164,"line":165},[162,20046,5068],{"class":172},[162,20048,5071],{"class":179},[162,20050,20051,20053,20055,20057],{"class":164,"line":197},[162,20052,5076],{"class":172},[162,20054,5079],{"class":172},[162,20056,5083],{"class":5082},[162,20058,4433],{"class":168},[162,20060,20061,20063],{"class":164,"line":228},[162,20062,5068],{"class":172},[162,20064,20065],{"class":179},"\u003Ccmath>\n",[162,20067,20068,20070],{"class":164,"line":252},[162,20069,17788],{"class":172},[162,20071,20072],{"class":5082}," Point\n",[162,20074,20075],{"class":164,"line":328},[162,20076,4685],{"class":168},[162,20078,20079],{"class":164,"line":466},[162,20080,17810],{"class":172},[162,20082,20083],{"class":164,"line":471},[162,20084,20085],{"class":361},"    \u002F\u002F赋值\n",[162,20087,20088,20090,20093,20095,20097,20100,20102,20104,20107,20110,20112,20115,20117],{"class":164,"line":687},[162,20089,18002],{"class":172},[162,20091,20092],{"class":5082}," setPoint",[162,20094,604],{"class":168},[162,20096,17131],{"class":172},[162,20098,20099],{"class":671}," x",[162,20101,183],{"class":168},[162,20103,17131],{"class":172},[162,20105,20106],{"class":671}," y",[162,20108,20109],{"class":168},") { m_x ",[162,20111,173],{"class":172},[162,20113,20114],{"class":168}," x; m_y ",[162,20116,173],{"class":172},[162,20118,20119],{"class":168}," y; }\n",[162,20121,20122],{"class":164,"line":692},[162,20123,20124],{"class":361},"    \u002F\u002F获取坐标\n",[162,20126,20127,20129,20132,20135,20138],{"class":164,"line":698},[162,20128,17832],{"class":172},[162,20130,20131],{"class":5082}," getX",[162,20133,20134],{"class":168},"() { ",[162,20136,20137],{"class":172},"return",[162,20139,20140],{"class":168}," m_x; }\n",[162,20142,20143,20145,20148,20150,20152],{"class":164,"line":2955},[162,20144,17832],{"class":172},[162,20146,20147],{"class":5082}," getY",[162,20149,20134],{"class":168},[162,20151,20137],{"class":172},[162,20153,20154],{"class":168}," m_y; }\n",[162,20156,20157],{"class":164,"line":2960},[162,20158,301],{"emptyLinePlaceholder":300},[162,20160,20161],{"class":164,"line":2971},[162,20162,18315],{"class":172},[162,20164,20165,20167],{"class":164,"line":2984},[162,20166,17832],{"class":172},[162,20168,20169],{"class":168}," m_x;\n",[162,20171,20172,20174],{"class":164,"line":2989},[162,20173,17832],{"class":172},[162,20175,20176],{"class":168}," m_y;\n",[162,20178,20179],{"class":164,"line":3011},[162,20180,7108],{"class":168},[162,20182,20183,20185],{"class":164,"line":3022},[162,20184,17788],{"class":172},[162,20186,17791],{"class":5082},[162,20188,20189],{"class":164,"line":3027},[162,20190,4685],{"class":168},[162,20192,20193],{"class":164,"line":3046},[162,20194,17810],{"class":172},[162,20196,20197],{"class":164,"line":3052},[162,20198,20085],{"class":361},[162,20200,20201,20203,20206,20208,20210,20213,20216,20218],{"class":164,"line":3057},[162,20202,18002],{"class":172},[162,20204,20205],{"class":5082}," setRadius",[162,20207,604],{"class":168},[162,20209,17131],{"class":172},[162,20211,20212],{"class":671}," r",[162,20214,20215],{"class":168},") { m_r ",[162,20217,173],{"class":172},[162,20219,20220],{"class":168}," r; }\n",[162,20222,20223,20225,20228,20230,20233,20236,20239,20241],{"class":164,"line":3072},[162,20224,18002],{"class":172},[162,20226,20227],{"class":5082}," setCenter",[162,20229,604],{"class":168},[162,20231,20232],{"class":5082},"Point",[162,20234,20235],{"class":671}," center",[162,20237,20238],{"class":168},") { m_center ",[162,20240,173],{"class":172},[162,20242,20243],{"class":168}," center; }\n",[162,20245,20246],{"class":164,"line":3077},[162,20247,20248],{"class":361},"    \u002F\u002F获取属性\n",[162,20250,20251,20253,20256,20258,20260],{"class":164,"line":3100},[162,20252,17832],{"class":172},[162,20254,20255],{"class":5082}," getRadius",[162,20257,20134],{"class":168},[162,20259,20137],{"class":172},[162,20261,20262],{"class":168}," m_r; }\n",[162,20264,20265,20268,20271,20273,20275],{"class":164,"line":3140},[162,20266,20267],{"class":5082},"    Point",[162,20269,20270],{"class":5082}," getCenter",[162,20272,20134],{"class":168},[162,20274,20137],{"class":172},[162,20276,20277],{"class":168}," m_center; }\n",[162,20279,20280],{"class":164,"line":4878},[162,20281,301],{"emptyLinePlaceholder":300},[162,20283,20284],{"class":164,"line":4883},[162,20285,18315],{"class":172},[162,20287,20288,20290],{"class":164,"line":4897},[162,20289,17832],{"class":172},[162,20291,17822],{"class":168},[162,20293,20294],{"class":164,"line":4902},[162,20295,20296],{"class":361},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[162,20298,20299],{"class":164,"line":5694},[162,20300,20301],{"class":168},"    Point m_center;\n",[162,20303,20304],{"class":164,"line":5708},[162,20305,7108],{"class":168},[162,20307,20308,20310,20313,20315,20318,20320,20322,20324,20326,20328,20330],{"class":164,"line":5716},[162,20309,8471],{"class":172},[162,20311,20312],{"class":5082}," isInCircle",[162,20314,604],{"class":168},[162,20316,20317],{"class":5082},"Circle",[162,20319,13683],{"class":172},[162,20321,3586],{"class":671},[162,20323,3670],{"class":168},[162,20325,20232],{"class":5082},[162,20327,13683],{"class":172},[162,20329,19],{"class":671},[162,20331,434],{"class":168},[162,20333,20334],{"class":164,"line":5721},[162,20335,4685],{"class":168},[162,20337,20338,20340,20343,20345,20347,20350,20353,20356,20358,20360,20362,20364],{"class":164,"line":5727},[162,20339,17832],{"class":172},[162,20341,20342],{"class":168}," dx ",[162,20344,173],{"class":172},[162,20346,19433],{"class":168},[162,20348,20349],{"class":5082},"getCenter",[162,20351,20352],{"class":168},"().",[162,20354,20355],{"class":5082},"getX",[162,20357,16145],{"class":168},[162,20359,353],{"class":172},[162,20361,18979],{"class":168},[162,20363,20355],{"class":5082},[162,20365,8743],{"class":168},[162,20367,20368,20370,20373,20375,20377,20379,20381,20384,20386,20388,20390,20392],{"class":164,"line":5733},[162,20369,17832],{"class":172},[162,20371,20372],{"class":168}," dy ",[162,20374,173],{"class":172},[162,20376,19433],{"class":168},[162,20378,20349],{"class":5082},[162,20380,20352],{"class":168},[162,20382,20383],{"class":5082},"getY",[162,20385,16145],{"class":168},[162,20387,353],{"class":172},[162,20389,18979],{"class":168},[162,20391,20383],{"class":5082},[162,20393,8743],{"class":168},[162,20395,20396,20398,20401,20403,20406,20409,20411,20413,20415,20417,20419],{"class":164,"line":5738},[162,20397,17832],{"class":172},[162,20399,20400],{"class":168}," distance ",[162,20402,173],{"class":172},[162,20404,20405],{"class":5082}," sqrt",[162,20407,20408],{"class":168},"(dx ",[162,20410,3745],{"class":172},[162,20412,20342],{"class":168},[162,20414,3771],{"class":172},[162,20416,20372],{"class":168},[162,20418,3745],{"class":172},[162,20420,20421],{"class":168}," dy);\n",[162,20423,20424,20426,20429,20431,20433,20436],{"class":164,"line":11052},[162,20425,2283],{"class":172},[162,20427,20428],{"class":168}," (distance ",[162,20430,4187],{"class":172},[162,20432,19433],{"class":168},[162,20434,20435],{"class":5082},"getRadius",[162,20437,20438],{"class":168},"())\n",[162,20440,20441],{"class":164,"line":11076},[162,20442,5148],{"class":168},[162,20444,20445,20447,20449,20452,20454],{"class":164,"line":11081},[162,20446,12769],{"class":168},[162,20448,4316],{"class":172},[162,20450,20451],{"class":179}," \"点在圆内\"",[162,20453,4584],{"class":172},[162,20455,11943],{"class":168},[162,20457,20458],{"class":164,"line":11087},[162,20459,5305],{"class":168},[162,20461,20462],{"class":164,"line":11114},[162,20463,19914],{"class":172},[162,20465,20466],{"class":164,"line":11119},[162,20467,5148],{"class":168},[162,20469,20470,20472,20474,20477,20479],{"class":164,"line":11125},[162,20471,12769],{"class":168},[162,20473,4316],{"class":172},[162,20475,20476],{"class":179}," \"点在圆外\"",[162,20478,4584],{"class":172},[162,20480,11943],{"class":168},[162,20482,20483],{"class":164,"line":11137},[162,20484,5305],{"class":168},[162,20486,20487],{"class":164,"line":11149},[162,20488,1498],{"class":168},[162,20490,20491,20493,20495],{"class":164,"line":11161},[162,20492,3319],{"class":172},[162,20494,5092],{"class":5082},[162,20496,1526],{"class":168},[162,20498,20499],{"class":164,"line":12816},[162,20500,4685],{"class":168},[162,20502,20503],{"class":164,"line":12841},[162,20504,18146],{"class":361},[162,20506,20507],{"class":164,"line":12864},[162,20508,17893],{"class":168},[162,20510,20511],{"class":164,"line":12888},[162,20512,20513],{"class":168},"    Point p1;\n",[162,20515,20516],{"class":164,"line":12893},[162,20517,20085],{"class":361},[162,20519,20520,20522,20524,20527],{"class":164,"line":12898},[162,20521,4690],{"class":168},[162,20523,4316],{"class":172},[162,20525,20526],{"class":179},"\"请输入圆的半径：\"",[162,20528,4433],{"class":168},[162,20530,20531,20533],{"class":164,"line":12903},[162,20532,17832],{"class":172},[162,20534,20535],{"class":168}," r;\n",[162,20537,20538,20540,20542],{"class":164,"line":12912},[162,20539,5130],{"class":168},[162,20541,4569],{"class":172},[162,20543,20544],{"class":168},"r;\n",[162,20546,20547,20549,20552],{"class":164,"line":12917},[162,20548,19686],{"class":168},[162,20550,20551],{"class":5082},"setRadius",[162,20553,20554],{"class":168},"(r);\n",[162,20556,20557,20559,20561,20564],{"class":164,"line":12923},[162,20558,4690],{"class":168},[162,20560,4316],{"class":172},[162,20562,20563],{"class":179},"\"请输入圆心坐标：\"",[162,20565,4433],{"class":168},[162,20567,20568,20570],{"class":164,"line":12944},[162,20569,17832],{"class":172},[162,20571,20572],{"class":168}," x, y;\n",[162,20574,20575,20577,20579,20581,20583],{"class":164,"line":12950},[162,20576,5130],{"class":168},[162,20578,4569],{"class":172},[162,20580,4101],{"class":168},[162,20582,4569],{"class":172},[162,20584,20585],{"class":168},"y;\n",[162,20587,20588,20591,20594],{"class":164,"line":12964},[162,20589,20590],{"class":168},"    p1.",[162,20592,20593],{"class":5082},"setPoint",[162,20595,20596],{"class":168},"(x, y);\n",[162,20598,20599,20601,20604],{"class":164,"line":12970},[162,20600,19686],{"class":168},[162,20602,20603],{"class":5082},"setCenter",[162,20605,20606],{"class":168},"(p1);\n",[162,20608,20609,20611,20613,20616],{"class":164,"line":12997},[162,20610,4690],{"class":168},[162,20612,4316],{"class":172},[162,20614,20615],{"class":179},"\"请输入测试点坐标：\"",[162,20617,4433],{"class":168},[162,20619,20620,20622],{"class":164,"line":13006},[162,20621,17832],{"class":172},[162,20623,20624],{"class":168}," x1, y1;\n",[162,20626,20627,20629,20631,20634,20636],{"class":164,"line":13012},[162,20628,5130],{"class":168},[162,20630,4569],{"class":172},[162,20632,20633],{"class":168},"x1",[162,20635,4569],{"class":172},[162,20637,20638],{"class":168},"y1;\n",[162,20640,20641],{"class":164,"line":13020},[162,20642,20643],{"class":168},"    Point p2;\n",[162,20645,20646,20649,20651],{"class":164,"line":13025},[162,20647,20648],{"class":168},"    p2.",[162,20650,20593],{"class":5082},[162,20652,20653],{"class":168},"(x1, y1);\n",[162,20655,20656,20659],{"class":164,"line":19695},[162,20657,20658],{"class":5082},"    isInCircle",[162,20660,20661],{"class":168},"(c1, p2);\n",[162,20663,20664],{"class":164,"line":19701},[162,20665,1498],{"class":168},[19,20667,20668],{},"在类中可以让另一个类作为本来的成员",[19,20670,20671],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,20673,20674],{},"创建point.h",[153,20676,20678],{"className":3305,"code":20677,"language":3307,"meta":158,"style":158},"#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",[71,20679,20680,20691,20697,20707,20713,20717,20722,20726,20730,20750,20754,20762,20770,20774,20778,20784,20790],{"__ignoreMap":158},[162,20681,20682,20685,20688],{"class":164,"line":165},[162,20683,20684],{"class":172},"#pragma",[162,20686,20687],{"class":5082}," once",[162,20689,20690],{"class":361}," \u002F\u002F防止头文件重复包含\n",[162,20692,20693,20695],{"class":164,"line":197},[162,20694,5068],{"class":172},[162,20696,5071],{"class":179},[162,20698,20699,20701,20703,20705],{"class":164,"line":228},[162,20700,5076],{"class":172},[162,20702,5079],{"class":172},[162,20704,5083],{"class":5082},[162,20706,4433],{"class":168},[162,20708,20709,20711],{"class":164,"line":252},[162,20710,17788],{"class":172},[162,20712,20072],{"class":5082},[162,20714,20715],{"class":164,"line":328},[162,20716,4685],{"class":168},[162,20718,20719],{"class":164,"line":466},[162,20720,20721],{"class":361},"\u002F\u002F做好声明与变量定义就可以\n",[162,20723,20724],{"class":164,"line":471},[162,20725,17810],{"class":172},[162,20727,20728],{"class":164,"line":687},[162,20729,20085],{"class":361},[162,20731,20732,20734,20736,20738,20740,20742,20744,20746,20748],{"class":164,"line":692},[162,20733,18002],{"class":172},[162,20735,20092],{"class":5082},[162,20737,604],{"class":168},[162,20739,17131],{"class":172},[162,20741,20099],{"class":671},[162,20743,183],{"class":168},[162,20745,17131],{"class":172},[162,20747,20106],{"class":671},[162,20749,5836],{"class":168},[162,20751,20752],{"class":164,"line":698},[162,20753,20124],{"class":361},[162,20755,20756,20758,20760],{"class":164,"line":2955},[162,20757,17832],{"class":172},[162,20759,20131],{"class":5082},[162,20761,8743],{"class":168},[162,20763,20764,20766,20768],{"class":164,"line":2960},[162,20765,17832],{"class":172},[162,20767,20147],{"class":5082},[162,20769,8743],{"class":168},[162,20771,20772],{"class":164,"line":2971},[162,20773,301],{"emptyLinePlaceholder":300},[162,20775,20776],{"class":164,"line":2984},[162,20777,18315],{"class":172},[162,20779,20780,20782],{"class":164,"line":2989},[162,20781,17832],{"class":172},[162,20783,20169],{"class":168},[162,20785,20786,20788],{"class":164,"line":3011},[162,20787,17832],{"class":172},[162,20789,20176],{"class":168},[162,20791,20792],{"class":164,"line":3022},[162,20793,7108],{"class":168},[19,20795,20796],{},"创建point.cpp",[153,20798,20800],{"className":3305,"code":20799,"language":3307,"meta":158,"style":158},"#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",[71,20801,20802,20809,20814,20848,20852,20868],{"__ignoreMap":158},[162,20803,20804,20806],{"class":164,"line":165},[162,20805,5068],{"class":172},[162,20807,20808],{"class":179},"\u003Cpoint.h>\n",[162,20810,20811],{"class":164,"line":197},[162,20812,20813],{"class":361},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[162,20815,20816,20818,20821,20824,20826,20828,20830,20832,20834,20836,20838,20840,20842,20844,20846],{"class":164,"line":228},[162,20817,18002],{"class":172},[162,20819,20820],{"class":5082}," Point",[162,20822,20823],{"class":168},"::",[162,20825,20593],{"class":5082},[162,20827,604],{"class":168},[162,20829,17131],{"class":172},[162,20831,20099],{"class":671},[162,20833,183],{"class":168},[162,20835,17131],{"class":172},[162,20837,20106],{"class":671},[162,20839,20109],{"class":168},[162,20841,173],{"class":172},[162,20843,20114],{"class":168},[162,20845,173],{"class":172},[162,20847,20119],{"class":168},[162,20849,20850],{"class":164,"line":252},[162,20851,20124],{"class":361},[162,20853,20854,20856,20858,20860,20862,20864,20866],{"class":164,"line":328},[162,20855,17832],{"class":172},[162,20857,20820],{"class":5082},[162,20859,20823],{"class":168},[162,20861,20355],{"class":5082},[162,20863,20134],{"class":168},[162,20865,20137],{"class":172},[162,20867,20140],{"class":168},[162,20869,20870,20872,20874,20876,20878,20880,20882],{"class":164,"line":466},[162,20871,17832],{"class":172},[162,20873,20820],{"class":5082},[162,20875,20823],{"class":168},[162,20877,20383],{"class":5082},[162,20879,20134],{"class":168},[162,20881,20137],{"class":172},[162,20883,20154],{"class":168},[19,20885,20886],{},"创建circle.h",[153,20888,20890],{"className":3305,"code":20889,"language":3307,"meta":158,"style":158},"#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",[71,20891,20892,20899,20905,20915,20921,20927,20931,20935,20939,20953,20967,20971,20979,20987,20991,20995,21001,21005,21009],{"__ignoreMap":158},[162,20893,20894,20896],{"class":164,"line":165},[162,20895,20684],{"class":172},[162,20897,20898],{"class":5082}," once\n",[162,20900,20901,20903],{"class":164,"line":197},[162,20902,5068],{"class":172},[162,20904,5071],{"class":179},[162,20906,20907,20909,20911,20913],{"class":164,"line":228},[162,20908,5076],{"class":172},[162,20910,5079],{"class":172},[162,20912,5083],{"class":5082},[162,20914,4433],{"class":168},[162,20916,20917,20919],{"class":164,"line":252},[162,20918,5068],{"class":172},[162,20920,20808],{"class":179},[162,20922,20923,20925],{"class":164,"line":328},[162,20924,17788],{"class":172},[162,20926,17791],{"class":5082},[162,20928,20929],{"class":164,"line":466},[162,20930,4685],{"class":168},[162,20932,20933],{"class":164,"line":471},[162,20934,17810],{"class":172},[162,20936,20937],{"class":164,"line":687},[162,20938,20085],{"class":361},[162,20940,20941,20943,20945,20947,20949,20951],{"class":164,"line":692},[162,20942,18002],{"class":172},[162,20944,20205],{"class":5082},[162,20946,604],{"class":168},[162,20948,17131],{"class":172},[162,20950,20212],{"class":671},[162,20952,5836],{"class":168},[162,20954,20955,20957,20959,20961,20963,20965],{"class":164,"line":698},[162,20956,18002],{"class":172},[162,20958,20227],{"class":5082},[162,20960,604],{"class":168},[162,20962,20232],{"class":5082},[162,20964,20235],{"class":671},[162,20966,5836],{"class":168},[162,20968,20969],{"class":164,"line":2955},[162,20970,20248],{"class":361},[162,20972,20973,20975,20977],{"class":164,"line":2960},[162,20974,17832],{"class":172},[162,20976,20255],{"class":5082},[162,20978,8743],{"class":168},[162,20980,20981,20983,20985],{"class":164,"line":2971},[162,20982,20267],{"class":5082},[162,20984,20270],{"class":5082},[162,20986,8743],{"class":168},[162,20988,20989],{"class":164,"line":2984},[162,20990,301],{"emptyLinePlaceholder":300},[162,20992,20993],{"class":164,"line":2989},[162,20994,18315],{"class":172},[162,20996,20997,20999],{"class":164,"line":3011},[162,20998,17832],{"class":172},[162,21000,17822],{"class":168},[162,21002,21003],{"class":164,"line":3022},[162,21004,20296],{"class":361},[162,21006,21007],{"class":164,"line":3027},[162,21008,20301],{"class":168},[162,21010,21011],{"class":164,"line":3046},[162,21012,7108],{"class":168},[19,21014,21015],{},"创建circle.cpp",[153,21017,21019],{"className":3305,"code":21018,"language":3307,"meta":158,"style":158},"#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",[71,21020,21021,21028,21051,21073,21078,21094],{"__ignoreMap":158},[162,21022,21023,21025],{"class":164,"line":165},[162,21024,5068],{"class":172},[162,21026,21027],{"class":179},"\u003Ccircle.h>\n",[162,21029,21030,21032,21035,21037,21039,21041,21043,21045,21047,21049],{"class":164,"line":197},[162,21031,8471],{"class":172},[162,21033,21034],{"class":5082}," Circle",[162,21036,20823],{"class":168},[162,21038,20551],{"class":5082},[162,21040,604],{"class":168},[162,21042,17131],{"class":172},[162,21044,20212],{"class":671},[162,21046,20215],{"class":168},[162,21048,173],{"class":172},[162,21050,20220],{"class":168},[162,21052,21053,21055,21057,21059,21061,21063,21065,21067,21069,21071],{"class":164,"line":228},[162,21054,8471],{"class":172},[162,21056,21034],{"class":5082},[162,21058,20823],{"class":168},[162,21060,20603],{"class":5082},[162,21062,604],{"class":168},[162,21064,20232],{"class":5082},[162,21066,20235],{"class":671},[162,21068,20238],{"class":168},[162,21070,173],{"class":172},[162,21072,20243],{"class":168},[162,21074,21075],{"class":164,"line":252},[162,21076,21077],{"class":361},"\u002F\u002F获取属性\n",[162,21079,21080,21082,21084,21086,21088,21090,21092],{"class":164,"line":328},[162,21081,17131],{"class":172},[162,21083,21034],{"class":5082},[162,21085,20823],{"class":168},[162,21087,20435],{"class":5082},[162,21089,20134],{"class":168},[162,21091,20137],{"class":172},[162,21093,20262],{"class":168},[162,21095,21096,21098,21100,21102,21104,21106,21108],{"class":164,"line":466},[162,21097,20232],{"class":5082},[162,21099,21034],{"class":5082},[162,21101,20823],{"class":168},[162,21103,20349],{"class":5082},[162,21105,20134],{"class":168},[162,21107,20137],{"class":172},[162,21109,20277],{"class":168},[19,21111,21112],{},"使用封装的类",[153,21114,21116],{"className":3305,"code":21115,"language":3307,"meta":158,"style":158},"#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",[71,21117,21118,21124,21134,21140,21146,21170,21174,21200,21226,21250,21264,21268,21280,21284,21288,21292,21304,21308,21312,21320,21324,21328,21332,21336,21340,21350,21356,21364,21372,21382,21388,21400,21408,21416,21426,21432,21444,21448,21456,21462],{"__ignoreMap":158},[162,21119,21120,21122],{"class":164,"line":165},[162,21121,5068],{"class":172},[162,21123,5071],{"class":179},[162,21125,21126,21128,21130,21132],{"class":164,"line":197},[162,21127,5076],{"class":172},[162,21129,5079],{"class":172},[162,21131,5083],{"class":5082},[162,21133,4433],{"class":168},[162,21135,21136,21138],{"class":164,"line":228},[162,21137,5068],{"class":172},[162,21139,21027],{"class":179},[162,21141,21142,21144],{"class":164,"line":252},[162,21143,5068],{"class":172},[162,21145,20808],{"class":179},[162,21147,21148,21150,21152,21154,21156,21158,21160,21162,21164,21166,21168],{"class":164,"line":328},[162,21149,8471],{"class":172},[162,21151,20312],{"class":5082},[162,21153,604],{"class":168},[162,21155,20317],{"class":5082},[162,21157,13683],{"class":172},[162,21159,3586],{"class":671},[162,21161,3670],{"class":168},[162,21163,20232],{"class":5082},[162,21165,13683],{"class":172},[162,21167,19],{"class":671},[162,21169,434],{"class":168},[162,21171,21172],{"class":164,"line":466},[162,21173,4685],{"class":168},[162,21175,21176,21178,21180,21182,21184,21186,21188,21190,21192,21194,21196,21198],{"class":164,"line":471},[162,21177,17832],{"class":172},[162,21179,20342],{"class":168},[162,21181,173],{"class":172},[162,21183,19433],{"class":168},[162,21185,20349],{"class":5082},[162,21187,20352],{"class":168},[162,21189,20355],{"class":5082},[162,21191,16145],{"class":168},[162,21193,353],{"class":172},[162,21195,18979],{"class":168},[162,21197,20355],{"class":5082},[162,21199,8743],{"class":168},[162,21201,21202,21204,21206,21208,21210,21212,21214,21216,21218,21220,21222,21224],{"class":164,"line":687},[162,21203,17832],{"class":172},[162,21205,20372],{"class":168},[162,21207,173],{"class":172},[162,21209,19433],{"class":168},[162,21211,20349],{"class":5082},[162,21213,20352],{"class":168},[162,21215,20383],{"class":5082},[162,21217,16145],{"class":168},[162,21219,353],{"class":172},[162,21221,18979],{"class":168},[162,21223,20383],{"class":5082},[162,21225,8743],{"class":168},[162,21227,21228,21230,21232,21234,21236,21238,21240,21242,21244,21246,21248],{"class":164,"line":692},[162,21229,17832],{"class":172},[162,21231,20400],{"class":168},[162,21233,173],{"class":172},[162,21235,20405],{"class":5082},[162,21237,20408],{"class":168},[162,21239,3745],{"class":172},[162,21241,20342],{"class":168},[162,21243,3771],{"class":172},[162,21245,20372],{"class":168},[162,21247,3745],{"class":172},[162,21249,20421],{"class":168},[162,21251,21252,21254,21256,21258,21260,21262],{"class":164,"line":698},[162,21253,2283],{"class":172},[162,21255,20428],{"class":168},[162,21257,4187],{"class":172},[162,21259,19433],{"class":168},[162,21261,20435],{"class":5082},[162,21263,20438],{"class":168},[162,21265,21266],{"class":164,"line":2955},[162,21267,5148],{"class":168},[162,21269,21270,21272,21274,21276,21278],{"class":164,"line":2960},[162,21271,12769],{"class":168},[162,21273,4316],{"class":172},[162,21275,20451],{"class":179},[162,21277,4584],{"class":172},[162,21279,11943],{"class":168},[162,21281,21282],{"class":164,"line":2971},[162,21283,5305],{"class":168},[162,21285,21286],{"class":164,"line":2984},[162,21287,19914],{"class":172},[162,21289,21290],{"class":164,"line":2989},[162,21291,5148],{"class":168},[162,21293,21294,21296,21298,21300,21302],{"class":164,"line":3011},[162,21295,12769],{"class":168},[162,21297,4316],{"class":172},[162,21299,20476],{"class":179},[162,21301,4584],{"class":172},[162,21303,11943],{"class":168},[162,21305,21306],{"class":164,"line":3022},[162,21307,5305],{"class":168},[162,21309,21310],{"class":164,"line":3027},[162,21311,1498],{"class":168},[162,21313,21314,21316,21318],{"class":164,"line":3046},[162,21315,3319],{"class":172},[162,21317,5092],{"class":5082},[162,21319,1526],{"class":168},[162,21321,21322],{"class":164,"line":3052},[162,21323,4685],{"class":168},[162,21325,21326],{"class":164,"line":3057},[162,21327,18146],{"class":361},[162,21329,21330],{"class":164,"line":3072},[162,21331,17893],{"class":168},[162,21333,21334],{"class":164,"line":3077},[162,21335,20513],{"class":168},[162,21337,21338],{"class":164,"line":3100},[162,21339,20085],{"class":361},[162,21341,21342,21344,21346,21348],{"class":164,"line":3140},[162,21343,4690],{"class":168},[162,21345,4316],{"class":172},[162,21347,20526],{"class":179},[162,21349,4433],{"class":168},[162,21351,21352,21354],{"class":164,"line":4878},[162,21353,17832],{"class":172},[162,21355,20535],{"class":168},[162,21357,21358,21360,21362],{"class":164,"line":4883},[162,21359,5130],{"class":168},[162,21361,4569],{"class":172},[162,21363,20544],{"class":168},[162,21365,21366,21368,21370],{"class":164,"line":4897},[162,21367,19686],{"class":168},[162,21369,20551],{"class":5082},[162,21371,20554],{"class":168},[162,21373,21374,21376,21378,21380],{"class":164,"line":4902},[162,21375,4690],{"class":168},[162,21377,4316],{"class":172},[162,21379,20563],{"class":179},[162,21381,4433],{"class":168},[162,21383,21384,21386],{"class":164,"line":5694},[162,21385,17832],{"class":172},[162,21387,20572],{"class":168},[162,21389,21390,21392,21394,21396,21398],{"class":164,"line":5708},[162,21391,5130],{"class":168},[162,21393,4569],{"class":172},[162,21395,4101],{"class":168},[162,21397,4569],{"class":172},[162,21399,20585],{"class":168},[162,21401,21402,21404,21406],{"class":164,"line":5716},[162,21403,20590],{"class":168},[162,21405,20593],{"class":5082},[162,21407,20596],{"class":168},[162,21409,21410,21412,21414],{"class":164,"line":5721},[162,21411,19686],{"class":168},[162,21413,20603],{"class":5082},[162,21415,20606],{"class":168},[162,21417,21418,21420,21422,21424],{"class":164,"line":5727},[162,21419,4690],{"class":168},[162,21421,4316],{"class":172},[162,21423,20615],{"class":179},[162,21425,4433],{"class":168},[162,21427,21428,21430],{"class":164,"line":5733},[162,21429,17832],{"class":172},[162,21431,20624],{"class":168},[162,21433,21434,21436,21438,21440,21442],{"class":164,"line":5738},[162,21435,5130],{"class":168},[162,21437,4569],{"class":172},[162,21439,20633],{"class":168},[162,21441,4569],{"class":172},[162,21443,20638],{"class":168},[162,21445,21446],{"class":164,"line":11052},[162,21447,20643],{"class":168},[162,21449,21450,21452,21454],{"class":164,"line":11076},[162,21451,20648],{"class":168},[162,21453,20593],{"class":5082},[162,21455,20653],{"class":168},[162,21457,21458,21460],{"class":164,"line":11081},[162,21459,20658],{"class":5082},[162,21461,20661],{"class":168},[162,21463,21464],{"class":164,"line":11087},[162,21465,1498],{"class":168},[14,21467,21469],{"id":21468},"_82对象的初始化清理","8.2对象的初始化清理",[4279,21471,21472,21475],{},[1455,21473,21474],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[1455,21476,21477],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[3284,21479,21481],{"id":21480},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,21483,21484,21485,21488],{},"对象的",[3453,21486,21487],{},"初始化和清理","也是两个非常重要的安全问题",[19,21490,21491],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,21493,21494],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,21496,21497,21498,21501,21502,21505],{},"c++利用了",[3453,21499,21500],{},"构造函数","和",[3453,21503,21504],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,21507,21508,21509],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[3453,21510,21511],{},"我们不提供构造和析构，编译器会提供",[19,21513,21514],{},[3453,21515,21516],{},"编译器提供的构造函数和析构函数是空实现。",[4279,21518,21519,21522],{},[1455,21520,21521],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[1455,21523,21524,21525,21528],{},"析构函数：主要作用在于对象",[3453,21526,21527],{},"销毁前","系统自动调用，执行一些清理工作。",[19,21530,21531,21534],{},[3453,21532,21533],{},"构造函数语法：",[71,21535,21536],{},"类名(){}",[1452,21538,21539,21542,21545,21548,21551],{},[1455,21540,21541],{},"构造函数，没有返回值也不写void",[1455,21543,21544],{},"函数名称与类名相同",[1455,21546,21547],{},"构造函数可以有参数，因此可以发生重载",[1455,21549,21550],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[1455,21552,21553,21554,3720],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[71,21555,21556],{},"Person(){}",[19,21558,21559,16889,21562],{},[3453,21560,21561],{},"析构函数语法：",[71,21563,21564],{},"~类名(){}",[1452,21566,21567,21570,21573,21579],{},[1455,21568,21569],{},"析构函数，没有返回值也不写void",[1455,21571,21572],{},"函数名称与类名相同,在名称前加上符号  ~",[1455,21574,21575,21576],{},"析构函数不可以有参数，因此",[3453,21577,21578],{},"不可以发生重载",[1455,21580,21581],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[153,21583,21585],{"className":3305,"code":21584,"language":3307,"meta":158,"style":158},"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",[71,21586,21587,21593,21597,21601,21606,21613,21617,21630,21634,21639,21646,21650,21663,21667,21671,21675,21679,21687,21691,21699,21703,21707,21715,21719,21724,21728,21735,21739,21752,21756,21764],{"__ignoreMap":158},[162,21588,21589,21591],{"class":164,"line":165},[162,21590,17788],{"class":172},[162,21592,18264],{"class":5082},[162,21594,21595],{"class":164,"line":197},[162,21596,4685],{"class":168},[162,21598,21599],{"class":164,"line":228},[162,21600,17810],{"class":172},[162,21602,21603],{"class":164,"line":252},[162,21604,21605],{"class":361},"    \u002F\u002F构造函数\n",[162,21607,21608,21611],{"class":164,"line":328},[162,21609,21610],{"class":5082},"    Person",[162,21612,1526],{"class":168},[162,21614,21615],{"class":164,"line":466},[162,21616,5148],{"class":168},[162,21618,21619,21621,21623,21626,21628],{"class":164,"line":471},[162,21620,12769],{"class":168},[162,21622,4316],{"class":172},[162,21624,21625],{"class":179}," \"Person的构造函数调用\"",[162,21627,4584],{"class":172},[162,21629,11943],{"class":168},[162,21631,21632],{"class":164,"line":687},[162,21633,5305],{"class":168},[162,21635,21636],{"class":164,"line":692},[162,21637,21638],{"class":361},"    \u002F\u002F析构函数\n",[162,21640,21641,21644],{"class":164,"line":698},[162,21642,21643],{"class":5082},"    ~Person",[162,21645,1526],{"class":168},[162,21647,21648],{"class":164,"line":2955},[162,21649,5148],{"class":168},[162,21651,21652,21654,21656,21659,21661],{"class":164,"line":2960},[162,21653,12769],{"class":168},[162,21655,4316],{"class":172},[162,21657,21658],{"class":179}," \"Person的析构函数调用\"",[162,21660,4584],{"class":172},[162,21662,11943],{"class":168},[162,21664,21665],{"class":164,"line":2971},[162,21666,5305],{"class":168},[162,21668,21669],{"class":164,"line":2984},[162,21670,301],{"emptyLinePlaceholder":300},[162,21672,21673],{"class":164,"line":2989},[162,21674,7108],{"class":168},[162,21676,21677],{"class":164,"line":3011},[162,21678,301],{"emptyLinePlaceholder":300},[162,21680,21681,21683,21685],{"class":164,"line":3022},[162,21682,8471],{"class":172},[162,21684,8695],{"class":5082},[162,21686,1526],{"class":168},[162,21688,21689],{"class":164,"line":3027},[162,21690,4685],{"class":168},[162,21692,21693,21696],{"class":164,"line":3046},[162,21694,21695],{"class":168},"    Person p;",[162,21697,21698],{"class":361},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[162,21700,21701],{"class":164,"line":3052},[162,21702,1498],{"class":168},[162,21704,21705],{"class":164,"line":3057},[162,21706,301],{"emptyLinePlaceholder":300},[162,21708,21709,21711,21713],{"class":164,"line":3072},[162,21710,3319],{"class":172},[162,21712,5092],{"class":5082},[162,21714,13951],{"class":168},[162,21716,21717],{"class":164,"line":3077},[162,21718,16305],{"class":168},[162,21720,21721],{"class":164,"line":3100},[162,21722,21723],{"class":361},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[162,21725,21726],{"class":164,"line":3140},[162,21727,301],{"emptyLinePlaceholder":300},[162,21729,21730,21732],{"class":164,"line":4878},[162,21731,21695],{"class":168},[162,21733,21734],{"class":361},"\u002F\u002F只有构造函数\n",[162,21736,21737],{"class":164,"line":4883},[162,21738,301],{"emptyLinePlaceholder":300},[162,21740,21741,21743,21745,21747,21749],{"class":164,"line":4897},[162,21742,5421],{"class":5082},[162,21744,604],{"class":168},[162,21746,5426],{"class":179},[162,21748,9073],{"class":168},[162,21750,21751],{"class":361},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[162,21753,21754],{"class":164,"line":4902},[162,21755,301],{"emptyLinePlaceholder":300},[162,21757,21758,21760,21762],{"class":164,"line":5694},[162,21759,7203],{"class":172},[162,21761,2717],{"class":207},[162,21763,4433],{"class":168},[162,21765,21766],{"class":164,"line":5708},[162,21767,1498],{"class":168},[19,21769,21770],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[3284,21772,21774],{"id":21773},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,21776,21777],{},"两种分类方式：",[19,21779,21780],{},"​\t按参数分为： 有参构造和无参构造",[19,21782,21783],{},"​\t按类型分为： 普通构造和拷贝构造",[19,21785,21786],{},"三种调用方式：",[19,21788,21789],{},"​\t括号法",[19,21791,21792],{},"​\t显示法",[19,21794,21795],{},"​\t隐式转换法",[153,21797,21799],{"className":3305,"code":21798,"language":3307,"meta":158,"style":158},"#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",[71,21800,21801,21807,21817,21822,21827,21832,21837,21841,21849,21853,21857,21861,21867,21871,21884,21888,21900,21904,21913,21926,21930,21934,21940,21944,21957,21961,21966,21982,21986,21991,22000,22013,22017,22023,22027,22032,22040,22044,22049,22053,22061,22065,22070,22075,22080,22085,22090,22094,22099,22104,22109,22114,22118,22123,22128,22144,22156,22161,22165,22170,22175,22180,22184,22189,22203,22216,22220,22228,22232,22238,22244,22252],{"__ignoreMap":158},[162,21802,21803,21805],{"class":164,"line":165},[162,21804,5068],{"class":172},[162,21806,5071],{"class":179},[162,21808,21809,21811,21813,21815],{"class":164,"line":197},[162,21810,5076],{"class":172},[162,21812,5079],{"class":172},[162,21814,5083],{"class":5082},[162,21816,4433],{"class":168},[162,21818,21819],{"class":164,"line":228},[162,21820,21821],{"class":361},"\u002F\u002F1.构造函数的分类及调用\n",[162,21823,21824],{"class":164,"line":252},[162,21825,21826],{"class":361},"\u002F\u002F分类\n",[162,21828,21829],{"class":164,"line":328},[162,21830,21831],{"class":361},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[162,21833,21834],{"class":164,"line":466},[162,21835,21836],{"class":361},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[162,21838,21839],{"class":164,"line":471},[162,21840,301],{"emptyLinePlaceholder":300},[162,21842,21843,21845,21847],{"class":164,"line":687},[162,21844,17788],{"class":172},[162,21846,18661],{"class":5082},[162,21848,5791],{"class":168},[162,21850,21851],{"class":164,"line":692},[162,21852,4685],{"class":168},[162,21854,21855],{"class":164,"line":698},[162,21856,17810],{"class":172},[162,21858,21859],{"class":164,"line":2955},[162,21860,21605],{"class":361},[162,21862,21863,21865],{"class":164,"line":2960},[162,21864,21610],{"class":5082},[162,21866,1526],{"class":168},[162,21868,21869],{"class":164,"line":2971},[162,21870,5148],{"class":168},[162,21872,21873,21875,21877,21880,21882],{"class":164,"line":2984},[162,21874,6565],{"class":168},[162,21876,4316],{"class":172},[162,21878,21879],{"class":179},"\"Person构造函数无参构造\"",[162,21881,4316],{"class":172},[162,21883,4338],{"class":168},[162,21885,21886],{"class":164,"line":2989},[162,21887,5305],{"class":168},[162,21889,21890,21892,21894,21896,21898],{"class":164,"line":3011},[162,21891,21610],{"class":5082},[162,21893,604],{"class":168},[162,21895,3319],{"class":172},[162,21897,4538],{"class":671},[162,21899,434],{"class":168},[162,21901,21902],{"class":164,"line":3022},[162,21903,5148],{"class":168},[162,21905,21906,21909,21911],{"class":164,"line":3027},[162,21907,21908],{"class":168},"        age",[162,21910,173],{"class":172},[162,21912,9303],{"class":168},[162,21914,21915,21917,21919,21922,21924],{"class":164,"line":3046},[162,21916,6565],{"class":168},[162,21918,4316],{"class":172},[162,21920,21921],{"class":179},"\"Person构造函数有参构造\"",[162,21923,4316],{"class":172},[162,21925,4338],{"class":168},[162,21927,21928],{"class":164,"line":3052},[162,21929,5305],{"class":168},[162,21931,21932],{"class":164,"line":3057},[162,21933,21638],{"class":361},[162,21935,21936,21938],{"class":164,"line":3072},[162,21937,21643],{"class":5082},[162,21939,1526],{"class":168},[162,21941,21942],{"class":164,"line":3077},[162,21943,5148],{"class":168},[162,21945,21946,21948,21950,21953,21955],{"class":164,"line":3100},[162,21947,6565],{"class":168},[162,21949,4316],{"class":172},[162,21951,21952],{"class":179},"\"Person析构函数被调用\"",[162,21954,4316],{"class":172},[162,21956,4338],{"class":168},[162,21958,21959],{"class":164,"line":3140},[162,21960,5305],{"class":168},[162,21962,21963],{"class":164,"line":4878},[162,21964,21965],{"class":361},"    \u002F\u002F拷贝构造函数\n",[162,21967,21968,21970,21972,21974,21976,21978,21980],{"class":164,"line":4883},[162,21969,21610],{"class":5082},[162,21971,604],{"class":168},[162,21973,9898],{"class":172},[162,21975,18661],{"class":5082},[162,21977,13683],{"class":172},[162,21979,19],{"class":671},[162,21981,434],{"class":168},[162,21983,21984],{"class":164,"line":4897},[162,21985,5148],{"class":168},[162,21987,21988],{"class":164,"line":4902},[162,21989,21990],{"class":361},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[162,21992,21993,21995,21997],{"class":164,"line":5694},[162,21994,21908],{"class":168},[162,21996,173],{"class":172},[162,21998,21999],{"class":168},"p.age;\n",[162,22001,22002,22004,22006,22009,22011],{"class":164,"line":5708},[162,22003,6565],{"class":168},[162,22005,4316],{"class":172},[162,22007,22008],{"class":179},"\"Person拷贝构造函数被调用\"",[162,22010,4316],{"class":172},[162,22012,4338],{"class":168},[162,22014,22015],{"class":164,"line":5716},[162,22016,5305],{"class":168},[162,22018,22019,22021],{"class":164,"line":5721},[162,22020,5103],{"class":172},[162,22022,10901],{"class":168},[162,22024,22025],{"class":164,"line":5727},[162,22026,7108],{"class":168},[162,22028,22029],{"class":164,"line":5733},[162,22030,22031],{"class":361},"\u002F\u002F调用\n",[162,22033,22034,22036,22038],{"class":164,"line":5738},[162,22035,8471],{"class":172},[162,22037,8695],{"class":5082},[162,22039,1526],{"class":168},[162,22041,22042],{"class":164,"line":11052},[162,22043,4685],{"class":168},[162,22045,22046],{"class":164,"line":11076},[162,22047,22048],{"class":361},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[162,22050,22051],{"class":164,"line":11081},[162,22052,1498],{"class":168},[162,22054,22055,22057,22059],{"class":164,"line":11087},[162,22056,8471],{"class":172},[162,22058,8764],{"class":5082},[162,22060,1526],{"class":168},[162,22062,22063],{"class":164,"line":11114},[162,22064,4685],{"class":168},[162,22066,22067],{"class":164,"line":11119},[162,22068,22069],{"class":361},"    \u002F\u002F1.括号法\n",[162,22071,22072],{"class":164,"line":11125},[162,22073,22074],{"class":361},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[162,22076,22077],{"class":164,"line":11137},[162,22078,22079],{"class":361},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[162,22081,22082],{"class":164,"line":11149},[162,22083,22084],{"class":361},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[162,22086,22087],{"class":164,"line":11161},[162,22088,22089],{"class":361},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[162,22091,22092],{"class":164,"line":12816},[162,22093,301],{"emptyLinePlaceholder":300},[162,22095,22096],{"class":164,"line":12841},[162,22097,22098],{"class":361},"    \u002F\u002F注意事项\n",[162,22100,22101],{"class":164,"line":12864},[162,22102,22103],{"class":361},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[162,22105,22106],{"class":164,"line":12888},[162,22107,22108],{"class":361},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[162,22110,22111],{"class":164,"line":12893},[162,22112,22113],{"class":361},"    \u002F\u002F Person p4();\n",[162,22115,22116],{"class":164,"line":12898},[162,22117,301],{"emptyLinePlaceholder":300},[162,22119,22120],{"class":164,"line":12903},[162,22121,22122],{"class":361},"    \u002F\u002F2.显示法\n",[162,22124,22125],{"class":164,"line":12912},[162,22126,22127],{"class":168},"    Person p1;\n",[162,22129,22130,22133,22135,22138,22140,22142],{"class":164,"line":12917},[162,22131,22132],{"class":168},"    Person p2",[162,22134,173],{"class":172},[162,22136,22137],{"class":5082},"Person",[162,22139,604],{"class":168},[162,22141,1006],{"class":207},[162,22143,5836],{"class":168},[162,22145,22146,22149,22151,22153],{"class":164,"line":12923},[162,22147,22148],{"class":168},"    Person p3",[162,22150,173],{"class":172},[162,22152,22137],{"class":5082},[162,22154,22155],{"class":168},"(p2);\n",[162,22157,22158],{"class":164,"line":12944},[162,22159,22160],{"class":361},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[162,22162,22163],{"class":164,"line":12950},[162,22164,301],{"emptyLinePlaceholder":300},[162,22166,22167],{"class":164,"line":12964},[162,22168,22169],{"class":361},"    \u002F\u002F 注意事项2\n",[162,22171,22172],{"class":164,"line":12970},[162,22173,22174],{"class":361},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[162,22176,22177],{"class":164,"line":12997},[162,22178,22179],{"class":361},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[162,22181,22182],{"class":164,"line":13006},[162,22183,301],{"emptyLinePlaceholder":300},[162,22185,22186],{"class":164,"line":13012},[162,22187,22188],{"class":361},"    \u002F\u002F3.隐士转换法\n",[162,22190,22191,22194,22196,22198,22200],{"class":164,"line":13020},[162,22192,22193],{"class":168},"    Person p4",[162,22195,173],{"class":172},[162,22197,1006],{"class":207},[162,22199,3367],{"class":168},[162,22201,22202],{"class":361},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[162,22204,22205,22208,22210,22213],{"class":164,"line":13025},[162,22206,22207],{"class":168},"    Person p5",[162,22209,173],{"class":172},[162,22211,22212],{"class":168},"p4;",[162,22214,22215],{"class":361}," \u002F\u002F 这里会调用拷贝构造函数\n",[162,22217,22218],{"class":164,"line":19695},[162,22219,1498],{"class":168},[162,22221,22222,22224,22226],{"class":164,"line":19701},[162,22223,3319],{"class":172},[162,22225,5092],{"class":5082},[162,22227,1526],{"class":168},[162,22229,22230],{"class":164,"line":19724},[162,22231,4685],{"class":168},[162,22233,22234,22236],{"class":164,"line":19730},[162,22235,8740],{"class":5082},[162,22237,8743],{"class":168},[162,22239,22240,22242],{"class":164,"line":19753},[162,22241,8809],{"class":5082},[162,22243,8743],{"class":168},[162,22245,22246,22248,22250],{"class":164,"line":19767},[162,22247,7203],{"class":172},[162,22249,2717],{"class":207},[162,22251,4433],{"class":168},[162,22253,22254],{"class":164,"line":19787},[162,22255,1498],{"class":168},[19,22257,22258,22261],{},[3453,22259,22260],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[3284,22263,22265],{"id":22264},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,22267,22268],{},"C++中拷贝构造函数调用时机通常有三种情况",[4279,22270,22271,22274,22277],{},[1455,22272,22273],{},"使用一个已经创建完毕的对象来初始化一个新对象",[1455,22275,22276],{},"值传递的方式给函数参数传值",[1455,22278,22279],{},"以值方式返回局部对象",[153,22281,22283],{"className":3305,"code":22282,"language":3307,"meta":158,"style":158},"#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",[71,22284,22285,22291,22301,22305,22310,22314,22319,22324,22329,22335,22339,22343,22349,22353,22366,22370,22375,22387,22391,22399,22412,22416,22420,22436,22440,22449,22462,22466,22472,22476,22488,22492,22498,22502,22506,22514,22518,22531,22539,22557,22561,22566,22571,22586,22590,22603,22607,22615,22619,22623,22631,22635,22640,22649,22653,22657,22682,22692,22696,22704,22708,22719,22744,22748,22752,22756,22764,22768,22773,22778,22785,22790,22795,22800,22805,22809,22814,22818,22823,22827,22832,22837,22841,22845,22850,22855,22863],{"__ignoreMap":158},[162,22286,22287,22289],{"class":164,"line":165},[162,22288,5068],{"class":172},[162,22290,5071],{"class":179},[162,22292,22293,22295,22297,22299],{"class":164,"line":197},[162,22294,5076],{"class":172},[162,22296,5079],{"class":172},[162,22298,5083],{"class":5082},[162,22300,4433],{"class":168},[162,22302,22303],{"class":164,"line":228},[162,22304,301],{"emptyLinePlaceholder":300},[162,22306,22307],{"class":164,"line":252},[162,22308,22309],{"class":361},"\u002F\u002F拷贝构造函数调用时机\n",[162,22311,22312],{"class":164,"line":328},[162,22313,301],{"emptyLinePlaceholder":300},[162,22315,22316],{"class":164,"line":466},[162,22317,22318],{"class":361},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[162,22320,22321],{"class":164,"line":471},[162,22322,22323],{"class":361},"\u002F\u002F2.值传递的方式给函数参数传值\n",[162,22325,22326],{"class":164,"line":687},[162,22327,22328],{"class":361},"\u002F\u002F3.以值方式返回局部对象\n",[162,22330,22331,22333],{"class":164,"line":692},[162,22332,17788],{"class":172},[162,22334,18264],{"class":5082},[162,22336,22337],{"class":164,"line":698},[162,22338,4685],{"class":168},[162,22340,22341],{"class":164,"line":2955},[162,22342,17810],{"class":172},[162,22344,22345,22347],{"class":164,"line":2960},[162,22346,21610],{"class":5082},[162,22348,1526],{"class":168},[162,22350,22351],{"class":164,"line":2971},[162,22352,5148],{"class":168},[162,22354,22355,22357,22359,22362,22364],{"class":164,"line":2984},[162,22356,12769],{"class":168},[162,22358,4316],{"class":172},[162,22360,22361],{"class":179}," \"Person的默认构造函数调用\"",[162,22363,4584],{"class":172},[162,22365,11943],{"class":168},[162,22367,22368],{"class":164,"line":2989},[162,22369,5305],{"class":168},[162,22371,22372],{"class":164,"line":3011},[162,22373,22374],{"class":361},"    \u002F\u002F有参构造\n",[162,22376,22377,22379,22381,22383,22385],{"class":164,"line":3022},[162,22378,21610],{"class":5082},[162,22380,604],{"class":168},[162,22382,3319],{"class":172},[162,22384,18780],{"class":671},[162,22386,434],{"class":168},[162,22388,22389],{"class":164,"line":3027},[162,22390,5148],{"class":168},[162,22392,22393,22395,22397],{"class":164,"line":3046},[162,22394,18834],{"class":168},[162,22396,173],{"class":172},[162,22398,10901],{"class":168},[162,22400,22401,22403,22405,22408,22410],{"class":164,"line":3052},[162,22402,12769],{"class":168},[162,22404,4316],{"class":172},[162,22406,22407],{"class":179}," \"Person的有参构造函数调用\"",[162,22409,4584],{"class":172},[162,22411,11943],{"class":168},[162,22413,22414],{"class":164,"line":3057},[162,22415,5305],{"class":168},[162,22417,22418],{"class":164,"line":3072},[162,22419,21965],{"class":361},[162,22421,22422,22424,22426,22428,22430,22432,22434],{"class":164,"line":3077},[162,22423,21610],{"class":5082},[162,22425,604],{"class":168},[162,22427,9898],{"class":172},[162,22429,18661],{"class":5082},[162,22431,13683],{"class":172},[162,22433,19],{"class":671},[162,22435,434],{"class":168},[162,22437,22438],{"class":164,"line":3100},[162,22439,5148],{"class":168},[162,22441,22442,22444,22446],{"class":164,"line":3140},[162,22443,18834],{"class":168},[162,22445,173],{"class":172},[162,22447,22448],{"class":168}," p.m_Age;\n",[162,22450,22451,22453,22455,22458,22460],{"class":164,"line":4878},[162,22452,12769],{"class":168},[162,22454,4316],{"class":172},[162,22456,22457],{"class":179}," \"Person的拷贝构造函数调用\"",[162,22459,4584],{"class":172},[162,22461,11943],{"class":168},[162,22463,22464],{"class":164,"line":4883},[162,22465,5305],{"class":168},[162,22467,22468,22470],{"class":164,"line":4897},[162,22469,21643],{"class":5082},[162,22471,1526],{"class":168},[162,22473,22474],{"class":164,"line":4902},[162,22475,5148],{"class":168},[162,22477,22478,22480,22482,22484,22486],{"class":164,"line":5694},[162,22479,12769],{"class":168},[162,22481,4316],{"class":172},[162,22483,21658],{"class":179},[162,22485,4584],{"class":172},[162,22487,11943],{"class":168},[162,22489,22490],{"class":164,"line":5708},[162,22491,5305],{"class":168},[162,22493,22494,22496],{"class":164,"line":5716},[162,22495,5103],{"class":172},[162,22497,18757],{"class":168},[162,22499,22500],{"class":164,"line":5721},[162,22501,7108],{"class":168},[162,22503,22504],{"class":164,"line":5727},[162,22505,22318],{"class":361},[162,22507,22508,22510,22512],{"class":164,"line":5733},[162,22509,8471],{"class":172},[162,22511,8695],{"class":5082},[162,22513,1526],{"class":168},[162,22515,22516],{"class":164,"line":5738},[162,22517,4685],{"class":168},[162,22519,22520,22523,22525,22527,22529],{"class":164,"line":11052},[162,22521,22522],{"class":168},"    Person ",[162,22524,10236],{"class":5082},[162,22526,604],{"class":168},[162,22528,1011],{"class":207},[162,22530,5836],{"class":168},[162,22532,22533,22535,22537],{"class":164,"line":11076},[162,22534,22522],{"class":168},[162,22536,10139],{"class":5082},[162,22538,20606],{"class":168},[162,22540,22541,22543,22545,22548,22550,22553,22555],{"class":164,"line":11081},[162,22542,4690],{"class":168},[162,22544,4316],{"class":172},[162,22546,22547],{"class":179},"\"P2的年龄为：\"",[162,22549,4316],{"class":172},[162,22551,22552],{"class":168},"p2.m_Age",[162,22554,4316],{"class":172},[162,22556,4338],{"class":168},[162,22558,22559],{"class":164,"line":11087},[162,22560,1498],{"class":168},[162,22562,22563],{"class":164,"line":11114},[162,22564,22565],{"class":361},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[162,22567,22568],{"class":164,"line":11119},[162,22569,22570],{"class":361},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[162,22572,22573,22575,22578,22580,22582,22584],{"class":164,"line":11125},[162,22574,8471],{"class":172},[162,22576,22577],{"class":5082}," doWork",[162,22579,604],{"class":168},[162,22581,22137],{"class":5082},[162,22583,9931],{"class":671},[162,22585,434],{"class":168},[162,22587,22588],{"class":164,"line":11137},[162,22589,4685],{"class":168},[162,22591,22592,22594,22596,22599,22601],{"class":164,"line":11149},[162,22593,9635],{"class":168},[162,22595,4316],{"class":172},[162,22597,22598],{"class":179}," \"doWork函数调用\"",[162,22600,4584],{"class":172},[162,22602,11943],{"class":168},[162,22604,22605],{"class":164,"line":11161},[162,22606,1498],{"class":168},[162,22608,22609,22611,22613],{"class":164,"line":12816},[162,22610,8471],{"class":172},[162,22612,8764],{"class":5082},[162,22614,1526],{"class":168},[162,22616,22617],{"class":164,"line":12841},[162,22618,4685],{"class":168},[162,22620,22621],{"class":164,"line":12864},[162,22622,18406],{"class":168},[162,22624,22625,22628],{"class":164,"line":12888},[162,22626,22627],{"class":5082},"    doWork",[162,22629,22630],{"class":168},"(p);\n",[162,22632,22633],{"class":164,"line":12893},[162,22634,1498],{"class":168},[162,22636,22637],{"class":164,"line":12898},[162,22638,22639],{"class":361},"\u002F\u002F 3.以值方式返回局部对象\n",[162,22641,22642,22644,22647],{"class":164,"line":12903},[162,22643,22137],{"class":5082},[162,22645,22646],{"class":5082}," doWork2",[162,22648,1526],{"class":168},[162,22650,22651],{"class":164,"line":12912},[162,22652,4685],{"class":168},[162,22654,22655],{"class":164,"line":12917},[162,22656,22127],{"class":168},[162,22658,22659,22661,22663,22665,22667,22669,22671,22673,22675,22677,22679],{"class":164,"line":12923},[162,22660,4690],{"class":168},[162,22662,4316],{"class":172},[162,22664,604],{"class":168},[162,22666,3319],{"class":172},[162,22668,9624],{"class":172},[162,22670,3720],{"class":168},[162,22672,1667],{"class":172},[162,22674,10236],{"class":168},[162,22676,4316],{"class":172},[162,22678,4381],{"class":168},[162,22680,22681],{"class":361},"\u002F\u002F打印p1的地址\n",[162,22683,22684,22686,22689],{"class":164,"line":12944},[162,22685,7203],{"class":172},[162,22687,22688],{"class":168}," p1;",[162,22690,22691],{"class":361},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[162,22693,22694],{"class":164,"line":12950},[162,22695,1498],{"class":168},[162,22697,22698,22700,22702],{"class":164,"line":12964},[162,22699,8471],{"class":172},[162,22701,8836],{"class":5082},[162,22703,1526],{"class":168},[162,22705,22706],{"class":164,"line":12970},[162,22707,4685],{"class":168},[162,22709,22710,22713,22715,22717],{"class":164,"line":12997},[162,22711,22712],{"class":168},"    Person p ",[162,22714,173],{"class":172},[162,22716,22646],{"class":5082},[162,22718,8743],{"class":168},[162,22720,22721,22723,22725,22727,22729,22731,22733,22735,22737,22739,22741],{"class":164,"line":13006},[162,22722,4690],{"class":168},[162,22724,4316],{"class":172},[162,22726,604],{"class":168},[162,22728,3319],{"class":172},[162,22730,9624],{"class":172},[162,22732,3720],{"class":168},[162,22734,1667],{"class":172},[162,22736,19],{"class":168},[162,22738,4316],{"class":172},[162,22740,4381],{"class":168},[162,22742,22743],{"class":361},"\u002F\u002F打印p的地址\n",[162,22745,22746],{"class":164,"line":13012},[162,22747,1498],{"class":168},[162,22749,22750],{"class":164,"line":13020},[162,22751,301],{"emptyLinePlaceholder":300},[162,22753,22754],{"class":164,"line":13025},[162,22755,301],{"emptyLinePlaceholder":300},[162,22757,22758,22760,22762],{"class":164,"line":19695},[162,22759,3319],{"class":172},[162,22761,5092],{"class":5082},[162,22763,1526],{"class":168},[162,22765,22766],{"class":164,"line":19701},[162,22767,4685],{"class":168},[162,22769,22770],{"class":164,"line":19724},[162,22771,22772],{"class":361},"    \u002F\u002F test01();\n",[162,22774,22775],{"class":164,"line":19730},[162,22776,22777],{"class":361},"    \u002F\u002F test02();\n",[162,22779,22780,22783],{"class":164,"line":19753},[162,22781,22782],{"class":5082},"    test03",[162,22784,8743],{"class":168},[162,22786,22787],{"class":164,"line":19767},[162,22788,22789],{"class":361},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[162,22791,22792],{"class":164,"line":19787},[162,22793,22794],{"class":361},"\u002F\u002F 输出结果如下：\n",[162,22796,22797],{"class":164,"line":19793},[162,22798,22799],{"class":361},"\u002F\u002F Person的默认构造函数调用\n",[162,22801,22802],{"class":164,"line":19804},[162,22803,22804],{"class":361},"\u002F\u002F 0x7fffffffceec\n",[162,22806,22807],{"class":164,"line":19827},[162,22808,22804],{"class":361},[162,22810,22811],{"class":164,"line":19849},[162,22812,22813],{"class":361},"\u002F\u002F Person的析构函数调用\n",[162,22815,22816],{"class":164,"line":19854},[162,22817,301],{"emptyLinePlaceholder":300},[162,22819,22820],{"class":164,"line":19860},[162,22821,22822],{"class":361},"\u002F\u002F 之前的输出结果如下：\n",[162,22824,22825],{"class":164,"line":19874},[162,22826,22799],{"class":361},[162,22828,22829],{"class":164,"line":19887},[162,22830,22831],{"class":361},"\u002F\u002F 地址\n",[162,22833,22834],{"class":164,"line":19892},[162,22835,22836],{"class":361},"\u002F\u002F Person的拷贝构造函数调用\n",[162,22838,22839],{"class":164,"line":19906},[162,22840,22813],{"class":361},[162,22842,22843],{"class":164,"line":19911},[162,22844,22831],{"class":361},[162,22846,22847],{"class":164,"line":19917},[162,22848,22849],{"class":361},"\u002F\u002F (这两次输出的地址也是不同的) \n",[162,22851,22852],{"class":164,"line":19922},[162,22853,22854],{"class":361},"\u002F\u002F Person的析构函数调用     \n",[162,22856,22857,22859,22861],{"class":164,"line":19936},[162,22858,7203],{"class":172},[162,22860,2717],{"class":207},[162,22862,4433],{"class":168},[162,22864,22865],{"class":164,"line":19941},[162,22866,1498],{"class":168},[19,22868,22869],{},"简化版理解",[153,22871,22873],{"className":3305,"code":22872,"language":3307,"meta":158,"style":158},"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",[71,22874,22875,22883,22887,22893,22906,22917,22921,22933,22946,22954,22958,22974,22987,22996,23000,23005,23011,23024,23028,23032,23039,23043,23047,23052,23060,23064,23080,23093,23106,23110,23115,23123,23127,23131,23136,23141,23157,23165,23172,23178,23182,23186,23191,23199,23203,23207,23230,23237,23241,23245,23253,23257,23267,23289,23293,23297,23301,23309,23313,23318,23323,23329,23333,23343,23347,23355],{"__ignoreMap":158},[162,22876,22877,22879,22881],{"class":164,"line":165},[162,22878,17788],{"class":172},[162,22880,18661],{"class":5082},[162,22882,1722],{"class":168},[162,22884,22885],{"class":164,"line":197},[162,22886,17810],{"class":172},[162,22888,22889,22891],{"class":164,"line":228},[162,22890,21610],{"class":5082},[162,22892,13951],{"class":168},[162,22894,22895,22897,22899,22902,22904],{"class":164,"line":252},[162,22896,12769],{"class":168},[162,22898,4316],{"class":172},[162,22900,22901],{"class":179}," \"无参构造函数!\"",[162,22903,4584],{"class":172},[162,22905,11943],{"class":168},[162,22907,22908,22911,22913,22915],{"class":164,"line":328},[162,22909,22910],{"class":168},"        mAge ",[162,22912,173],{"class":172},[162,22914,2717],{"class":207},[162,22916,4433],{"class":168},[162,22918,22919],{"class":164,"line":466},[162,22920,5305],{"class":168},[162,22922,22923,22925,22927,22929,22931],{"class":164,"line":471},[162,22924,21610],{"class":5082},[162,22926,604],{"class":168},[162,22928,3319],{"class":172},[162,22930,18780],{"class":671},[162,22932,15537],{"class":168},[162,22934,22935,22937,22939,22942,22944],{"class":164,"line":687},[162,22936,12769],{"class":168},[162,22938,4316],{"class":172},[162,22940,22941],{"class":179}," \"有参构造函数!\"",[162,22943,4584],{"class":172},[162,22945,11943],{"class":168},[162,22947,22948,22950,22952],{"class":164,"line":692},[162,22949,22910],{"class":168},[162,22951,173],{"class":172},[162,22953,10901],{"class":168},[162,22955,22956],{"class":164,"line":698},[162,22957,5305],{"class":168},[162,22959,22960,22962,22964,22966,22968,22970,22972],{"class":164,"line":2955},[162,22961,21610],{"class":5082},[162,22963,604],{"class":168},[162,22965,9898],{"class":172},[162,22967,18661],{"class":5082},[162,22969,1667],{"class":172},[162,22971,9931],{"class":671},[162,22973,15537],{"class":168},[162,22975,22976,22978,22980,22983,22985],{"class":164,"line":2960},[162,22977,12769],{"class":168},[162,22979,4316],{"class":172},[162,22981,22982],{"class":179}," \"拷贝构造函数!\"",[162,22984,4584],{"class":172},[162,22986,11943],{"class":168},[162,22988,22989,22991,22993],{"class":164,"line":2971},[162,22990,22910],{"class":168},[162,22992,173],{"class":172},[162,22994,22995],{"class":168}," p.mAge;\n",[162,22997,22998],{"class":164,"line":2984},[162,22999,5305],{"class":168},[162,23001,23002],{"class":164,"line":2989},[162,23003,23004],{"class":361},"    \u002F\u002F析构函数在释放内存之前调用\n",[162,23006,23007,23009],{"class":164,"line":3011},[162,23008,21643],{"class":5082},[162,23010,13951],{"class":168},[162,23012,23013,23015,23017,23020,23022],{"class":164,"line":3022},[162,23014,12769],{"class":168},[162,23016,4316],{"class":172},[162,23018,23019],{"class":179}," \"析构函数!\"",[162,23021,4584],{"class":172},[162,23023,11943],{"class":168},[162,23025,23026],{"class":164,"line":3027},[162,23027,5305],{"class":168},[162,23029,23030],{"class":164,"line":3046},[162,23031,17810],{"class":172},[162,23033,23034,23036],{"class":164,"line":3052},[162,23035,5103],{"class":172},[162,23037,23038],{"class":168}," mAge;\n",[162,23040,23041],{"class":164,"line":3057},[162,23042,7108],{"class":168},[162,23044,23045],{"class":164,"line":3072},[162,23046,301],{"emptyLinePlaceholder":300},[162,23048,23049],{"class":164,"line":3077},[162,23050,23051],{"class":361},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[162,23053,23054,23056,23058],{"class":164,"line":3100},[162,23055,8471],{"class":172},[162,23057,8695],{"class":5082},[162,23059,13951],{"class":168},[162,23061,23062],{"class":164,"line":3140},[162,23063,301],{"emptyLinePlaceholder":300},[162,23065,23066,23068,23071,23073,23075,23077],{"class":164,"line":4878},[162,23067,22522],{"class":168},[162,23069,23070],{"class":5082},"man",[162,23072,604],{"class":168},[162,23074,3608],{"class":207},[162,23076,9073],{"class":168},[162,23078,23079],{"class":361}," \u002F\u002Fp对象已经创建完毕\n",[162,23081,23082,23084,23087,23090],{"class":164,"line":4883},[162,23083,22522],{"class":168},[162,23085,23086],{"class":5082},"newman",[162,23088,23089],{"class":168},"(man);",[162,23091,23092],{"class":361}," \u002F\u002F调用拷贝构造函数\n",[162,23094,23095,23098,23100,23103],{"class":164,"line":4897},[162,23096,23097],{"class":168},"    Person newman2 ",[162,23099,173],{"class":172},[162,23101,23102],{"class":168}," man;",[162,23104,23105],{"class":361}," \u002F\u002F拷贝构造\n",[162,23107,23108],{"class":164,"line":4902},[162,23109,301],{"emptyLinePlaceholder":300},[162,23111,23112],{"class":164,"line":5694},[162,23113,23114],{"class":361},"    \u002F\u002FPerson newman3;\n",[162,23116,23117,23120],{"class":164,"line":5708},[162,23118,23119],{"class":361},"    \u002F\u002Fnewman3 = man;",[162,23121,23122],{"class":361}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[162,23124,23125],{"class":164,"line":5716},[162,23126,1498],{"class":168},[162,23128,23129],{"class":164,"line":5721},[162,23130,301],{"emptyLinePlaceholder":300},[162,23132,23133],{"class":164,"line":5727},[162,23134,23135],{"class":361},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[162,23137,23138],{"class":164,"line":5733},[162,23139,23140],{"class":361},"\u002F\u002F相当于Person p1 = p;\n",[162,23142,23143,23145,23147,23149,23151,23154],{"class":164,"line":5738},[162,23144,8471],{"class":172},[162,23146,22577],{"class":5082},[162,23148,604],{"class":168},[162,23150,22137],{"class":5082},[162,23152,23153],{"class":671}," p1",[162,23155,23156],{"class":168},") {}\n",[162,23158,23159,23161,23163],{"class":164,"line":11052},[162,23160,8471],{"class":172},[162,23162,8764],{"class":5082},[162,23164,13951],{"class":168},[162,23166,23167,23169],{"class":164,"line":11076},[162,23168,21695],{"class":168},[162,23170,23171],{"class":361}," \u002F\u002F无参构造函数\n",[162,23173,23174,23176],{"class":164,"line":11081},[162,23175,22627],{"class":5082},[162,23177,22630],{"class":168},[162,23179,23180],{"class":164,"line":11087},[162,23181,1498],{"class":168},[162,23183,23184],{"class":164,"line":11114},[162,23185,301],{"emptyLinePlaceholder":300},[162,23187,23188],{"class":164,"line":11119},[162,23189,23190],{"class":361},"\u002F\u002F3. 以值方式返回局部对象\n",[162,23192,23193,23195,23197],{"class":164,"line":11125},[162,23194,22137],{"class":5082},[162,23196,22646],{"class":5082},[162,23198,1526],{"class":168},[162,23200,23201],{"class":164,"line":11137},[162,23202,4685],{"class":168},[162,23204,23205],{"class":164,"line":11149},[162,23206,22127],{"class":168},[162,23208,23209,23211,23213,23215,23217,23219,23221,23223,23226,23228],{"class":164,"line":11161},[162,23210,9635],{"class":168},[162,23212,4316],{"class":172},[162,23214,1003],{"class":168},[162,23216,3319],{"class":172},[162,23218,9624],{"class":172},[162,23220,3720],{"class":168},[162,23222,1667],{"class":172},[162,23224,23225],{"class":168},"p1 ",[162,23227,4316],{"class":172},[162,23229,11943],{"class":168},[162,23231,23232,23234],{"class":164,"line":12816},[162,23233,7203],{"class":172},[162,23235,23236],{"class":168}," p1;\n",[162,23238,23239],{"class":164,"line":12841},[162,23240,1498],{"class":168},[162,23242,23243],{"class":164,"line":12864},[162,23244,301],{"emptyLinePlaceholder":300},[162,23246,23247,23249,23251],{"class":164,"line":12888},[162,23248,8471],{"class":172},[162,23250,8836],{"class":5082},[162,23252,1526],{"class":168},[162,23254,23255],{"class":164,"line":12893},[162,23256,4685],{"class":168},[162,23258,23259,23261,23263,23265],{"class":164,"line":12898},[162,23260,22712],{"class":168},[162,23262,173],{"class":172},[162,23264,22646],{"class":5082},[162,23266,8743],{"class":168},[162,23268,23269,23271,23273,23275,23277,23279,23281,23283,23285,23287],{"class":164,"line":12903},[162,23270,9635],{"class":168},[162,23272,4316],{"class":172},[162,23274,1003],{"class":168},[162,23276,3319],{"class":172},[162,23278,9624],{"class":172},[162,23280,3720],{"class":168},[162,23282,1667],{"class":172},[162,23284,14544],{"class":168},[162,23286,4316],{"class":172},[162,23288,11943],{"class":168},[162,23290,23291],{"class":164,"line":12912},[162,23292,1498],{"class":168},[162,23294,23295],{"class":164,"line":12917},[162,23296,301],{"emptyLinePlaceholder":300},[162,23298,23299],{"class":164,"line":12923},[162,23300,301],{"emptyLinePlaceholder":300},[162,23302,23303,23305,23307],{"class":164,"line":12944},[162,23304,3319],{"class":172},[162,23306,5092],{"class":5082},[162,23308,13951],{"class":168},[162,23310,23311],{"class":164,"line":12950},[162,23312,301],{"emptyLinePlaceholder":300},[162,23314,23315],{"class":164,"line":12964},[162,23316,23317],{"class":361},"    \u002F\u002Ftest01();\n",[162,23319,23320],{"class":164,"line":12970},[162,23321,23322],{"class":361},"    \u002F\u002Ftest02();\n",[162,23324,23325,23327],{"class":164,"line":12997},[162,23326,22782],{"class":5082},[162,23328,8743],{"class":168},[162,23330,23331],{"class":164,"line":13006},[162,23332,301],{"emptyLinePlaceholder":300},[162,23334,23335,23337,23339,23341],{"class":164,"line":13012},[162,23336,5421],{"class":5082},[162,23338,604],{"class":168},[162,23340,5426],{"class":179},[162,23342,5836],{"class":168},[162,23344,23345],{"class":164,"line":13020},[162,23346,301],{"emptyLinePlaceholder":300},[162,23348,23349,23351,23353],{"class":164,"line":13025},[162,23350,7203],{"class":172},[162,23352,2717],{"class":207},[162,23354,4433],{"class":168},[162,23356,23357],{"class":164,"line":19695},[162,23358,1498],{"class":168},[3284,23360,23362],{"id":23361},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,23364,23365],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,23367,23368],{},"1．默认构造函数(无参，函数体为空)",[19,23370,23371],{},"2．默认析构函数(无参，函数体为空)",[19,23373,23374],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,23376,23377],{},"构造函数调用规则如下：",[4279,23379,23380,23383],{},[1455,23381,23382],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[1455,23384,23385],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[153,23387,23389],{"className":3305,"code":23388,"language":3307,"meta":158,"style":158},"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",[71,23390,23391,23399,23403,23408,23414,23426,23430,23435,23447,23456,23468,23472,23476,23492,23501,23513,23517,23521,23527,23539,23543,23547,23553,23557,23561,23569,23573,23585,23590,23598,23602,23620,23624,23628,23636,23640,23645,23653,23668,23681,23685,23690,23697,23713,23726,23730,23734,23742,23746,23752,23756,23766,23770,23778],{"__ignoreMap":158},[162,23392,23393,23395,23397],{"class":164,"line":165},[162,23394,17788],{"class":172},[162,23396,18661],{"class":5082},[162,23398,1722],{"class":168},[162,23400,23401],{"class":164,"line":197},[162,23402,17810],{"class":172},[162,23404,23405],{"class":164,"line":228},[162,23406,23407],{"class":361},"    \u002F\u002F无参（默认）构造函数\n",[162,23409,23410,23412],{"class":164,"line":252},[162,23411,21610],{"class":5082},[162,23413,13951],{"class":168},[162,23415,23416,23418,23420,23422,23424],{"class":164,"line":328},[162,23417,12769],{"class":168},[162,23419,4316],{"class":172},[162,23421,22901],{"class":179},[162,23423,4584],{"class":172},[162,23425,11943],{"class":168},[162,23427,23428],{"class":164,"line":466},[162,23429,5305],{"class":168},[162,23431,23432],{"class":164,"line":471},[162,23433,23434],{"class":361},"    \u002F\u002F有参构造函数\n",[162,23436,23437,23439,23441,23443,23445],{"class":164,"line":687},[162,23438,21610],{"class":5082},[162,23440,604],{"class":168},[162,23442,3319],{"class":172},[162,23444,4538],{"class":671},[162,23446,15537],{"class":168},[162,23448,23449,23452,23454],{"class":164,"line":692},[162,23450,23451],{"class":168},"        age ",[162,23453,173],{"class":172},[162,23455,4572],{"class":168},[162,23457,23458,23460,23462,23464,23466],{"class":164,"line":698},[162,23459,12769],{"class":168},[162,23461,4316],{"class":172},[162,23463,22941],{"class":179},[162,23465,4584],{"class":172},[162,23467,11943],{"class":168},[162,23469,23470],{"class":164,"line":2955},[162,23471,5305],{"class":168},[162,23473,23474],{"class":164,"line":2960},[162,23475,21965],{"class":361},[162,23477,23478,23480,23482,23484,23486,23488,23490],{"class":164,"line":2971},[162,23479,21610],{"class":5082},[162,23481,604],{"class":168},[162,23483,9898],{"class":172},[162,23485,18661],{"class":5082},[162,23487,1667],{"class":172},[162,23489,9931],{"class":671},[162,23491,15537],{"class":168},[162,23493,23494,23496,23498],{"class":164,"line":2984},[162,23495,23451],{"class":168},[162,23497,173],{"class":172},[162,23499,23500],{"class":168}," p.age;\n",[162,23502,23503,23505,23507,23509,23511],{"class":164,"line":2989},[162,23504,12769],{"class":168},[162,23506,4316],{"class":172},[162,23508,22982],{"class":179},[162,23510,4584],{"class":172},[162,23512,11943],{"class":168},[162,23514,23515],{"class":164,"line":3011},[162,23516,5305],{"class":168},[162,23518,23519],{"class":164,"line":3022},[162,23520,21638],{"class":361},[162,23522,23523,23525],{"class":164,"line":3027},[162,23524,21643],{"class":5082},[162,23526,13951],{"class":168},[162,23528,23529,23531,23533,23535,23537],{"class":164,"line":3046},[162,23530,12769],{"class":168},[162,23532,4316],{"class":172},[162,23534,23019],{"class":179},[162,23536,4584],{"class":172},[162,23538,11943],{"class":168},[162,23540,23541],{"class":164,"line":3052},[162,23542,5305],{"class":168},[162,23544,23545],{"class":164,"line":3057},[162,23546,17810],{"class":172},[162,23548,23549,23551],{"class":164,"line":3072},[162,23550,5103],{"class":172},[162,23552,10901],{"class":168},[162,23554,23555],{"class":164,"line":3077},[162,23556,7108],{"class":168},[162,23558,23559],{"class":164,"line":3100},[162,23560,301],{"emptyLinePlaceholder":300},[162,23562,23563,23565,23567],{"class":164,"line":3140},[162,23564,8471],{"class":172},[162,23566,8695],{"class":5082},[162,23568,1526],{"class":168},[162,23570,23571],{"class":164,"line":4878},[162,23572,4685],{"class":168},[162,23574,23575,23577,23579,23581,23583],{"class":164,"line":4883},[162,23576,22522],{"class":168},[162,23578,10236],{"class":5082},[162,23580,604],{"class":168},[162,23582,242],{"class":207},[162,23584,5836],{"class":168},[162,23586,23587],{"class":164,"line":4897},[162,23588,23589],{"class":361},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[162,23591,23592,23594,23596],{"class":164,"line":4902},[162,23593,22522],{"class":168},[162,23595,10139],{"class":5082},[162,23597,20606],{"class":168},[162,23599,23600],{"class":164,"line":5694},[162,23601,301],{"emptyLinePlaceholder":300},[162,23603,23604,23606,23608,23611,23613,23616,23618],{"class":164,"line":5708},[162,23605,9635],{"class":168},[162,23607,4316],{"class":172},[162,23609,23610],{"class":179}," \"p2的年龄为： \"",[162,23612,4584],{"class":172},[162,23614,23615],{"class":168}," p2.age ",[162,23617,4316],{"class":172},[162,23619,11943],{"class":168},[162,23621,23622],{"class":164,"line":5716},[162,23623,1498],{"class":168},[162,23625,23626],{"class":164,"line":5721},[162,23627,301],{"emptyLinePlaceholder":300},[162,23629,23630,23632,23634],{"class":164,"line":5727},[162,23631,8471],{"class":172},[162,23633,8764],{"class":5082},[162,23635,1526],{"class":168},[162,23637,23638],{"class":164,"line":5733},[162,23639,4685],{"class":168},[162,23641,23642],{"class":164,"line":5738},[162,23643,23644],{"class":361},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[162,23646,23647,23650],{"class":164,"line":11052},[162,23648,23649],{"class":168},"    Person p1;",[162,23651,23652],{"class":361}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[162,23654,23655,23657,23659,23661,23663,23665],{"class":164,"line":11076},[162,23656,22522],{"class":168},[162,23658,10139],{"class":5082},[162,23660,604],{"class":168},[162,23662,1006],{"class":207},[162,23664,9073],{"class":168},[162,23666,23667],{"class":361}," \u002F\u002F用户提供的有参\n",[162,23669,23670,23672,23675,23678],{"class":164,"line":11081},[162,23671,22522],{"class":168},[162,23673,23674],{"class":5082},"p3",[162,23676,23677],{"class":168},"(p2);",[162,23679,23680],{"class":361}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[162,23682,23683],{"class":164,"line":11087},[162,23684,301],{"emptyLinePlaceholder":300},[162,23686,23687],{"class":164,"line":11114},[162,23688,23689],{"class":361},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[162,23691,23692,23695],{"class":164,"line":11119},[162,23693,23694],{"class":168},"    Person p4;",[162,23696,23652],{"class":361},[162,23698,23699,23701,23704,23706,23708,23710],{"class":164,"line":11125},[162,23700,22522],{"class":168},[162,23702,23703],{"class":5082},"p5",[162,23705,604],{"class":168},[162,23707,1006],{"class":207},[162,23709,9073],{"class":168},[162,23711,23712],{"class":361}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[162,23714,23715,23717,23720,23723],{"class":164,"line":11137},[162,23716,22522],{"class":168},[162,23718,23719],{"class":5082},"p6",[162,23721,23722],{"class":168},"(p5);",[162,23724,23725],{"class":361}," \u002F\u002F用户自己提供拷贝构造\n",[162,23727,23728],{"class":164,"line":11149},[162,23729,1498],{"class":168},[162,23731,23732],{"class":164,"line":11161},[162,23733,301],{"emptyLinePlaceholder":300},[162,23735,23736,23738,23740],{"class":164,"line":12816},[162,23737,3319],{"class":172},[162,23739,5092],{"class":5082},[162,23741,13951],{"class":168},[162,23743,23744],{"class":164,"line":12841},[162,23745,301],{"emptyLinePlaceholder":300},[162,23747,23748,23750],{"class":164,"line":12864},[162,23749,8740],{"class":5082},[162,23751,8743],{"class":168},[162,23753,23754],{"class":164,"line":12888},[162,23755,301],{"emptyLinePlaceholder":300},[162,23757,23758,23760,23762,23764],{"class":164,"line":12893},[162,23759,5421],{"class":5082},[162,23761,604],{"class":168},[162,23763,5426],{"class":179},[162,23765,5836],{"class":168},[162,23767,23768],{"class":164,"line":12898},[162,23769,301],{"emptyLinePlaceholder":300},[162,23771,23772,23774,23776],{"class":164,"line":12903},[162,23773,7203],{"class":172},[162,23775,2717],{"class":207},[162,23777,4433],{"class":168},[162,23779,23780],{"class":164,"line":12912},[162,23781,1498],{"class":168},[3284,23783,23785],{"id":23784},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,23787,23788],{},"浅拷贝：简单的赋值拷贝操作",[19,23790,23791],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[153,23793,23795],{"className":3305,"code":23794,"language":3307,"meta":158,"style":158},"#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",[71,23796,23797,23803,23813,23819,23823,23827,23832,23838,23842,23855,23859,23863,23870,23874,23884,23899,23912,23916,23921,23926,23942,23946,23959,23964,23969,23974,23983,23988,24003,24007,24011,24015,24021,24025,24030,24045,24049,24060,24074,24078,24087,24091,24097,24109,24113,24121,24125,24142,24173,24181,24209,24213,24217,24225,24229,24235],{"__ignoreMap":158},[162,23798,23799,23801],{"class":164,"line":165},[162,23800,5068],{"class":172},[162,23802,5071],{"class":179},[162,23804,23805,23807,23809,23811],{"class":164,"line":197},[162,23806,5076],{"class":172},[162,23808,5079],{"class":172},[162,23810,5083],{"class":5082},[162,23812,4433],{"class":168},[162,23814,23815,23817],{"class":164,"line":228},[162,23816,17788],{"class":172},[162,23818,18264],{"class":5082},[162,23820,23821],{"class":164,"line":252},[162,23822,4685],{"class":168},[162,23824,23825],{"class":164,"line":328},[162,23826,17810],{"class":172},[162,23828,23829],{"class":164,"line":466},[162,23830,23831],{"class":361},"    \u002F\u002F默认构造函数\n",[162,23833,23834,23836],{"class":164,"line":471},[162,23835,21610],{"class":5082},[162,23837,1526],{"class":168},[162,23839,23840],{"class":164,"line":687},[162,23841,5148],{"class":168},[162,23843,23844,23846,23848,23851,23853],{"class":164,"line":692},[162,23845,6565],{"class":168},[162,23847,4316],{"class":172},[162,23849,23850],{"class":179},"\"默认构造函数\"",[162,23852,4316],{"class":172},[162,23854,4338],{"class":168},[162,23856,23857],{"class":164,"line":698},[162,23858,5305],{"class":168},[162,23860,23861],{"class":164,"line":2955},[162,23862,23434],{"class":361},[162,23864,23865,23867],{"class":164,"line":2960},[162,23866,21643],{"class":5082},[162,23868,23869],{"class":168},"(int age,int height)\n",[162,23871,23872],{"class":164,"line":2971},[162,23873,5148],{"class":168},[162,23875,23876,23879,23881],{"class":164,"line":2984},[162,23877,23878],{"class":168},"        m_Age",[162,23880,173],{"class":172},[162,23882,23883],{"class":168},"age;\n",[162,23885,23886,23889,23891,23893,23896],{"class":164,"line":2989},[162,23887,23888],{"class":168},"        m_Height",[162,23890,14813],{"class":172},[162,23892,5500],{"class":172},[162,23894,23895],{"class":168},"(height);",[162,23897,23898],{"class":361},"\u002F\u002F放到堆区\n",[162,23900,23901,23903,23905,23908,23910],{"class":164,"line":3011},[162,23902,6565],{"class":168},[162,23904,4316],{"class":172},[162,23906,23907],{"class":179},"\"有参构造函数\"",[162,23909,4316],{"class":172},[162,23911,4338],{"class":168},[162,23913,23914],{"class":164,"line":3022},[162,23915,5305],{"class":168},[162,23917,23918],{"class":164,"line":3027},[162,23919,23920],{"class":361},"    \u002F\u002F深拷贝解决上述问题\n",[162,23922,23923],{"class":164,"line":3046},[162,23924,23925],{"class":361},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[162,23927,23928,23930,23932,23934,23936,23938,23940],{"class":164,"line":3052},[162,23929,21610],{"class":5082},[162,23931,604],{"class":168},[162,23933,9898],{"class":172},[162,23935,18661],{"class":5082},[162,23937,13683],{"class":172},[162,23939,19],{"class":671},[162,23941,434],{"class":168},[162,23943,23944],{"class":164,"line":3057},[162,23945,5148],{"class":168},[162,23947,23948,23950,23952,23955,23957],{"class":164,"line":3072},[162,23949,6565],{"class":168},[162,23951,4316],{"class":172},[162,23953,23954],{"class":179},"\"拷贝构造函数\"",[162,23956,4316],{"class":172},[162,23958,4338],{"class":168},[162,23960,23961],{"class":164,"line":3077},[162,23962,23963],{"class":361},"        \u002F\u002F编译器默认的写如下注释部分\n",[162,23965,23966],{"class":164,"line":3100},[162,23967,23968],{"class":361},"        \u002F\u002Fm_Age=p.m_Age;\n",[162,23970,23971],{"class":164,"line":3140},[162,23972,23973],{"class":361},"        \u002F\u002Fm_Height=p.m_Height;\n",[162,23975,23976,23978,23980],{"class":164,"line":4878},[162,23977,23878],{"class":168},[162,23979,173],{"class":172},[162,23981,23982],{"class":168},"p.m_Age;\n",[162,23984,23985],{"class":164,"line":4883},[162,23986,23987],{"class":361},"        \u002F\u002F深拷贝操作\n",[162,23989,23990,23992,23994,23996,23998,24000],{"class":164,"line":4897},[162,23991,23888],{"class":168},[162,23993,14813],{"class":172},[162,23995,5500],{"class":172},[162,23997,604],{"class":168},[162,23999,3745],{"class":172},[162,24001,24002],{"class":168},"p.m_Height);\n",[162,24004,24005],{"class":164,"line":4902},[162,24006,5305],{"class":168},[162,24008,24009],{"class":164,"line":5694},[162,24010,301],{"emptyLinePlaceholder":300},[162,24012,24013],{"class":164,"line":5708},[162,24014,21638],{"class":361},[162,24016,24017,24019],{"class":164,"line":5716},[162,24018,21643],{"class":5082},[162,24020,1526],{"class":168},[162,24022,24023],{"class":164,"line":5721},[162,24024,5148],{"class":168},[162,24026,24027],{"class":164,"line":5727},[162,24028,24029],{"class":361},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[162,24031,24032,24034,24037,24040,24043],{"class":164,"line":5733},[162,24033,5614],{"class":172},[162,24035,24036],{"class":168},"(m_Height ",[162,24038,24039],{"class":172},"!=",[162,24041,24042],{"class":207}," NULL",[162,24044,434],{"class":168},[162,24046,24047],{"class":164,"line":5738},[162,24048,5627],{"class":168},[162,24050,24051,24054,24057],{"class":164,"line":11052},[162,24052,24053],{"class":172},"            delete",[162,24055,24056],{"class":168}," m_Height;",[162,24058,24059],{"class":361}," \u002F\u002F释放堆区内存\n",[162,24061,24062,24065,24067,24069,24071],{"class":164,"line":11076},[162,24063,24064],{"class":168},"            m_Height",[162,24066,173],{"class":172},[162,24068,5510],{"class":207},[162,24070,3367],{"class":168},[162,24072,24073],{"class":361}," \u002F\u002F防止野指针\n",[162,24075,24076],{"class":164,"line":11081},[162,24077,5646],{"class":168},[162,24079,24080,24082,24084],{"class":164,"line":11087},[162,24081,6565],{"class":168},[162,24083,4316],{"class":172},[162,24085,24086],{"class":179},"\"Person的析构函数调用\"\n",[162,24088,24089],{"class":164,"line":11114},[162,24090,5305],{"class":168},[162,24092,24093,24095],{"class":164,"line":11119},[162,24094,5103],{"class":172},[162,24096,18757],{"class":168},[162,24098,24099,24101,24103,24106],{"class":164,"line":11125},[162,24100,5103],{"class":172},[162,24102,9624],{"class":172},[162,24104,24105],{"class":168},"m_Height;",[162,24107,24108],{"class":361}," \u002F\u002F定义一个指针，指向身高\n",[162,24110,24111],{"class":164,"line":11137},[162,24112,7108],{"class":168},[162,24114,24115,24117,24119],{"class":164,"line":11149},[162,24116,8471],{"class":172},[162,24118,8695],{"class":5082},[162,24120,1526],{"class":168},[162,24122,24123],{"class":164,"line":11161},[162,24124,4685],{"class":168},[162,24126,24127,24129,24131,24133,24135,24137,24140],{"class":164,"line":12816},[162,24128,22522],{"class":168},[162,24130,10236],{"class":5082},[162,24132,604],{"class":168},[162,24134,242],{"class":207},[162,24136,3670],{"class":168},[162,24138,24139],{"class":207},"160",[162,24141,5836],{"class":168},[162,24143,24144,24146,24148,24151,24153,24156,24158,24161,24163,24166,24168,24170],{"class":164,"line":12841},[162,24145,4690],{"class":168},[162,24147,4316],{"class":172},[162,24149,24150],{"class":179},"\"p1的年龄为:\"",[162,24152,4316],{"class":172},[162,24154,24155],{"class":168},"p1.m_Age",[162,24157,4316],{"class":172},[162,24159,24160],{"class":179},"\"身高为：\"",[162,24162,9525],{"class":172},[162,24164,24165],{"class":168},"p1.m_Height",[162,24167,4316],{"class":172},[162,24169,4381],{"class":168},[162,24171,24172],{"class":361},"  \u002F\u002F18\n",[162,24174,24175,24177,24179],{"class":164,"line":12864},[162,24176,22522],{"class":168},[162,24178,10139],{"class":5082},[162,24180,20606],{"class":168},[162,24182,24183,24185,24187,24190,24192,24194,24196,24198,24200,24203,24205,24207],{"class":164,"line":12888},[162,24184,4690],{"class":168},[162,24186,4316],{"class":172},[162,24188,24189],{"class":179},"\"p2的年龄为：\"",[162,24191,4316],{"class":172},[162,24193,22552],{"class":168},[162,24195,4316],{"class":172},[162,24197,24160],{"class":179},[162,24199,9525],{"class":172},[162,24201,24202],{"class":168},"p2.m_Height",[162,24204,4316],{"class":172},[162,24206,4381],{"class":168},[162,24208,24172],{"class":361},[162,24210,24211],{"class":164,"line":12893},[162,24212,16305],{"class":168},[162,24214,24215],{"class":164,"line":12898},[162,24216,1498],{"class":168},[162,24218,24219,24221,24223],{"class":164,"line":12903},[162,24220,3319],{"class":172},[162,24222,5092],{"class":5082},[162,24224,1526],{"class":168},[162,24226,24227],{"class":164,"line":12912},[162,24228,4685],{"class":168},[162,24230,24231,24233],{"class":164,"line":12917},[162,24232,8740],{"class":5082},[162,24234,8743],{"class":168},[162,24236,24237],{"class":164,"line":12923},[162,24238,1498],{"class":168},[19,24240,24241],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,24243,24244],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,24246,24247],{},[4602,24248],{"alt":158,"src":24249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,24251,24252],{},"浅拷贝问题要使用深拷贝来解决",[19,24254,24255],{},[4602,24256],{"alt":158,"src":24257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,24259,24260],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[3284,24262,24264],{"id":24263},"_826初始化列表","8.2.6初始化列表",[19,24266,24267],{},"作用：初始化属性",[19,24269,8289],{},[153,24271,24274],{"className":24272,"code":24273,"language":8295},[8293],"构造函数():属性1(值1),属性2(值2).....{}\n",[71,24275,24273],{"__ignoreMap":158},[19,24277,24278],{},"例子",[153,24280,24282],{"className":3305,"code":24281,"language":3307,"meta":158,"style":158},"#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",[71,24283,24284,24290,24300,24306,24310,24315,24319,24324,24329,24334,24339,24344,24349,24353,24358,24363,24406,24415,24433,24451,24469,24473,24477,24484,24491,24498,24502,24506,24514,24518,24522,24542,24551,24555,24559,24569,24573,24581],{"__ignoreMap":158},[162,24285,24286,24288],{"class":164,"line":165},[162,24287,5068],{"class":172},[162,24289,5071],{"class":179},[162,24291,24292,24294,24296,24298],{"class":164,"line":197},[162,24293,5076],{"class":172},[162,24295,5079],{"class":172},[162,24297,5083],{"class":5082},[162,24299,4433],{"class":168},[162,24301,24302,24304],{"class":164,"line":228},[162,24303,17788],{"class":172},[162,24305,18264],{"class":5082},[162,24307,24308],{"class":164,"line":252},[162,24309,4685],{"class":168},[162,24311,24312],{"class":164,"line":328},[162,24313,24314],{"class":172},"    public:\n",[162,24316,24317],{"class":164,"line":466},[162,24318,301],{"emptyLinePlaceholder":300},[162,24320,24321],{"class":164,"line":471},[162,24322,24323],{"class":361},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[162,24325,24326],{"class":164,"line":687},[162,24327,24328],{"class":361},"    \u002F\u002FPerson(int a, int b, int c) {\n",[162,24330,24331],{"class":164,"line":692},[162,24332,24333],{"class":361},"    \u002F\u002F  m_A = a;\n",[162,24335,24336],{"class":164,"line":698},[162,24337,24338],{"class":361},"    \u002F\u002F  m_B = b;\n",[162,24340,24341],{"class":164,"line":2955},[162,24342,24343],{"class":361},"    \u002F\u002F  m_C = c;\n",[162,24345,24346],{"class":164,"line":2960},[162,24347,24348],{"class":361},"    \u002F\u002F}\n",[162,24350,24351],{"class":164,"line":2971},[162,24352,301],{"emptyLinePlaceholder":300},[162,24354,24355],{"class":164,"line":2984},[162,24356,24357],{"class":361},"    \u002F\u002F初始化列表方式初始化\n",[162,24359,24360],{"class":164,"line":2989},[162,24361,24362],{"class":361},"    \u002F\u002F使用有参构造函数\n",[162,24364,24365,24367,24369,24371,24373,24375,24377,24379,24381,24383,24385,24388,24391,24394,24397,24400,24403],{"class":164,"line":3011},[162,24366,21610],{"class":5082},[162,24368,604],{"class":168},[162,24370,3319],{"class":172},[162,24372,4538],{"class":671},[162,24374,183],{"class":168},[162,24376,3319],{"class":172},[162,24378,5950],{"class":671},[162,24380,183],{"class":168},[162,24382,3319],{"class":172},[162,24384,5966],{"class":671},[162,24386,24387],{"class":168},") :",[162,24389,24390],{"class":5082},"m_A",[162,24392,24393],{"class":168},"(a), ",[162,24395,24396],{"class":5082},"m_B",[162,24398,24399],{"class":168},"(b), ",[162,24401,24402],{"class":5082},"m_C",[162,24404,24405],{"class":168},"(c) {}\n",[162,24407,24408,24410,24413],{"class":164,"line":3022},[162,24409,18002],{"class":172},[162,24411,24412],{"class":5082}," PrintPerson",[162,24414,13951],{"class":168},[162,24416,24417,24419,24421,24424,24426,24429,24431],{"class":164,"line":3027},[162,24418,12769],{"class":168},[162,24420,4316],{"class":172},[162,24422,24423],{"class":179}," \"mA:\"",[162,24425,4584],{"class":172},[162,24427,24428],{"class":168}," m_A ",[162,24430,4316],{"class":172},[162,24432,11943],{"class":168},[162,24434,24435,24437,24439,24442,24444,24447,24449],{"class":164,"line":3046},[162,24436,12769],{"class":168},[162,24438,4316],{"class":172},[162,24440,24441],{"class":179}," \"mB:\"",[162,24443,4584],{"class":172},[162,24445,24446],{"class":168}," m_B ",[162,24448,4316],{"class":172},[162,24450,11943],{"class":168},[162,24452,24453,24455,24457,24460,24462,24465,24467],{"class":164,"line":3052},[162,24454,12769],{"class":168},[162,24456,4316],{"class":172},[162,24458,24459],{"class":179}," \"mC:\"",[162,24461,4584],{"class":172},[162,24463,24464],{"class":168}," m_C ",[162,24466,4316],{"class":172},[162,24468,11943],{"class":168},[162,24470,24471],{"class":164,"line":3057},[162,24472,5305],{"class":168},[162,24474,24475],{"class":164,"line":3072},[162,24476,18315],{"class":172},[162,24478,24479,24481],{"class":164,"line":3077},[162,24480,5103],{"class":172},[162,24482,24483],{"class":168}," m_A;\n",[162,24485,24486,24488],{"class":164,"line":3100},[162,24487,5103],{"class":172},[162,24489,24490],{"class":168}," m_B;\n",[162,24492,24493,24495],{"class":164,"line":3140},[162,24494,5103],{"class":172},[162,24496,24497],{"class":168}," m_C;\n",[162,24499,24500],{"class":164,"line":4878},[162,24501,7108],{"class":168},[162,24503,24504],{"class":164,"line":4883},[162,24505,301],{"emptyLinePlaceholder":300},[162,24507,24508,24510,24512],{"class":164,"line":4897},[162,24509,3319],{"class":172},[162,24511,5092],{"class":5082},[162,24513,9085],{"class":168},[162,24515,24516],{"class":164,"line":4902},[162,24517,4685],{"class":168},[162,24519,24520],{"class":164,"line":5694},[162,24521,301],{"emptyLinePlaceholder":300},[162,24523,24524,24526,24528,24530,24532,24534,24536,24538,24540],{"class":164,"line":5708},[162,24525,22522],{"class":168},[162,24527,19],{"class":5082},[162,24529,604],{"class":168},[162,24531,208],{"class":207},[162,24533,183],{"class":168},[162,24535,213],{"class":207},[162,24537,183],{"class":168},[162,24539,218],{"class":207},[162,24541,5836],{"class":168},[162,24543,24544,24546,24549],{"class":164,"line":5716},[162,24545,18957],{"class":168},[162,24547,24548],{"class":5082},"PrintPerson",[162,24550,8743],{"class":168},[162,24552,24553],{"class":164,"line":5721},[162,24554,301],{"emptyLinePlaceholder":300},[162,24556,24557],{"class":164,"line":5727},[162,24558,301],{"emptyLinePlaceholder":300},[162,24560,24561,24563,24565,24567],{"class":164,"line":5733},[162,24562,5421],{"class":5082},[162,24564,604],{"class":168},[162,24566,5426],{"class":179},[162,24568,5836],{"class":168},[162,24570,24571],{"class":164,"line":5738},[162,24572,301],{"emptyLinePlaceholder":300},[162,24574,24575,24577,24579],{"class":164,"line":11052},[162,24576,7203],{"class":172},[162,24578,2717],{"class":207},[162,24580,4433],{"class":168},[162,24582,24583],{"class":164,"line":11076},[162,24584,1498],{"class":168},[19,24586,24587,24588,24591,24592],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[3453,24589,24590],{},"参数名就是定义的对象属性","，",[3453,24593,24594],{},"属性后面的值为有参构造函数的形参",[153,24596,24598],{"className":3305,"code":24597,"language":3307,"meta":158,"style":158},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[71,24599,24600],{"__ignoreMap":158},[162,24601,24602,24604,24606,24608,24611,24613,24616,24618,24621,24623,24626,24628,24631,24633],{"class":164,"line":165},[162,24603,22137],{"class":5082},[162,24605,604],{"class":168},[162,24607,3319],{"class":172},[162,24609,24610],{"class":168}," a.",[162,24612,3319],{"class":172},[162,24614,24615],{"class":168}," b,",[162,24617,3319],{"class":172},[162,24619,24620],{"class":168}," b):",[162,24622,24390],{"class":5082},[162,24624,24625],{"class":168},"(a),",[162,24627,24396],{"class":5082},[162,24629,24630],{"class":168},"(c),",[162,24632,24402],{"class":5082},[162,24634,24635],{"class":168},"(b) {}\n",[3284,24637,24639],{"id":24638},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,24641,24642],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,24644,17727],{},[153,24646,24648],{"className":3305,"code":24647,"language":3307,"meta":158,"style":158},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[71,24649,24650,24655,24660,24664,24669,24673],{"__ignoreMap":158},[162,24651,24652],{"class":164,"line":165},[162,24653,24654],{"class":168},"A{};\n",[162,24656,24657],{"class":164,"line":197},[162,24658,24659],{"class":168},"B\n",[162,24661,24662],{"class":164,"line":228},[162,24663,4685],{"class":168},[162,24665,24666],{"class":164,"line":252},[162,24667,24668],{"class":168},"    A a;\n",[162,24670,24671],{"class":164,"line":328},[162,24672,1498],{"class":168},[162,24674,24675],{"class":164,"line":466},[162,24676,24677],{"class":361},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,24679,24680],{},"案例",[153,24682,24684],{"className":3305,"code":24683,"language":3307,"meta":158,"style":158},"\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",[71,24685,24686,24691,24698,24702,24707,24712,24726,24730,24740,24751,24755,24762,24766,24779,24783,24788,24793,24797,24803,24807,24811,24815,24846,24850,24861,24865,24871,24875,24888,24892,24896,24900,24905,24910,24914,24922,24926,24943,24962,24966,24974,24978,24984],{"__ignoreMap":158},[162,24687,24688],{"class":164,"line":165},[162,24689,24690],{"class":361},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[162,24692,24693,24695],{"class":164,"line":197},[162,24694,17788],{"class":172},[162,24696,24697],{"class":5082}," Phone\n",[162,24699,24700],{"class":164,"line":228},[162,24701,4685],{"class":168},[162,24703,24704],{"class":164,"line":252},[162,24705,24706],{"class":168},"public：\n",[162,24708,24709],{"class":164,"line":328},[162,24710,24711],{"class":361},"    \u002F\u002F 赋值(构造函数)\n",[162,24713,24714,24717,24719,24721,24724],{"class":164,"line":466},[162,24715,24716],{"class":5082},"    Phone",[162,24718,604],{"class":168},[162,24720,18010],{"class":5082},[162,24722,24723],{"class":671}," pName",[162,24725,434],{"class":168},[162,24727,24728],{"class":164,"line":471},[162,24729,5148],{"class":168},[162,24731,24732,24735,24737],{"class":164,"line":687},[162,24733,24734],{"class":168},"        m_pName",[162,24736,173],{"class":172},[162,24738,24739],{"class":168},"pName;\n",[162,24741,24742,24744,24746,24749],{"class":164,"line":692},[162,24743,6565],{"class":168},[162,24745,4316],{"class":172},[162,24747,24748],{"class":179},"\"Phone的构造函数调用\"",[162,24750,4433],{"class":168},[162,24752,24753],{"class":164,"line":698},[162,24754,5305],{"class":168},[162,24756,24757,24760],{"class":164,"line":2955},[162,24758,24759],{"class":5082},"    ~Phone",[162,24761,1526],{"class":168},[162,24763,24764],{"class":164,"line":2960},[162,24765,5148],{"class":168},[162,24767,24768,24770,24772,24775,24777],{"class":164,"line":2971},[162,24769,6565],{"class":168},[162,24771,4316],{"class":172},[162,24773,24774],{"class":179},"\"Phone析构函数调用\"",[162,24776,4316],{"class":172},[162,24778,4338],{"class":168},[162,24780,24781],{"class":164,"line":2984},[162,24782,5305],{"class":168},[162,24784,24785],{"class":164,"line":2989},[162,24786,24787],{"class":361},"    \u002F\u002F\n",[162,24789,24790],{"class":164,"line":3011},[162,24791,24792],{"class":168},"    string m_PName;\n",[162,24794,24795],{"class":164,"line":3022},[162,24796,7108],{"class":168},[162,24798,24799,24801],{"class":164,"line":3027},[162,24800,17788],{"class":172},[162,24802,18264],{"class":5082},[162,24804,24805],{"class":164,"line":3046},[162,24806,4685],{"class":168},[162,24808,24809],{"class":164,"line":3052},[162,24810,17810],{"class":172},[162,24812,24813],{"class":164,"line":3057},[162,24814,20085],{"class":361},[162,24816,24817,24819,24821,24823,24825,24827,24829,24832,24835,24837,24840,24843],{"class":164,"line":3072},[162,24818,21610],{"class":5082},[162,24820,604],{"class":168},[162,24822,18010],{"class":5082},[162,24824,18013],{"class":671},[162,24826,3670],{"class":168},[162,24828,18010],{"class":5082},[162,24830,24831],{"class":671}," pname",[162,24833,24834],{"class":168},"):",[162,24836,18103],{"class":5082},[162,24838,24839],{"class":168},"(name),m_phone.",[162,24841,24842],{"class":5082},"m_PName",[162,24844,24845],{"class":168},"(pname) \n",[162,24847,24848],{"class":164,"line":3077},[162,24849,5148],{"class":168},[162,24851,24852,24854,24856,24859],{"class":164,"line":3100},[162,24853,6565],{"class":168},[162,24855,4316],{"class":172},[162,24857,24858],{"class":179},"\"Person的构造函数调用\"",[162,24860,4433],{"class":168},[162,24862,24863],{"class":164,"line":3140},[162,24864,5305],{"class":168},[162,24866,24867,24869],{"class":164,"line":4878},[162,24868,21643],{"class":5082},[162,24870,1526],{"class":168},[162,24872,24873],{"class":164,"line":4883},[162,24874,5148],{"class":168},[162,24876,24877,24879,24881,24884,24886],{"class":164,"line":4897},[162,24878,6565],{"class":168},[162,24880,4316],{"class":172},[162,24882,24883],{"class":179},"\"Person析构函数调用\"",[162,24885,4316],{"class":172},[162,24887,4338],{"class":168},[162,24889,24890],{"class":164,"line":4902},[162,24891,5305],{"class":168},[162,24893,24894],{"class":164,"line":5694},[162,24895,10884],{"class":361},[162,24897,24898],{"class":164,"line":5708},[162,24899,17985],{"class":168},[162,24901,24902],{"class":164,"line":5716},[162,24903,24904],{"class":361},"    \u002F\u002F手机\n",[162,24906,24907],{"class":164,"line":5721},[162,24908,24909],{"class":168},"    Phone m_Phone;\n",[162,24911,24912],{"class":164,"line":5727},[162,24913,7108],{"class":168},[162,24915,24916,24918,24920],{"class":164,"line":5733},[162,24917,8471],{"class":172},[162,24919,8695],{"class":5082},[162,24921,1526],{"class":168},[162,24923,24924],{"class":164,"line":5738},[162,24925,4685],{"class":168},[162,24927,24928,24930,24932,24934,24936,24938,24941],{"class":164,"line":11052},[162,24929,22522],{"class":168},[162,24931,19],{"class":5082},[162,24933,604],{"class":168},[162,24935,11020],{"class":179},[162,24937,3670],{"class":168},[162,24939,24940],{"class":179},"\"安卓\"",[162,24942,5836],{"class":168},[162,24944,24945,24947,24949,24952,24954,24957,24959],{"class":164,"line":11076},[162,24946,4690],{"class":168},[162,24948,4316],{"class":172},[162,24950,24951],{"class":168},"p.Name",[162,24953,4316],{"class":172},[162,24955,24956],{"class":179},"\"拿着：\"",[162,24958,4316],{"class":172},[162,24960,24961],{"class":168},"p.m_phone.m_PName;\n",[162,24963,24964],{"class":164,"line":11081},[162,24965,1498],{"class":168},[162,24967,24968,24970,24972],{"class":164,"line":11087},[162,24969,3319],{"class":172},[162,24971,5092],{"class":5082},[162,24973,1526],{"class":168},[162,24975,24976],{"class":164,"line":11114},[162,24977,4685],{"class":168},[162,24979,24980,24982],{"class":164,"line":11119},[162,24981,8740],{"class":5082},[162,24983,8743],{"class":168},[162,24985,24986],{"class":164,"line":11125},[162,24987,1498],{"class":168},[19,24989,1529],{},[153,24991,24993],{"className":3305,"code":24992,"language":3307,"meta":158,"style":158},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[71,24994,24995,25000],{"__ignoreMap":158},[162,24996,24997],{"class":164,"line":165},[162,24998,24999],{"class":361},"    \u002F\u002F不需要写这个：\n",[162,25001,25002],{"class":164,"line":197},[162,25003,25004],{"class":361},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,25006,25007],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[153,25009,25011],{"className":3305,"code":25010,"language":3307,"meta":158,"style":158},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[71,25012,25013],{"__ignoreMap":158},[162,25014,25015,25017,25020,25022,25025,25028],{"class":164,"line":165},[162,25016,22137],{"class":5082},[162,25018,25019],{"class":168},"(string name.string pname):",[162,25021,18103],{"class":5082},[162,25023,25024],{"class":168},"(name),",[162,25026,25027],{"class":5082},"m_phone",[162,25029,25030],{"class":168},"(pname) {}\n",[19,25032,25033,25034,173,25037],{},"采用的是隐式转换法，实际为如下：\n",[71,25035,25036],{},"m_phone(pname)",[71,25038,25039],{},"Phone m_phone=pname",[19,25041,25042,25045],{},[3453,25043,25044],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,25047,25048],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[3284,25050,25052],{"id":25051},"_828静态对象","8.2.8静态对象",[19,25054,25055],{},"静态对象在成员对象前static，称为静态对象",[19,25057,25058],{},"静态对象分为两类：",[1452,25060,25061],{},[1455,25062,25063],{},"静态成员变量",[4279,25065,25066,25069,25072],{},[1455,25067,25068],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[1455,25070,25071],{},"②在编译阶段分配内存",[1455,25073,25074],{},"③类内声明，类外初始化",[1452,25076,25077],{"start":197},[1455,25078,25079],{},"静态成员函数",[4279,25081,25082,25085],{},[1455,25083,25084],{},"①所有对象共享同一个函数",[1455,25086,25087],{},"②静态成员函数只能访问静态成员变量",[25089,25090,25092],"h4",{"id":25091},"_8281静态成员变量","8.2.8.1静态成员变量",[153,25094,25096],{"className":3305,"code":25095,"language":3307,"meta":158,"style":158},"#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",[71,25097,25098,25104,25114,25120,25124,25128,25133,25138,25143,25151,25155,25159,25163,25171,25175,25179,25184,25197,25201,25209,25213,25219],{"__ignoreMap":158},[162,25099,25100,25102],{"class":164,"line":165},[162,25101,5068],{"class":172},[162,25103,5071],{"class":179},[162,25105,25106,25108,25110,25112],{"class":164,"line":197},[162,25107,5076],{"class":172},[162,25109,5079],{"class":172},[162,25111,5083],{"class":5082},[162,25113,4433],{"class":168},[162,25115,25116,25118],{"class":164,"line":228},[162,25117,17788],{"class":172},[162,25119,18264],{"class":5082},[162,25121,25122],{"class":164,"line":252},[162,25123,4685],{"class":168},[162,25125,25126],{"class":164,"line":328},[162,25127,17810],{"class":172},[162,25129,25130],{"class":164,"line":466},[162,25131,25132],{"class":361},"    \u002F\u002F非静态成员变量\n",[162,25134,25135],{"class":164,"line":471},[162,25136,25137],{"class":361},"    \u002F\u002F int m_A;\n",[162,25139,25140],{"class":164,"line":687},[162,25141,25142],{"class":361},"    \u002F\u002F定义静态成员变量\n",[162,25144,25145,25147,25149],{"class":164,"line":692},[162,25146,14116],{"class":172},[162,25148,5500],{"class":172},[162,25150,24483],{"class":168},[162,25152,25153],{"class":164,"line":698},[162,25154,301],{"emptyLinePlaceholder":300},[162,25156,25157],{"class":164,"line":2955},[162,25158,301],{"emptyLinePlaceholder":300},[162,25160,25161],{"class":164,"line":2960},[162,25162,7108],{"class":168},[162,25164,25165,25167,25169],{"class":164,"line":2971},[162,25166,8471],{"class":172},[162,25168,8695],{"class":5082},[162,25170,1526],{"class":168},[162,25172,25173],{"class":164,"line":2984},[162,25174,4685],{"class":168},[162,25176,25177],{"class":164,"line":2989},[162,25178,18406],{"class":168},[162,25180,25181],{"class":164,"line":3011},[162,25182,25183],{"class":361},"    \u002F\u002F输出类成员变量这块内存\n",[162,25185,25186,25188,25190,25193,25195],{"class":164,"line":3022},[162,25187,4690],{"class":168},[162,25189,4316],{"class":172},[162,25191,25192],{"class":168},"p.m_A",[162,25194,4316],{"class":172},[162,25196,4338],{"class":168},[162,25198,25199],{"class":164,"line":3027},[162,25200,1498],{"class":168},[162,25202,25203,25205,25207],{"class":164,"line":3046},[162,25204,3319],{"class":172},[162,25206,5092],{"class":5082},[162,25208,1526],{"class":168},[162,25210,25211],{"class":164,"line":3052},[162,25212,4685],{"class":168},[162,25214,25215,25217],{"class":164,"line":3057},[162,25216,8740],{"class":5082},[162,25218,1526],{"class":168},[162,25220,25221],{"class":164,"line":3072},[162,25222,1498],{"class":168},[19,25224,25225],{},"此时输出是报错的：无法解析外部命令",[19,25227,25228],{},"解决这一问题：必须用到类内声明，类外初始化操作",[153,25230,25232],{"className":3305,"code":25231,"language":3307,"meta":158,"style":158},"#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",[71,25233,25234,25240,25250,25256,25260,25264,25269,25277,25281,25286,25301,25309,25313,25317,25322,25327,25339,25344,25355,25360,25365,25378,25382,25390,25394,25400],{"__ignoreMap":158},[162,25235,25236,25238],{"class":164,"line":165},[162,25237,5068],{"class":172},[162,25239,5071],{"class":179},[162,25241,25242,25244,25246,25248],{"class":164,"line":197},[162,25243,5076],{"class":172},[162,25245,5079],{"class":172},[162,25247,5083],{"class":5082},[162,25249,4433],{"class":168},[162,25251,25252,25254],{"class":164,"line":228},[162,25253,17788],{"class":172},[162,25255,18264],{"class":5082},[162,25257,25258],{"class":164,"line":252},[162,25259,4685],{"class":168},[162,25261,25262],{"class":164,"line":328},[162,25263,17810],{"class":172},[162,25265,25266],{"class":164,"line":466},[162,25267,25268],{"class":361},"    \u002F\u002F类内声明\n",[162,25270,25271,25273,25275],{"class":164,"line":471},[162,25272,14116],{"class":172},[162,25274,5500],{"class":172},[162,25276,24483],{"class":168},[162,25278,25279],{"class":164,"line":687},[162,25280,7108],{"class":168},[162,25282,25283],{"class":164,"line":692},[162,25284,25285],{"class":361},"\u002F\u002F类外初始化\n",[162,25287,25288,25290,25292,25295,25297,25299],{"class":164,"line":698},[162,25289,3319],{"class":172},[162,25291,18661],{"class":5082},[162,25293,25294],{"class":168},"::m_A",[162,25296,173],{"class":172},[162,25298,1006],{"class":207},[162,25300,4433],{"class":168},[162,25302,25303,25305,25307],{"class":164,"line":2955},[162,25304,8471],{"class":172},[162,25306,8695],{"class":5082},[162,25308,1526],{"class":168},[162,25310,25311],{"class":164,"line":2960},[162,25312,4685],{"class":168},[162,25314,25315],{"class":164,"line":2971},[162,25316,18406],{"class":168},[162,25318,25319],{"class":164,"line":2984},[162,25320,25321],{"class":361},"    \u002F\u002F访问变量的原内存空间\n",[162,25323,25324],{"class":164,"line":2989},[162,25325,25326],{"class":361},"    \u002F\u002F100\n",[162,25328,25329,25331,25333,25335,25337],{"class":164,"line":3011},[162,25330,4690],{"class":168},[162,25332,4316],{"class":172},[162,25334,25192],{"class":168},[162,25336,4316],{"class":172},[162,25338,4338],{"class":168},[162,25340,25341],{"class":164,"line":3022},[162,25342,25343],{"class":168},"    Person p2;\n",[162,25345,25346,25349,25351,25353],{"class":164,"line":3027},[162,25347,25348],{"class":168},"    p2.m_A",[162,25350,173],{"class":172},[162,25352,4845],{"class":207},[162,25354,4433],{"class":168},[162,25356,25357],{"class":164,"line":3046},[162,25358,25359],{"class":361},"    \u002F\u002F继续访问这片空间\n",[162,25361,25362],{"class":164,"line":3052},[162,25363,25364],{"class":361},"    \u002F\u002F200\n",[162,25366,25367,25369,25371,25374,25376],{"class":164,"line":3057},[162,25368,4690],{"class":168},[162,25370,4316],{"class":172},[162,25372,25373],{"class":168},"p2.m_A",[162,25375,4316],{"class":172},[162,25377,4338],{"class":168},[162,25379,25380],{"class":164,"line":3072},[162,25381,1498],{"class":168},[162,25383,25384,25386,25388],{"class":164,"line":3077},[162,25385,3319],{"class":172},[162,25387,5092],{"class":5082},[162,25389,1526],{"class":168},[162,25391,25392],{"class":164,"line":3100},[162,25393,4685],{"class":168},[162,25395,25396,25398],{"class":164,"line":3140},[162,25397,8740],{"class":5082},[162,25399,8743],{"class":168},[162,25401,25402],{"class":164,"line":4878},[162,25403,1498],{"class":168},[19,25405,25406],{},[3453,25407,25408],{},"静态变量的访问",[153,25410,25412],{"className":3305,"code":25411,"language":3307,"meta":158,"style":158},"#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",[71,25413,25414,25420,25430,25436,25440,25444,25448,25456,25460,25465,25473,25477,25481,25495,25510,25518,25522,25527,25532,25537,25542,25554,25559,25564,25578,25595,25599,25607,25611,25617],{"__ignoreMap":158},[162,25415,25416,25418],{"class":164,"line":165},[162,25417,5068],{"class":172},[162,25419,5071],{"class":179},[162,25421,25422,25424,25426,25428],{"class":164,"line":197},[162,25423,5076],{"class":172},[162,25425,5079],{"class":172},[162,25427,5083],{"class":5082},[162,25429,4433],{"class":168},[162,25431,25432,25434],{"class":164,"line":228},[162,25433,17788],{"class":172},[162,25435,18264],{"class":5082},[162,25437,25438],{"class":164,"line":252},[162,25439,4685],{"class":168},[162,25441,25442],{"class":164,"line":328},[162,25443,17810],{"class":172},[162,25445,25446],{"class":164,"line":466},[162,25447,25268],{"class":361},[162,25449,25450,25452,25454],{"class":164,"line":471},[162,25451,14116],{"class":172},[162,25453,5500],{"class":172},[162,25455,24483],{"class":168},[162,25457,25458],{"class":164,"line":687},[162,25459,18315],{"class":172},[162,25461,25462],{"class":164,"line":692},[162,25463,25464],{"class":361},"    \u002F\u002F静态成员变量也是有访问权限的\n",[162,25466,25467,25469,25471],{"class":164,"line":698},[162,25468,14116],{"class":172},[162,25470,5500],{"class":172},[162,25472,24490],{"class":168},[162,25474,25475],{"class":164,"line":2955},[162,25476,7108],{"class":168},[162,25478,25479],{"class":164,"line":2960},[162,25480,25285],{"class":361},[162,25482,25483,25485,25487,25489,25491,25493],{"class":164,"line":2971},[162,25484,3319],{"class":172},[162,25486,18661],{"class":5082},[162,25488,25294],{"class":168},[162,25490,173],{"class":172},[162,25492,1006],{"class":207},[162,25494,4433],{"class":168},[162,25496,25497,25499,25501,25504,25506,25508],{"class":164,"line":2984},[162,25498,3319],{"class":172},[162,25500,18661],{"class":5082},[162,25502,25503],{"class":168},"::m_B",[162,25505,173],{"class":172},[162,25507,1011],{"class":207},[162,25509,4433],{"class":168},[162,25511,25512,25514,25516],{"class":164,"line":2989},[162,25513,8471],{"class":172},[162,25515,8764],{"class":5082},[162,25517,1526],{"class":168},[162,25519,25520],{"class":164,"line":3011},[162,25521,4685],{"class":168},[162,25523,25524],{"class":164,"line":3022},[162,25525,25526],{"class":361},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[162,25528,25529],{"class":164,"line":3027},[162,25530,25531],{"class":361},"    \u002F\u002F静态成员变量有两种访问方式：\n",[162,25533,25534],{"class":164,"line":3046},[162,25535,25536],{"class":361},"    \u002F\u002F1.通过对象进行访问\n",[162,25538,25539],{"class":164,"line":3052},[162,25540,25541],{"class":168},"    Person p;  \n",[162,25543,25544,25546,25548,25550,25552],{"class":164,"line":3057},[162,25545,4690],{"class":168},[162,25547,4316],{"class":172},[162,25549,25192],{"class":168},[162,25551,4316],{"class":172},[162,25553,4338],{"class":168},[162,25555,25556],{"class":164,"line":3072},[162,25557,25558],{"class":361},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[162,25560,25561],{"class":164,"line":3077},[162,25562,25563],{"class":361},"    \u002F\u002F2.通过类名进行访问\n",[162,25565,25566,25568,25570,25572,25574,25576],{"class":164,"line":3100},[162,25567,4690],{"class":168},[162,25569,4316],{"class":172},[162,25571,22137],{"class":5082},[162,25573,25294],{"class":168},[162,25575,4316],{"class":172},[162,25577,4338],{"class":168},[162,25579,25580,25582,25584,25586,25588,25590,25592],{"class":164,"line":3140},[162,25581,4690],{"class":168},[162,25583,4316],{"class":172},[162,25585,22137],{"class":5082},[162,25587,25503],{"class":168},[162,25589,4316],{"class":172},[162,25591,4381],{"class":168},[162,25593,25594],{"class":361}," \u002F\u002F没有访问权限，报错\n",[162,25596,25597],{"class":164,"line":4878},[162,25598,1498],{"class":168},[162,25600,25601,25603,25605],{"class":164,"line":4883},[162,25602,3319],{"class":172},[162,25604,5092],{"class":5082},[162,25606,1526],{"class":168},[162,25608,25609],{"class":164,"line":4897},[162,25610,4685],{"class":168},[162,25612,25613,25615],{"class":164,"line":4902},[162,25614,8809],{"class":5082},[162,25616,8743],{"class":168},[162,25618,25619],{"class":164,"line":5694},[162,25620,1498],{"class":168},[25089,25622,25624],{"id":25623},"_8282静态成员函数","8.2.8.2静态成员函数",[19,25626,25627],{},"1.静态成员函数定义与访问",[153,25629,25631],{"className":3305,"code":25630,"language":3307,"meta":158,"style":158},"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",[71,25632,25633,25639,25643,25647,25652,25663,25667,25681,25685,25689,25697,25701,25706,25711,25715,25723,25728,25738],{"__ignoreMap":158},[162,25634,25635,25637],{"class":164,"line":165},[162,25636,17788],{"class":172},[162,25638,18264],{"class":5082},[162,25640,25641],{"class":164,"line":197},[162,25642,4685],{"class":168},[162,25644,25645],{"class":164,"line":228},[162,25646,17810],{"class":172},[162,25648,25649],{"class":164,"line":252},[162,25650,25651],{"class":361},"    \u002F\u002F在公共权限下定义静态成员函数\n",[162,25653,25654,25656,25659,25661],{"class":164,"line":328},[162,25655,14116],{"class":172},[162,25657,25658],{"class":172}," void",[162,25660,14481],{"class":5082},[162,25662,1526],{"class":168},[162,25664,25665],{"class":164,"line":466},[162,25666,5148],{"class":168},[162,25668,25669,25672,25674,25677,25679],{"class":164,"line":471},[162,25670,25671],{"class":168},"        coout",[162,25673,4316],{"class":172},[162,25675,25676],{"class":179},"\"静态成员函数的调用\"",[162,25678,4316],{"class":172},[162,25680,4338],{"class":168},[162,25682,25683],{"class":164,"line":687},[162,25684,5305],{"class":168},[162,25686,25687],{"class":164,"line":692},[162,25688,7108],{"class":168},[162,25690,25691,25693,25695],{"class":164,"line":698},[162,25692,8471],{"class":172},[162,25694,8695],{"class":5082},[162,25696,1526],{"class":168},[162,25698,25699],{"class":164,"line":2955},[162,25700,4685],{"class":168},[162,25702,25703],{"class":164,"line":2960},[162,25704,25705],{"class":361},"    \u002F\u002F静态成员函数的调用方式:\n",[162,25707,25708],{"class":164,"line":2971},[162,25709,25710],{"class":361},"    \u002F\u002F1.通过对象访问\n",[162,25712,25713],{"class":164,"line":2984},[162,25714,18406],{"class":168},[162,25716,25717,25719,25721],{"class":164,"line":2989},[162,25718,18957],{"class":168},[162,25720,14647],{"class":5082},[162,25722,8743],{"class":168},[162,25724,25725],{"class":164,"line":3011},[162,25726,25727],{"class":361},"    \u002F\u002F2.通过类名访问\n",[162,25729,25730,25732,25734,25736],{"class":164,"line":3022},[162,25731,21610],{"class":5082},[162,25733,20823],{"class":168},[162,25735,14647],{"class":5082},[162,25737,8743],{"class":168},[162,25739,25740],{"class":164,"line":3027},[162,25741,1498],{"class":168},[1452,25743,25744],{"start":197},[1455,25745,25746],{},"静态成员函数只能访问静态成员变量",[153,25748,25750],{"className":3305,"code":25749,"language":3307,"meta":158,"style":158},"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",[71,25751,25752,25758,25762,25766,25770,25780,25784,25798,25803,25815,25819,25830,25840,25844,25848,25852,25862,25866,25879,25883,25887,25891,25895,25909,25917,25921,25925,25929,25933,25941,25945,25955,25960,25964,25972,25976,25982],{"__ignoreMap":158},[162,25753,25754,25756],{"class":164,"line":165},[162,25755,17788],{"class":172},[162,25757,18264],{"class":5082},[162,25759,25760],{"class":164,"line":197},[162,25761,4685],{"class":168},[162,25763,25764],{"class":164,"line":228},[162,25765,17810],{"class":172},[162,25767,25768],{"class":164,"line":252},[162,25769,25651],{"class":361},[162,25771,25772,25774,25776,25778],{"class":164,"line":328},[162,25773,14116],{"class":172},[162,25775,25658],{"class":172},[162,25777,14481],{"class":5082},[162,25779,1526],{"class":168},[162,25781,25782],{"class":164,"line":466},[162,25783,5148],{"class":168},[162,25785,25786,25789,25791,25793,25795],{"class":164,"line":471},[162,25787,25788],{"class":168},"        m_A",[162,25790,173],{"class":172},[162,25792,3608],{"class":207},[162,25794,3367],{"class":168},[162,25796,25797],{"class":361}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[162,25799,25800],{"class":164,"line":687},[162,25801,25802],{"class":361},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[162,25804,25805,25807,25809,25811,25813],{"class":164,"line":692},[162,25806,25671],{"class":168},[162,25808,4316],{"class":172},[162,25810,25676],{"class":179},[162,25812,4316],{"class":172},[162,25814,4338],{"class":168},[162,25816,25817],{"class":164,"line":698},[162,25818,5305],{"class":168},[162,25820,25821,25823,25825,25827],{"class":164,"line":2955},[162,25822,14116],{"class":172},[162,25824,5500],{"class":172},[162,25826,18540],{"class":168},[162,25828,25829],{"class":361}," \u002F\u002F静态成员变量\n",[162,25831,25832,25834,25837],{"class":164,"line":2960},[162,25833,5103],{"class":172},[162,25835,25836],{"class":168}," m_B;",[162,25838,25839],{"class":361}," \u002F\u002F非静态成员变量\n",[162,25841,25842],{"class":164,"line":2971},[162,25843,301],{"emptyLinePlaceholder":300},[162,25845,25846],{"class":164,"line":2984},[162,25847,18315],{"class":172},[162,25849,25850],{"class":164,"line":2989},[162,25851,25464],{"class":361},[162,25853,25854,25856,25858,25860],{"class":164,"line":3011},[162,25855,14116],{"class":172},[162,25857,25658],{"class":172},[162,25859,16713],{"class":5082},[162,25861,1526],{"class":168},[162,25863,25864],{"class":164,"line":3022},[162,25865,5148],{"class":168},[162,25867,25868,25870,25872,25875,25877],{"class":164,"line":3027},[162,25869,6565],{"class":168},[162,25871,4316],{"class":172},[162,25873,25874],{"class":179},"\"这是私有权限下的静态函数调用\"",[162,25876,4316],{"class":172},[162,25878,4338],{"class":168},[162,25880,25881],{"class":164,"line":3046},[162,25882,5305],{"class":168},[162,25884,25885],{"class":164,"line":3052},[162,25886,301],{"emptyLinePlaceholder":300},[162,25888,25889],{"class":164,"line":3057},[162,25890,301],{"emptyLinePlaceholder":300},[162,25892,25893],{"class":164,"line":3072},[162,25894,7108],{"class":168},[162,25896,25897,25899,25901,25903,25905,25907],{"class":164,"line":3077},[162,25898,3319],{"class":172},[162,25900,18661],{"class":5082},[162,25902,25294],{"class":168},[162,25904,173],{"class":172},[162,25906,312],{"class":207},[162,25908,4433],{"class":168},[162,25910,25911,25913,25915],{"class":164,"line":3100},[162,25912,8471],{"class":172},[162,25914,8695],{"class":5082},[162,25916,1526],{"class":168},[162,25918,25919],{"class":164,"line":3140},[162,25920,4685],{"class":168},[162,25922,25923],{"class":164,"line":4878},[162,25924,25705],{"class":361},[162,25926,25927],{"class":164,"line":4883},[162,25928,25710],{"class":361},[162,25930,25931],{"class":164,"line":4897},[162,25932,18406],{"class":168},[162,25934,25935,25937,25939],{"class":164,"line":4902},[162,25936,18957],{"class":168},[162,25938,14647],{"class":5082},[162,25940,8743],{"class":168},[162,25942,25943],{"class":164,"line":5694},[162,25944,25727],{"class":361},[162,25946,25947,25949,25951,25953],{"class":164,"line":5708},[162,25948,21610],{"class":5082},[162,25950,20823],{"class":168},[162,25952,14647],{"class":5082},[162,25954,8743],{"class":168},[162,25956,25957],{"class":164,"line":5716},[162,25958,25959],{"class":361},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[162,25961,25962],{"class":164,"line":5721},[162,25963,1498],{"class":168},[162,25965,25966,25968,25970],{"class":164,"line":5727},[162,25967,3319],{"class":172},[162,25969,5092],{"class":5082},[162,25971,1526],{"class":168},[162,25973,25974],{"class":164,"line":5733},[162,25975,4685],{"class":168},[162,25977,25978,25980],{"class":164,"line":5738},[162,25979,8740],{"class":5082},[162,25981,8743],{"class":168},[162,25983,25984],{"class":164,"line":11052},[162,25985,1498],{"class":168},[3284,25987,25989],{"id":25988},"_83c对象模型和this指针","8.3C++对象模型和this指针",[25089,25991,25993],{"id":25992},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,25995,25996],{},"在c++中，类内的成员变量和成员函数分开存储",[19,25998,25999],{},"只有非静态成员变量才属于类的对象上",[26001,26002,26004],"h5",{"id":26003},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[153,26006,26008],{"className":3305,"code":26007,"language":3307,"meta":158,"style":158},"#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",[71,26009,26010,26017,26027,26033,26037,26041,26045,26053,26057,26061,26084,26088,26096,26100,26106],{"__ignoreMap":158},[162,26011,26012,26014],{"class":164,"line":165},[162,26013,5068],{"class":172},[162,26015,26016],{"class":179},"\u003Ciostraem>\n",[162,26018,26019,26021,26023,26025],{"class":164,"line":197},[162,26020,5076],{"class":172},[162,26022,5079],{"class":172},[162,26024,5083],{"class":5082},[162,26026,4433],{"class":168},[162,26028,26029,26031],{"class":164,"line":228},[162,26030,17788],{"class":172},[162,26032,18264],{"class":5082},[162,26034,26035],{"class":164,"line":252},[162,26036,4685],{"class":168},[162,26038,26039],{"class":164,"line":328},[162,26040,301],{"emptyLinePlaceholder":300},[162,26042,26043],{"class":164,"line":466},[162,26044,7108],{"class":168},[162,26046,26047,26049,26051],{"class":164,"line":471},[162,26048,8471],{"class":172},[162,26050,8695],{"class":5082},[162,26052,1526],{"class":168},[162,26054,26055],{"class":164,"line":687},[162,26056,4685],{"class":168},[162,26058,26059],{"class":164,"line":692},[162,26060,18406],{"class":168},[162,26062,26063,26065,26067,26070,26072,26075,26077,26079,26081],{"class":164,"line":698},[162,26064,4690],{"class":168},[162,26066,4316],{"class":172},[162,26068,26069],{"class":179},"\"size of p=\"",[162,26071,4316],{"class":172},[162,26073,26074],{"class":5082},"sizeoif",[162,26076,9645],{"class":168},[162,26078,4316],{"class":172},[162,26080,4381],{"class":168},[162,26082,26083],{"class":361}," \u002F\u002F查看这个空类的占用的内存空间\n",[162,26085,26086],{"class":164,"line":2955},[162,26087,1498],{"class":168},[162,26089,26090,26092,26094],{"class":164,"line":2960},[162,26091,3319],{"class":172},[162,26093,5092],{"class":5082},[162,26095,1526],{"class":168},[162,26097,26098],{"class":164,"line":2971},[162,26099,4685],{"class":168},[162,26101,26102,26104],{"class":164,"line":2984},[162,26103,8740],{"class":5082},[162,26105,8743],{"class":168},[162,26107,26108],{"class":164,"line":2989},[162,26109,1498],{"class":168},[19,26111,26112],{},"输出结果为：size of p=1",[19,26114,26115],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,26117,26118],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[26001,26120,26122],{"id":26121},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[153,26124,26126],{"className":3305,"code":26125,"language":3307,"meta":158,"style":158},"#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",[71,26127,26128,26134,26144,26152,26156,26165,26169,26177,26181,26185,26204,26208,26212,26220,26224,26230],{"__ignoreMap":158},[162,26129,26130,26132],{"class":164,"line":165},[162,26131,5068],{"class":172},[162,26133,5071],{"class":179},[162,26135,26136,26138,26140,26142],{"class":164,"line":197},[162,26137,5076],{"class":172},[162,26139,5079],{"class":172},[162,26141,5083],{"class":5082},[162,26143,4433],{"class":168},[162,26145,26146,26148,26150],{"class":164,"line":228},[162,26147,17788],{"class":172},[162,26149,18661],{"class":5082},[162,26151,5791],{"class":168},[162,26153,26154],{"class":164,"line":252},[162,26155,4685],{"class":168},[162,26157,26158,26160,26162],{"class":164,"line":328},[162,26159,5103],{"class":172},[162,26161,18540],{"class":168},[162,26163,26164],{"class":361},"\u002F\u002F非静态成员变量\n",[162,26166,26167],{"class":164,"line":466},[162,26168,7108],{"class":168},[162,26170,26171,26173,26175],{"class":164,"line":471},[162,26172,8471],{"class":172},[162,26174,8695],{"class":5082},[162,26176,1526],{"class":168},[162,26178,26179],{"class":164,"line":687},[162,26180,4685],{"class":168},[162,26182,26183],{"class":164,"line":692},[162,26184,18406],{"class":168},[162,26186,26187,26189,26191,26193,26195,26197,26199,26201],{"class":164,"line":698},[162,26188,4690],{"class":168},[162,26190,4316],{"class":172},[162,26192,26069],{"class":179},[162,26194,4512],{"class":172},[162,26196,9645],{"class":168},[162,26198,4316],{"class":172},[162,26200,4381],{"class":168},[162,26202,26203],{"class":361}," \u002F\u002F查看不是空对象时占用多少内存\n",[162,26205,26206],{"class":164,"line":2955},[162,26207,301],{"emptyLinePlaceholder":300},[162,26209,26210],{"class":164,"line":2960},[162,26211,1498],{"class":168},[162,26213,26214,26216,26218],{"class":164,"line":2971},[162,26215,3319],{"class":172},[162,26217,5092],{"class":5082},[162,26219,1526],{"class":168},[162,26221,26222],{"class":164,"line":2984},[162,26223,4685],{"class":168},[162,26225,26226,26228],{"class":164,"line":2989},[162,26227,8740],{"class":5082},[162,26229,8743],{"class":168},[162,26231,26232],{"class":164,"line":3011},[162,26233,1498],{"class":168},[19,26235,26236],{},"输出结果：size of p=4",[19,26238,26239],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[1452,26241,26242],{},[1455,26243,26244],{},"如果加上非静态成员变量，Person类修改如下",[153,26246,26248],{"className":3305,"code":26247,"language":3307,"meta":158,"style":158},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[71,26249,26250,26256,26260,26266,26274,26278,26283],{"__ignoreMap":158},[162,26251,26252,26254],{"class":164,"line":165},[162,26253,17788],{"class":172},[162,26255,18264],{"class":5082},[162,26257,26258],{"class":164,"line":197},[162,26259,4685],{"class":168},[162,26261,26262,26264],{"class":164,"line":228},[162,26263,5103],{"class":172},[162,26265,24483],{"class":168},[162,26267,26268,26270,26272],{"class":164,"line":252},[162,26269,14116],{"class":172},[162,26271,5500],{"class":172},[162,26273,24490],{"class":168},[162,26275,26276],{"class":164,"line":328},[162,26277,7108],{"class":168},[162,26279,26280],{"class":164,"line":466},[162,26281,26282],{"class":361},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[162,26284,26285,26287,26289,26291,26293,26295],{"class":164,"line":471},[162,26286,3319],{"class":172},[162,26288,18661],{"class":5082},[162,26290,25503],{"class":168},[162,26292,173],{"class":172},[162,26294,312],{"class":207},[162,26296,4433],{"class":168},[19,26298,26299],{},"输出结果：4",[19,26301,26302],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[1452,26304,26305],{"start":197},[1455,26306,26307],{},"加上非静态成员函数",[153,26309,26311],{"className":3305,"code":26310,"language":3307,"meta":158,"style":158},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[71,26312,26313,26320,26324,26330,26338,26342,26346,26350],{"__ignoreMap":158},[162,26314,26315,26317],{"class":164,"line":165},[162,26316,17788],{"class":172},[162,26318,26319],{"class":5082},"  Person\n",[162,26321,26322],{"class":164,"line":197},[162,26323,4685],{"class":168},[162,26325,26326,26328],{"class":164,"line":228},[162,26327,5103],{"class":172},[162,26329,24483],{"class":168},[162,26331,26332,26334,26336],{"class":164,"line":252},[162,26333,18002],{"class":172},[162,26335,14481],{"class":5082},[162,26337,1526],{"class":168},[162,26339,26340],{"class":164,"line":328},[162,26341,5148],{"class":168},[162,26343,26344],{"class":164,"line":466},[162,26345,301],{"emptyLinePlaceholder":300},[162,26347,26348],{"class":164,"line":471},[162,26349,5305],{"class":168},[162,26351,26352],{"class":164,"line":687},[162,26353,7108],{"class":168},[19,26355,26356],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[1452,26358,26359],{"start":228},[1455,26360,26361],{},"加上静态成员函数",[153,26363,26365],{"className":3305,"code":26364,"language":3307,"meta":158,"style":158},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[71,26366,26367,26373,26377,26383,26391,26395,26399,26403,26414,26418,26422,26426],{"__ignoreMap":158},[162,26368,26369,26371],{"class":164,"line":165},[162,26370,17788],{"class":172},[162,26372,26319],{"class":5082},[162,26374,26375],{"class":164,"line":197},[162,26376,4685],{"class":168},[162,26378,26379,26381],{"class":164,"line":228},[162,26380,5103],{"class":172},[162,26382,24483],{"class":168},[162,26384,26385,26387,26389],{"class":164,"line":252},[162,26386,18002],{"class":172},[162,26388,14481],{"class":5082},[162,26390,1526],{"class":168},[162,26392,26393],{"class":164,"line":328},[162,26394,5148],{"class":168},[162,26396,26397],{"class":164,"line":466},[162,26398,301],{"emptyLinePlaceholder":300},[162,26400,26401],{"class":164,"line":471},[162,26402,5305],{"class":168},[162,26404,26405,26407,26409,26412],{"class":164,"line":687},[162,26406,14116],{"class":172},[162,26408,25658],{"class":172},[162,26410,26411],{"class":5082}," func1",[162,26413,1526],{"class":168},[162,26415,26416],{"class":164,"line":692},[162,26417,5148],{"class":168},[162,26419,26420],{"class":164,"line":698},[162,26421,301],{"emptyLinePlaceholder":300},[162,26423,26424],{"class":164,"line":2955},[162,26425,5305],{"class":168},[162,26427,26428],{"class":164,"line":2960},[162,26429,7108],{"class":168},[19,26431,26299],{},[19,26433,26434],{},"解释：静态成员函数也不属于类上",[3219,26436,10778],{},{"title":158,"searchDepth":197,"depth":197,"links":26438},[26439,26445],{"id":17739,"depth":197,"text":17740,"children":26440},[26441,26442,26443,26444],{"id":17743,"depth":228,"text":17744},{"id":18467,"depth":228,"text":18468},{"id":18638,"depth":228,"text":18639},{"id":19096,"depth":228,"text":19097},{"id":21468,"depth":197,"text":21469,"children":26446},[26447,26448,26449,26450,26451,26452,26453,26454,26455],{"id":21480,"depth":228,"text":21481},{"id":21773,"depth":228,"text":21774},{"id":22264,"depth":228,"text":22265},{"id":23361,"depth":228,"text":23362},{"id":23784,"depth":228,"text":23785},{"id":24263,"depth":228,"text":24264},{"id":24638,"depth":228,"text":24639},{"id":25051,"depth":228,"text":25052},{"id":25988,"depth":228,"text":25989},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":17704,"description":26456},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":26463,"title":3307,"body":26464,"description":3241,"extension":3242,"meta":26468,"navigation":300,"path":26470,"seo":26471,"stem":26472,"__hash__":26473},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":26465,"toc":26466},[],{"title":158,"searchDepth":197,"depth":197,"links":26467},[],{"category":26469},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":3307,"description":3241},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":26475,"title":26476,"body":26477,"description":158,"extension":3242,"meta":27068,"navigation":300,"path":27069,"seo":27070,"stem":27071,"__hash__":27072},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":26478,"toc":27050},[26479,26482,26486,26489,26492,26495,26513,26518,26521,26524,26527,26530,26535,26538,26543,26546,26549,26553,26556,26559,26565,26568,26586,26590,26594,26597,26602,26605,26609,26612,26625,26628,26632,26635,26638,26641,26666,26669,26678,26689,26704,26736,26740,26747,26755,26759,26762,26765,26770,26774,26777,26780,26785,26788,26792,26795,26798,26803,26806,26810,26815,26819,26886,26890,26893,26896,26899,26902,26905,26911,26932,26935,26949,26958,26962,26965,26968,26973,26976,26981,26986,26989,26992,26997,27002,27005,27010,27015,27018,27023,27028,27031,27034,27039,27042,27047],[10,26480,26476],{"id":26481},"_1强化学习基本认识",[14,26483,26485],{"id":26484},"_11什么是强化学习","1.1.什么是强化学习",[19,26487,26488],{},"强化学习有两部分组成：智能体和环境；",[19,26490,26491],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,26493,26494],{},"强化学习与监督学习的区别:",[1452,26496,26497,26500,26503,26506],{},[1455,26498,26499],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[1455,26501,26502],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[1455,26504,26505],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[1455,26507,26508,26509,26512],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[3453,26510,26511],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,26514,26515],{},[4602,26516],{"alt":158,"src":26517},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,26519,26520],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,26522,26523],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,26525,26526],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,26528,26529],{},"获取奖励",[19,26531,26532],{},[4602,26533],{"alt":158,"src":26534},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,26536,26537],{},"强化学习可以分成标准强化学习和深度强化学习",[19,26539,26540],{},[4602,26541],{"alt":158,"src":26542},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,26544,26545],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,26547,26548],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,26550,26552],{"id":26551},"_12强化学习应用场景","1.2.强化学习应用场景",[19,26554,26555],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,26557,26558],{},"具身智能中的应用",[19,26560,26561,26564],{},[3453,26562,26563],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,26566,26567],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,26569,26570,26571,26574,26575,26578,26579,26582,26583],{},"机器人是",[3453,26572,26573],{},"躯体","，深度学习是",[3453,26576,26577],{},"神经元****网络","，VLA是",[3453,26580,26581],{},"通用的行为逻辑","，而强化学习是",[3453,26584,26585],{},"教练",[14,26587,26589],{"id":26588},"_13序列决策","1.3.序列决策",[3284,26591,26593],{"id":26592},"_131智能体与环境","1.3.1.智能体与环境",[19,26595,26596],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,26598,26599],{},[4602,26600],{"alt":158,"src":26601},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,26603,26604],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[3284,26606,26608],{"id":26607},"_132奖励","1.3.2.奖励",[19,26610,26611],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,26613,26614,26615,26624],{},"取某个策略的表现如何。强化学习的目的就是",[3453,26616,26617,26618,26623],{},"最大化",[3453,26619,26620],{},[3453,26621,26622],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,26626,26627],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[3284,26629,26631],{"id":26630},"_133序列决策","1.3.3.序列决策",[19,26633,26634],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,26636,26637],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,26639,26640],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,26642,26643,26647,26648,26650,26651,26653,26654,26656,26657,16889,26660,16889,26663],{},[26644,26645,26646],"em",{},"Ht"," = ",[26644,26649,3883],{},"1*, a",[26644,26652,208],{},", r",[26644,26655,208],{},", . . . ,* ",[26644,26658,26659],{},"ot",[26644,26661,26662],{},", at ,",[26644,26664,26665],{},"rt",[19,26667,26668],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,26670,26671,26647,26674,1003,26676,3720],{},[26644,26672,26673],{},"st",[26644,26675,961],{},[26644,26677,26646],{},[19,26679,26680,26681,26684,26685,26688],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[3453,26682,26683],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[3453,26686,26687],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,26690,26691,26692,26695,26696,26699,26700,26703],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[3453,26693,26694],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[3453,26697,26698],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[26644,26701,26702],{},"S, A, T, R, Ω, O, γ",")。",[19,26705,26706,26707,26709,26710,26712,26713,604,26715,26718,26719,26721,26722,604,26725,26728,26729,26731,26732,26735],{},"其中 ",[26644,26708,3973],{}," 表示状态空间，为隐变量，",[26644,26711,3532],{}," 为动作空间，",[26644,26714,3997],{},[26644,26716,26717],{},"s ′ |s, a",") 为状态转移概率，",[26644,26720,3949],{}," 为奖励函数，",[26644,26723,26724],{},"Ω",[26644,26726,26727],{},"o|s, a",") 为观测概率，",[26644,26730,3877],{}," 为观测空间，",[26644,26733,26734],{},"γ"," 为折扣因子。",[14,26737,26739],{"id":26738},"_14动作空间","1.4.动作空间",[19,26741,26742,26743,26746],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[3453,26744,26745],{},"动作空间"," ，动作空间分为:",[1452,26748,26749,26752],{},[1455,26750,26751],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[1455,26753,26754],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,26756,26758],{"id":26757},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,26760,26761],{},"由策略、价值函数、模型三部分组成",[19,26763,26764],{},"这三者组成马尔可夫决策过程",[19,26766,26767],{},[4602,26768],{"alt":158,"src":26769},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[3284,26771,26773],{"id":26772},"_151策略","1.5.1.策略",[19,26775,26776],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,26778,26779],{},"策略可分为两种：",[19,26781,26782],{},[4602,26783],{"alt":158,"src":26784},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,26786,26787],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[3284,26789,26791],{"id":26790},"_152价值函数","1.5.2.价值函数",[19,26793,26794],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,26796,26797],{},"价值函数中有一个折扣因子，类似于存款利息",[19,26799,26800],{},[4602,26801],{"alt":158,"src":26802},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,26804,26805],{},"进入某个状态采取的最优动作可以通过Q函数得到",[3284,26807,26809],{"id":26808},"_153模型","1.5.3.模型",[19,26811,26812],{},[4602,26813],{"alt":158,"src":26814},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,26816,26818],{"id":26817},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[26,26820,26821,26832],{},[29,26822,26823],{},[32,26824,26825,26829],{},[35,26826,26828],{"align":26827},"left","类型",[35,26830,26831],{"align":26827},"特点",[51,26833,26834,26844,26854,26864,26876],{},[32,26835,26836,26841],{},[56,26837,26838],{"align":26827},[3453,26839,26840],{},"基于价值的智能体",[56,26842,26843],{"align":26827},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[32,26845,26846,26851],{},[56,26847,26848],{"align":26827},[3453,26849,26850],{},"基于策略的智能体",[56,26852,26853],{"align":26827},"直接学习策略，没有学习价值函数",[32,26855,26856,26861],{},[56,26857,26858],{"align":26827},[3453,26859,26860],{},"演员-评论员智能体",[56,26862,26863],{"align":26827},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[32,26865,26866,26871],{},[56,26867,26868],{"align":26827},[3453,26869,26870],{},"有模型强化学习智能体",[56,26872,26873],{"align":26827},[4602,26874],{"alt":158,"src":26875},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[32,26877,26878,26883],{},[56,26879,26880],{"align":26827},[3453,26881,26882],{},"免模型强化学习智能体",[56,26884,26885],{"align":26827},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,26887,26889],{"id":26888},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,26891,26892],{},"学习和规划是序列决策的两个基本问题",[19,26894,26895],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,26897,26898],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,26900,26901],{},"强化学习用到的库：Gym",[19,26903,26904],{},"Gym可以检验强化学习算法的优劣",[19,26906,26907,26910],{},[3453,26908,26909],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[153,26912,26916],{"className":26913,"code":26914,"language":26915,"meta":158,"style":158},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[71,26917,26918],{"__ignoreMap":158},[162,26919,26920,26923,26926,26929],{"class":164,"line":165},[162,26921,26922],{"class":5082},"pip",[162,26924,26925],{"class":179}," install",[162,26927,26928],{"class":179}," gym==",[162,26930,26931],{"class":207},"0.25.2\n",[19,26933,26934],{},"显示图形界面需要",[153,26936,26938],{"className":26913,"code":26937,"language":26915,"meta":158,"style":158},"pip install pygame\n",[71,26939,26940],{"__ignoreMap":158},[162,26941,26942,26944,26946],{"class":164,"line":165},[162,26943,26922],{"class":5082},[162,26945,26925],{"class":179},[162,26947,26948],{"class":179}," pygame\n",[19,26950,26951,26952],{},"有关Gym库的相关文档介绍：",[3538,26953,26957],{"href":26954,"rel":26955},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[26956],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,26959,26961],{"id":26960},"_18一些补充基础概念","1.8.一些补充基础概念",[19,26963,26964],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,26966,26967],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,26969,26970],{},[4602,26971],{"alt":158,"src":26972},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,26974,26975],{},"折扣率需要自己来设定",[19,26977,26978],{},[4602,26979],{"alt":158,"src":26980},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[1452,26982,26983],{},[1455,26984,26985],{},"状态转移函数：",[19,26987,26988],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,26990,26991],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,26993,26994],{},[4602,26995],{"alt":158,"src":26996},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[1452,26998,26999],{"start":197},[1455,27000,27001],{},"动作价值函数：",[19,27003,27004],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,27006,27007],{},[4602,27008],{"alt":158,"src":27009},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[1452,27011,27012],{"start":228},[1455,27013,27014],{},"最优动作价值函数：",[19,27016,27017],{},"这个函数是对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,27019,27020],{},[4602,27021],{"alt":158,"src":27022},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[1452,27024,27025],{"start":252},[1455,27026,27027],{},"状态价值函数:",[19,27029,27030],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,27032,27033],{},"它衡量的是“一个具体动作”的长期价值",[19,27035,27036],{},[4602,27037],{"alt":158,"src":27038},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,27040,27041],{},"几个价值函数之间的比较：",[19,27043,27044],{},[4602,27045],{"alt":158,"src":27046},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[3219,27048,27049],{},"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":158,"searchDepth":197,"depth":197,"links":27051},[27052,27053,27054,27059,27060,27065,27066,27067],{"id":26484,"depth":197,"text":26485},{"id":26551,"depth":197,"text":26552},{"id":26588,"depth":197,"text":26589,"children":27055},[27056,27057,27058],{"id":26592,"depth":228,"text":26593},{"id":26607,"depth":228,"text":26608},{"id":26630,"depth":228,"text":26631},{"id":26738,"depth":197,"text":26739},{"id":26757,"depth":197,"text":26758,"children":27061},[27062,27063,27064],{"id":26772,"depth":228,"text":26773},{"id":26790,"depth":228,"text":26791},{"id":26808,"depth":228,"text":26809},{"id":26817,"depth":197,"text":26818},{"id":26888,"depth":197,"text":26889},{"id":26960,"depth":197,"text":26961},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":26476,"description":158},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":27074,"title":27075,"body":27076,"description":27083,"extension":3242,"meta":27094,"navigation":300,"path":27095,"seo":27096,"stem":27097,"__hash__":27098},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":27077,"toc":27092},[27078,27081,27084,27089],[10,27079,27075],{"id":27080},"_2马尔可夫决策过程",[19,27082,27083],{},"这是强化学习的基本框架",[19,27085,27086],{},[4602,27087],{"alt":158,"src":27088},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,27090,27091],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":158,"searchDepth":197,"depth":197,"links":27093},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":27075,"description":27083},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":27100,"title":27101,"body":27102,"description":158,"extension":3242,"meta":27218,"navigation":300,"path":27219,"seo":27220,"stem":27221,"__hash__":27222},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":27103,"toc":27213},[27104,27107,27111,27114,27119,27124,27127,27132,27135,27140,27143,27147,27152,27155,27160,27165,27170,27173,27177,27182,27185,27190,27195,27200,27205,27208],[10,27105,27101],{"id":27106},"_3动作价值函数",[14,27108,27110],{"id":27109},"_31dqn","3.1.DQN",[19,27112,27113],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,27115,27116],{},[4602,27117],{"alt":158,"src":27118},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,27120,27121],{},[4602,27122],{"alt":158,"src":27123},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,27125,27126],{},"DQN算法的描述：",[19,27128,27129],{},[4602,27130],{"alt":158,"src":27131},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,27133,27134],{},"这里的Dense指的是全连接层",[19,27136,27137],{},[4602,27138],{"alt":158,"src":27139},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,27141,27142],{},"当前观测的状态为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,27144,27146],{"id":27145},"_32dqn的举例","3.2.DQN的举例",[19,27148,27149],{},[4602,27150],{"alt":158,"src":27151},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,27153,27154],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,27156,27157],{},[4602,27158],{"alt":158,"src":27159},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,27161,27162],{},[4602,27163],{"alt":158,"src":27164},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,27166,27167],{},[4602,27168],{"alt":158,"src":27169},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,27171,27172],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,27174,27176],{"id":27175},"_33td算法","3.3.TD算法",[19,27178,27179],{},[4602,27180],{"alt":158,"src":27181},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,27183,27184],{},"强化学习TD算法公式的粗略解释：",[19,27186,27187],{},[4602,27188],{"alt":158,"src":27189},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,27191,27192],{},[4602,27193],{"alt":158,"src":27194},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,27196,27197],{},[4602,27198],{"alt":158,"src":27199},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,27201,27202],{},[4602,27203],{"alt":158,"src":27204},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,27206,27207],{},"TD算法总结：",[19,27209,27210],{},[4602,27211],{"alt":158,"src":27212},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":158,"searchDepth":197,"depth":197,"links":27214},[27215,27216,27217],{"id":27109,"depth":197,"text":27110},{"id":27145,"depth":197,"text":27146},{"id":27175,"depth":197,"text":27176},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":27101,"description":158},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":27224,"title":27225,"body":27226,"description":158,"extension":3242,"meta":27459,"navigation":300,"path":27460,"seo":27461,"stem":27462,"__hash__":27463},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":27227,"toc":27455},[27228,27231,27235,27238,27241,27246,27251,27254,27259,27264,27267,27272,27275,27280,27283,27288,27291,27296,27299,27304,27309,27312,27317,27320,27323,27328,27331,27336,27341,27345,27348,27351,27356,27361,27364,27369,27374,27377,27382,27385,27388,27393,27396,27401,27404,27409,27414,27417,27422,27427,27430,27435,27438,27443,27446],[10,27229,27225],{"id":27230},"_4策略学习",[14,27232,27234],{"id":27233},"_41概念描述","4.1.概念描述",[19,27236,27237],{},"用神经网络（策略网络）近似策略函数",[19,27239,27240],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,27242,27243],{},[4602,27244],{"alt":158,"src":27245},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,27247,27248],{},[4602,27249],{"alt":158,"src":27250},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,27252,27253],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,27255,27256],{},[4602,27257],{"alt":158,"src":27258},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,27260,27261],{},[4602,27262],{"alt":158,"src":27263},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,27265,27266],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,27268,27269],{},[4602,27270],{"alt":158,"src":27271},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,27273,27274],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,27276,27277],{},[4602,27278],{"alt":158,"src":27279},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,27281,27282],{},"改进theta要用到策略梯度算法",[19,27284,27285],{},[4602,27286],{"alt":158,"src":27287},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,27289,27290],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,27292,27293],{},[4602,27294],{"alt":158,"src":27295},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,27297,27298],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,27300,27301],{},[4602,27302],{"alt":158,"src":27303},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,27305,27306],{},[4602,27307],{"alt":158,"src":27308},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,27310,27311],{},"梯度公式总结：",[19,27313,27314],{},[4602,27315],{"alt":158,"src":27316},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,27318,27319],{},"两个公式的分别应用场景：",[19,27321,27322],{},"对于离散的动作：",[19,27324,27325],{},[4602,27326],{"alt":158,"src":27327},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,27329,27330],{},"对于连续的动作：",[19,27332,27333],{},[4602,27334],{"alt":158,"src":27335},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,27337,27338],{},[4602,27339],{"alt":158,"src":27340},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,27342,27344],{"id":27343},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,27346,27347],{},"使用蒙特卡洛来近似计算策略梯度",[19,27349,27350],{},"蒙特卡洛法的解释如下：",[19,27352,27353],{},[4602,27354],{"alt":158,"src":27355},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,27357,27358],{},[4602,27359],{"alt":158,"src":27360},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,27362,27363],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[1452,27365,27366],{},[1455,27367,27368],{},"方法一：reinforce算法",[19,27370,27371],{},[4602,27372],{"alt":158,"src":27373},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,27375,27376],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[1452,27378,27379],{"start":197},[1455,27380,27381],{},"方法二：actor-critic算法",[19,27383,27384],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,27386,27387],{},"两个网络的构建：",[19,27389,27390],{},[4602,27391],{"alt":158,"src":27392},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,27394,27395],{},"actor网路：",[19,27397,27398],{},[4602,27399],{"alt":158,"src":27400},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,27402,27403],{},"critic网络",[19,27405,27406],{},[4602,27407],{"alt":158,"src":27408},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[1452,27410,27411],{"start":228},[1455,27412,27413],{},"网络的训练",[19,27415,27416],{},"网络描述",[19,27418,27419],{},[4602,27420],{"alt":158,"src":27421},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,27423,27424],{},[4602,27425],{"alt":158,"src":27426},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,27428,27429],{},"TD算法更新梯度：",[19,27431,27432],{},[4602,27433],{"alt":158,"src":27434},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,27436,27437],{},"策略网络更新梯度：",[19,27439,27440],{},[4602,27441],{"alt":158,"src":27442},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,27444,27445],{},"训练整个流程的具体描述：",[19,27447,27448,27451,27452],{},[4602,27449],{"alt":158,"src":27450},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[4602,27453],{"alt":158,"src":27454},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":158,"searchDepth":197,"depth":197,"links":27456},[27457,27458],{"id":27233,"depth":197,"text":27234},{"id":27343,"depth":197,"text":27344},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":27225,"description":158},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":27465,"title":27466,"body":27467,"description":27474,"extension":3242,"meta":27524,"navigation":300,"path":27525,"seo":27526,"stem":27527,"__hash__":27528},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":27468,"toc":27520},[27469,27472,27475,27479,27482,27487,27491,27494,27499,27502,27507,27512,27515],[10,27470,27466],{"id":27471},"_5alphago算法",[19,27473,27474],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,27476,27478],{"id":27477},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,27480,27481],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,27483,27484],{},[4602,27485],{"alt":158,"src":27486},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,27488,27490],{"id":27489},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,27492,27493],{},"采用强化学习的方式训练策略网络",[19,27495,27496],{},[4602,27497],{"alt":158,"src":27498},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,27500,27501],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,27503,27504],{},[4602,27505],{"alt":158,"src":27506},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,27508,27509],{},[4602,27510],{"alt":158,"src":27511},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,27513,27514],{},"强化学习训练策略网络的总结：",[19,27516,27517],{},[4602,27518],{"alt":158,"src":27519},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":158,"searchDepth":197,"depth":197,"links":27521},[27522,27523],{"id":27477,"depth":197,"text":27478},{"id":27489,"depth":197,"text":27490},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":27466,"description":27474},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":27530,"title":27531,"body":27532,"description":27539,"extension":3242,"meta":27542,"navigation":300,"path":27543,"seo":27544,"stem":27545,"__hash__":27546},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":27533,"toc":27540},[27534,27537],[10,27535,27531],{"id":27536},"_6价值网络",[19,27538,27539],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":158,"searchDepth":197,"depth":197,"links":27541},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":27531,"description":27539},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":27548,"title":27549,"body":27550,"description":27554,"extension":3242,"meta":27555,"navigation":300,"path":27556,"seo":27557,"stem":27558,"__hash__":27559},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":27551,"toc":27552},[],{"title":158,"searchDepth":197,"depth":197,"links":27553},[],"记录自己的强化学习笔记。",{"category":26469},"\u002Fwiki\u002F2025-12-04",{"title":27549,"description":27554},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":27561,"title":27562,"body":27563,"description":3241,"extension":3242,"meta":27602,"navigation":300,"path":27603,"seo":27604,"stem":27605,"__hash__":27606},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":27564,"toc":27600},[27565,27568,27571,27577,27580,27586,27589,27594,27597],[10,27566,27562],{"id":27567},"_1-项目概览与官方资源",[19,27569,27570],{},"官方文档：",[19,27572,27573],{},[3538,27574,27575],{"href":27575,"rel":27576},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[26956],[19,27578,27579],{},"官方代码仓库：",[19,27581,27582],{},[3538,27583,27584],{"href":27584,"rel":27585},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[26956],[19,27587,27588],{},"复现大体流程：",[19,27590,27591],{},[4602,27592],{"alt":158,"src":27593},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,27595,27596],{},"本教程的目标是打通这条链路：",[19,27598,27599],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":158,"searchDepth":197,"depth":197,"links":27601},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":27562,"description":3241},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":27608,"title":27609,"body":27610,"description":3241,"extension":3242,"meta":27726,"navigation":300,"path":27727,"seo":27728,"stem":27729,"__hash__":27730},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":27611,"toc":27721},[27612,27615,27619,27622,27629,27633,27636,27645,27655,27659,27689,27692,27718],[10,27613,27609],{"id":27614},"_2-环境准备与设备连接",[14,27616,27618],{"id":27617},"_21-系统与环境","2.1 系统与环境",[19,27620,27621],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,27623,27624,27625,27628],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[71,27626,27627],{},"lerobot"," 依赖。",[14,27630,27632],{"id":27631},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,27634,27635],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[153,27637,27639],{"className":26913,"code":27638,"language":26915,"meta":158,"style":158},"lerobot-find-out\n",[71,27640,27641],{"__ignoreMap":158},[162,27642,27643],{"class":164,"line":165},[162,27644,27638],{"class":5082},[19,27646,27647,27648,3513,27651,27654],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[71,27649,27650],{},"\u002Fdev\u002FttyACM0",[71,27652,27653],{},"\u002Fdev\u002FttyACM1","）。",[14,27656,27658],{"id":27657},"_23-串口授权","2.3 串口授权",[153,27660,27662],{"className":26913,"code":27661,"language":26915,"meta":158,"style":158},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[71,27663,27664,27678],{"__ignoreMap":158},[162,27665,27666,27669,27672,27675],{"class":164,"line":165},[162,27667,27668],{"class":5082},"sudo",[162,27670,27671],{"class":179}," chmod",[162,27673,27674],{"class":207}," 666",[162,27676,27677],{"class":179}," \u002Fdev\u002FttyACM0\n",[162,27679,27680,27682,27684,27686],{"class":164,"line":197},[162,27681,27668],{"class":5082},[162,27683,27671],{"class":179},[162,27685,27674],{"class":207},[162,27687,27688],{"class":179}," \u002Fdev\u002FttyACM1\n",[19,27690,27691],{},"说明：",[4279,27693,27694,27699,27705,27715],{},[1455,27695,27696,27698],{},[71,27697,27668],{},"：以 root 权限执行命令。",[1455,27700,27701,27704],{},[71,27702,27703],{},"chmod","：修改设备节点权限。",[1455,27706,27707,27710,27711,27714],{},[71,27708,27709],{},"666","：",[71,27712,27713],{},"rw-rw-rw-","，所有用户可读写。",[1455,27716,27717],{},"串口号必须替换为你机器上的真实端口。",[3219,27719,27720],{},"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":158,"searchDepth":197,"depth":197,"links":27722},[27723,27724,27725],{"id":27617,"depth":197,"text":27618},{"id":27631,"depth":197,"text":27632},{"id":27657,"depth":197,"text":27658},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":27609,"description":3241},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":27732,"title":27733,"body":27734,"description":3241,"extension":3242,"meta":27895,"navigation":300,"path":27896,"seo":27897,"stem":27898,"__hash__":27899},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":27735,"toc":27891},[27736,27740,27744,27750,27753,27810,27813,27817,27820,27888],[10,27737,27739],{"id":27738},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,27741,27743],{"id":27742},"_31-配置电机-id","3.1 配置电机 ID",[19,27745,27746,27747,27749],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[71,27748,208],{},"，需要改成机械臂链路里不冲突的编号。",[19,27751,27752],{},"方式一：用 LeRobot 命令逐步写入。",[153,27754,27756],{"className":26913,"code":27755,"language":26915,"meta":158,"style":158},"# 主臂舵机配置 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",[71,27757,27758,27763,27771,27778,27783,27787,27792,27798,27805],{"__ignoreMap":158},[162,27759,27760],{"class":164,"line":165},[162,27761,27762],{"class":361},"# 主臂舵机配置 ID\n",[162,27764,27765,27768],{"class":164,"line":197},[162,27766,27767],{"class":5082},"lerobot-setup-motors",[162,27769,27770],{"class":207}," \\\n",[162,27772,27773,27776],{"class":164,"line":228},[162,27774,27775],{"class":207},"  --teleop.type=so101_leader",[162,27777,27770],{"class":207},[162,27779,27780],{"class":164,"line":252},[162,27781,27782],{"class":207},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[162,27784,27785],{"class":164,"line":328},[162,27786,301],{"emptyLinePlaceholder":300},[162,27788,27789],{"class":164,"line":466},[162,27790,27791],{"class":361},"# 从臂舵机配置 ID\n",[162,27793,27794,27796],{"class":164,"line":471},[162,27795,27767],{"class":5082},[162,27797,27770],{"class":207},[162,27799,27800,27803],{"class":164,"line":687},[162,27801,27802],{"class":207},"  --robot.type=so101_follower",[162,27804,27770],{"class":207},[162,27806,27807],{"class":164,"line":692},[162,27808,27809],{"class":207},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,27811,27812],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,27814,27816],{"id":27815},"_32-机械臂校准","3.2 机械臂校准",[19,27818,27819],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[153,27821,27823],{"className":26913,"code":27822,"language":26915,"meta":158,"style":158},"# 主臂校准\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",[71,27824,27825,27830,27837,27843,27850,27855,27859,27864,27870,27876,27883],{"__ignoreMap":158},[162,27826,27827],{"class":164,"line":165},[162,27828,27829],{"class":361},"# 主臂校准\n",[162,27831,27832,27835],{"class":164,"line":197},[162,27833,27834],{"class":5082},"lerobot-calibrate",[162,27836,27770],{"class":207},[162,27838,27839,27841],{"class":164,"line":228},[162,27840,27775],{"class":207},[162,27842,27770],{"class":207},[162,27844,27845,27848],{"class":164,"line":252},[162,27846,27847],{"class":207},"  --teleop.port=\u002Fdev\u002FttyACM0",[162,27849,27770],{"class":207},[162,27851,27852],{"class":164,"line":328},[162,27853,27854],{"class":207},"  --teleop.id=my_awesome_leader_arm\n",[162,27856,27857],{"class":164,"line":466},[162,27858,301],{"emptyLinePlaceholder":300},[162,27860,27861],{"class":164,"line":471},[162,27862,27863],{"class":361},"# 从臂校准\n",[162,27865,27866,27868],{"class":164,"line":687},[162,27867,27834],{"class":5082},[162,27869,27770],{"class":207},[162,27871,27872,27874],{"class":164,"line":692},[162,27873,27802],{"class":207},[162,27875,27770],{"class":207},[162,27877,27878,27881],{"class":164,"line":698},[162,27879,27880],{"class":207},"  --robot.port=\u002Fdev\u002FttyACM1",[162,27882,27770],{"class":207},[162,27884,27885],{"class":164,"line":2955},[162,27886,27887],{"class":207},"  --robot.id=my_awesome_follower_arm\n",[3219,27889,27890],{},"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":158,"searchDepth":197,"depth":197,"links":27892},[27893,27894],{"id":27742,"depth":197,"text":27743},{"id":27815,"depth":197,"text":27816},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":27733,"description":3241},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":27901,"title":27902,"body":27903,"description":3241,"extension":3242,"meta":28094,"navigation":300,"path":28095,"seo":28096,"stem":28097,"__hash__":28098},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":27904,"toc":28090},[27905,27908,27912,27959,27963,27976,28039,28042,28087],[10,27906,27902],{"id":27907},"_4-遥操与相机接入",[14,27909,27911],{"id":27910},"_41-不带相机遥操","4.1 不带相机遥操",[153,27913,27915],{"className":26913,"code":27914,"language":26915,"meta":158,"style":158},"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",[71,27916,27917,27924,27930,27936,27943,27949,27955],{"__ignoreMap":158},[162,27918,27919,27922],{"class":164,"line":165},[162,27920,27921],{"class":5082},"lerobot-teleoperate",[162,27923,27770],{"class":207},[162,27925,27926,27928],{"class":164,"line":197},[162,27927,27802],{"class":207},[162,27929,27770],{"class":207},[162,27931,27932,27934],{"class":164,"line":228},[162,27933,27880],{"class":207},[162,27935,27770],{"class":207},[162,27937,27938,27941],{"class":164,"line":252},[162,27939,27940],{"class":207},"  --robot.id=my_awesome_follower_arm",[162,27942,27770],{"class":207},[162,27944,27945,27947],{"class":164,"line":328},[162,27946,27775],{"class":207},[162,27948,27770],{"class":207},[162,27950,27951,27953],{"class":164,"line":466},[162,27952,27847],{"class":207},[162,27954,27770],{"class":207},[162,27956,27957],{"class":164,"line":471},[162,27958,27854],{"class":207},[14,27960,27962],{"id":27961},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[153,27964,27966],{"className":26913,"code":27965,"language":26915,"meta":158,"style":158},"lerobot-find-cameras opencv\n",[71,27967,27968],{"__ignoreMap":158},[162,27969,27970,27973],{"class":164,"line":165},[162,27971,27972],{"class":5082},"lerobot-find-cameras",[162,27974,27975],{"class":179}," opencv\n",[153,27977,27979],{"className":26913,"code":27978,"language":26915,"meta":158,"style":158},"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",[71,27980,27981,27987,27993,27999,28005,28015,28021,28027,28034],{"__ignoreMap":158},[162,27982,27983,27985],{"class":164,"line":165},[162,27984,27921],{"class":5082},[162,27986,27770],{"class":207},[162,27988,27989,27991],{"class":164,"line":197},[162,27990,27802],{"class":207},[162,27992,27770],{"class":207},[162,27994,27995,27997],{"class":164,"line":228},[162,27996,27880],{"class":207},[162,27998,27770],{"class":207},[162,28000,28001,28003],{"class":164,"line":252},[162,28002,27940],{"class":207},[162,28004,27770],{"class":207},[162,28006,28007,28010,28013],{"class":164,"line":328},[162,28008,28009],{"class":207},"  --robot.cameras=",[162,28011,28012],{"class":179},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[162,28014,27770],{"class":207},[162,28016,28017,28019],{"class":164,"line":466},[162,28018,27775],{"class":207},[162,28020,27770],{"class":207},[162,28022,28023,28025],{"class":164,"line":471},[162,28024,27847],{"class":207},[162,28026,27770],{"class":207},[162,28028,28029,28032],{"class":164,"line":687},[162,28030,28031],{"class":207},"  --teleop.id=my_awesome_leader_arm",[162,28033,27770],{"class":207},[162,28035,28036],{"class":164,"line":692},[162,28037,28038],{"class":207},"  --display_data=true\n",[19,28040,28041],{},"相机参数说明：",[4279,28043,28044,28050,28056,28065,28075,28081],{},[1455,28045,28046,28049],{},[71,28047,28048],{},"front","：相机名称。",[1455,28051,28052,28055],{},[71,28053,28054],{},"type: opencv","：相机驱动类型。",[1455,28057,28058,28061,28062,27654],{},[71,28059,28060],{},"index_or_path","：设备编号或设备路径（如 ",[71,28063,28064],{},"\u002Fdev\u002Fvideo4",[1455,28066,28067,28070,28071,28074],{},[71,28068,28069],{},"width"," \u002F ",[71,28072,28073],{},"height","：图像分辨率。",[1455,28076,28077,28080],{},[71,28078,28079],{},"fps","：采样帧率。",[1455,28082,28083,28086],{},[71,28084,28085],{},"--display_data=true","：启用实时可视化。",[3219,28088,28089],{},"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":158,"searchDepth":197,"depth":197,"links":28091},[28092,28093],{"id":27910,"depth":197,"text":27911},{"id":27961,"depth":197,"text":27962},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":27902,"description":3241},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":28100,"title":28101,"body":28102,"description":3241,"extension":3242,"meta":28274,"navigation":300,"path":28275,"seo":28276,"stem":28277,"__hash__":28278},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":28103,"toc":28269},[28104,28108,28112,28117,28122,28125,28167,28173,28177,28226,28231,28235,28238,28246,28251,28256,28261,28266],[10,28105,28107],{"id":28106},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,28109,28111],{"id":28110},"_51-生成访问令牌","5.1 生成访问令牌",[19,28113,28114],{},[4602,28115],{"alt":158,"src":28116},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,28118,28119],{},[4602,28120],{"alt":158,"src":28121},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,28123,28124],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[153,28126,28128],{"className":26913,"code":28127,"language":26915,"meta":158,"style":158},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[71,28129,28130,28143],{"__ignoreMap":158},[162,28131,28132,28135,28138,28140],{"class":164,"line":165},[162,28133,28134],{"class":172},"export",[162,28136,28137],{"class":168}," HF_TOKEN",[162,28139,173],{"class":172},[162,28141,28142],{"class":179},"\"your_huggingface_token\"\n",[162,28144,28145,28148,28151,28154,28157,28159,28162,28164],{"class":164,"line":197},[162,28146,28147],{"class":5082},"hf",[162,28149,28150],{"class":179}," auth",[162,28152,28153],{"class":179}," login",[162,28155,28156],{"class":207}," --token",[162,28158,12824],{"class":179},[162,28160,28161],{"class":168},"$HF_TOKEN",[162,28163,979],{"class":179},[162,28165,28166],{"class":207}," --add-to-git-credential\n",[19,28168,28169,28172],{},[71,28170,28171],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,28174,28176],{"id":28175},"_52-验证登录","5.2 验证登录",[153,28178,28180],{"className":26913,"code":28179,"language":26915,"meta":158,"style":158},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[71,28181,28182,28213],{"__ignoreMap":158},[162,28183,28184,28187,28189,28192,28194,28196,28199,28202,28205,28208,28211],{"class":164,"line":165},[162,28185,28186],{"class":168},"HF_USER",[162,28188,173],{"class":172},[162,28190,28191],{"class":168},"$(",[162,28193,28147],{"class":5082},[162,28195,28150],{"class":179},[162,28197,28198],{"class":179}," whoami",[162,28200,28201],{"class":172}," |",[162,28203,28204],{"class":5082}," head",[162,28206,28207],{"class":207}," -n",[162,28209,28210],{"class":207}," 1",[162,28212,434],{"class":168},[162,28214,28215,28218,28220,28223],{"class":164,"line":197},[162,28216,28217],{"class":207},"echo",[162,28219,12824],{"class":179},[162,28221,28222],{"class":168},"$HF_USER",[162,28224,28225],{"class":179},"\"\n",[19,28227,28228],{},[4602,28229],{"alt":158,"src":28230},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,28232,28234],{"id":28233},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,28236,28237],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[4279,28239,28240,28243],{},[1455,28241,28242],{},"Dataset Repo（用于上传演示数据）",[1455,28244,28245],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,28247,28248],{},[4602,28249],{"alt":158,"src":28250},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,28252,28253],{},[4602,28254],{"alt":158,"src":28255},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,28257,28258],{},[4602,28259],{"alt":158,"src":28260},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,28262,28263],{},[4602,28264],{"alt":158,"src":28265},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[3219,28267,28268],{},"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":158,"searchDepth":197,"depth":197,"links":28270},[28271,28272,28273],{"id":28110,"depth":197,"text":28111},{"id":28175,"depth":197,"text":28176},{"id":28233,"depth":197,"text":28234},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":28101,"description":3241},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":28280,"title":28281,"body":28282,"description":3241,"extension":3242,"meta":28479,"navigation":300,"path":28480,"seo":28481,"stem":28482,"__hash__":28483},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":28283,"toc":28474},[28284,28288,28292,28388,28396,28401,28405,28421,28424,28428,28471],[10,28285,28287],{"id":28286},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,28289,28291],{"id":28290},"_61-录制示教数据","6.1 录制示教数据",[153,28293,28295],{"className":26913,"code":28294,"language":26915,"meta":158,"style":158},"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",[71,28296,28297,28304,28310,28316,28322,28331,28337,28343,28349,28356,28366,28373,28383],{"__ignoreMap":158},[162,28298,28299,28302],{"class":164,"line":165},[162,28300,28301],{"class":5082},"lerobot-record",[162,28303,27770],{"class":207},[162,28305,28306,28308],{"class":164,"line":197},[162,28307,27802],{"class":207},[162,28309,27770],{"class":207},[162,28311,28312,28314],{"class":164,"line":228},[162,28313,27880],{"class":207},[162,28315,27770],{"class":207},[162,28317,28318,28320],{"class":164,"line":252},[162,28319,27940],{"class":207},[162,28321,27770],{"class":207},[162,28323,28324,28326,28329],{"class":164,"line":328},[162,28325,28009],{"class":207},[162,28327,28328],{"class":179},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[162,28330,27770],{"class":207},[162,28332,28333,28335],{"class":164,"line":466},[162,28334,27775],{"class":207},[162,28336,27770],{"class":207},[162,28338,28339,28341],{"class":164,"line":471},[162,28340,27847],{"class":207},[162,28342,27770],{"class":207},[162,28344,28345,28347],{"class":164,"line":687},[162,28346,28031],{"class":207},[162,28348,27770],{"class":207},[162,28350,28351,28354],{"class":164,"line":692},[162,28352,28353],{"class":207},"  --display_data=true",[162,28355,27770],{"class":207},[162,28357,28358,28361,28364],{"class":164,"line":698},[162,28359,28360],{"class":207},"  --dataset.repo_id=",[162,28362,28363],{"class":179},"\"Embodied-AI-6\u002Fso101_test\"",[162,28365,27770],{"class":207},[162,28367,28368,28371],{"class":164,"line":2955},[162,28369,28370],{"class":207},"  --dataset.num_episodes=10",[162,28372,27770],{"class":207},[162,28374,28375,28378,28381],{"class":164,"line":2960},[162,28376,28377],{"class":207},"  --dataset.single_task=",[162,28379,28380],{"class":179},"\"Grab the green cube\"",[162,28382,27770],{"class":207},[162,28384,28385],{"class":164,"line":2971},[162,28386,28387],{"class":207},"  --resume=true\n",[4279,28389,28390],{},[1455,28391,28392,28395],{},[71,28393,28394],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,28397,28398],{},[4602,28399],{"alt":158,"src":28400},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,28402,28404],{"id":28403},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[153,28406,28408],{"className":26913,"code":28407,"language":26915,"meta":158,"style":158},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[71,28409,28410],{"__ignoreMap":158},[162,28411,28412,28415,28418],{"class":164,"line":165},[162,28413,28414],{"class":5082},"rm",[162,28416,28417],{"class":207}," -rf",[162,28419,28420],{"class":179}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,28422,28423],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,28425,28427],{"id":28426},"_63-回放指定-episode","6.3 回放指定 episode",[153,28429,28431],{"className":26913,"code":28430,"language":26915,"meta":158,"style":158},"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",[71,28432,28433,28440,28446,28452,28458,28466],{"__ignoreMap":158},[162,28434,28435,28438],{"class":164,"line":165},[162,28436,28437],{"class":5082},"lerobot-replay",[162,28439,27770],{"class":207},[162,28441,28442,28444],{"class":164,"line":197},[162,28443,27802],{"class":207},[162,28445,27770],{"class":207},[162,28447,28448,28450],{"class":164,"line":228},[162,28449,27880],{"class":207},[162,28451,27770],{"class":207},[162,28453,28454,28456],{"class":164,"line":252},[162,28455,27940],{"class":207},[162,28457,27770],{"class":207},[162,28459,28460,28462,28464],{"class":164,"line":328},[162,28461,28360],{"class":207},[162,28463,28363],{"class":179},[162,28465,27770],{"class":207},[162,28467,28468],{"class":164,"line":466},[162,28469,28470],{"class":207},"  --dataset.episode=0\n",[3219,28472,28473],{},"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":158,"searchDepth":197,"depth":197,"links":28475},[28476,28477,28478],{"id":28290,"depth":197,"text":28291},{"id":28403,"depth":197,"text":28404},{"id":28426,"depth":197,"text":28427},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":28281,"description":3241},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":28485,"title":28486,"body":28487,"description":3241,"extension":3242,"meta":28615,"navigation":300,"path":28616,"seo":28617,"stem":28618,"__hash__":28619},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":28488,"toc":28613},[28489,28493,28556,28559,28606,28611],[10,28490,28492],{"id":28491},"_7-act-模型训练","7. ACT 模型训练",[153,28494,28496],{"className":26913,"code":28495,"language":26915,"meta":158,"style":158},"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",[71,28497,28498,28505,28513,28520,28527,28534,28541,28548],{"__ignoreMap":158},[162,28499,28500,28503],{"class":164,"line":165},[162,28501,28502],{"class":5082},"lerobot-train",[162,28504,27770],{"class":207},[162,28506,28507,28509,28511],{"class":164,"line":197},[162,28508,28360],{"class":207},[162,28510,28363],{"class":179},[162,28512,27770],{"class":207},[162,28514,28515,28518],{"class":164,"line":228},[162,28516,28517],{"class":207},"  --policy.type=act",[162,28519,27770],{"class":207},[162,28521,28522,28525],{"class":164,"line":252},[162,28523,28524],{"class":207},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[162,28526,27770],{"class":207},[162,28528,28529,28532],{"class":164,"line":328},[162,28530,28531],{"class":207},"  --job_name=act_so101_test",[162,28533,27770],{"class":207},[162,28535,28536,28539],{"class":164,"line":466},[162,28537,28538],{"class":207},"  --policy.device=cuda",[162,28540,27770],{"class":207},[162,28542,28543,28546],{"class":164,"line":471},[162,28544,28545],{"class":207},"  --wandb.enable=false",[162,28547,27770],{"class":207},[162,28549,28550,28553],{"class":164,"line":687},[162,28551,28552],{"class":207},"  --policy.repo_id=",[162,28554,28555],{"class":179},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,28557,28558],{},"参数说明：",[4279,28560,28561,28567,28573,28579,28585,28594,28600],{},[1455,28562,28563,28566],{},[71,28564,28565],{},"--dataset.repo_id","：训练数据集仓库。",[1455,28568,28569,28572],{},[71,28570,28571],{},"--policy.type=act","：策略模型类型为 ACT。",[1455,28574,28575,28578],{},[71,28576,28577],{},"--output_dir","：本地训练输出目录。",[1455,28580,28581,28584],{},[71,28582,28583],{},"--job_name","：训练任务名称。",[1455,28586,28587,28590,28591,27654],{},[71,28588,28589],{},"--policy.device","：训练设备（如 ",[71,28592,28593],{},"cuda",[1455,28595,28596,28599],{},[71,28597,28598],{},"--wandb.enable","：是否启用 WandB 可视化。",[1455,28601,28602,28605],{},[71,28603,28604],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,28607,28608],{},[4602,28609],{"alt":158,"src":28610},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[3219,28612,28473],{},{"title":158,"searchDepth":197,"depth":197,"links":28614},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":28486,"description":3241},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":28621,"title":28622,"body":28623,"description":3241,"extension":3242,"meta":28710,"navigation":300,"path":28711,"seo":28712,"stem":28713,"__hash__":28714},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":28624,"toc":28708},[28625,28628,28631,28698,28706],[10,28626,28622],{"id":28627},"_8-策略部署与自动采集",[19,28629,28630],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[153,28632,28634],{"className":26913,"code":28633,"language":26915,"meta":158,"style":158},"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",[71,28635,28636,28642,28648,28654,28662,28668,28675,28683,28691],{"__ignoreMap":158},[162,28637,28638,28640],{"class":164,"line":165},[162,28639,28301],{"class":5082},[162,28641,27770],{"class":207},[162,28643,28644,28646],{"class":164,"line":197},[162,28645,27802],{"class":207},[162,28647,27770],{"class":207},[162,28649,28650,28652],{"class":164,"line":228},[162,28651,27880],{"class":207},[162,28653,27770],{"class":207},[162,28655,28656,28658,28660],{"class":164,"line":252},[162,28657,28009],{"class":207},[162,28659,28328],{"class":179},[162,28661,27770],{"class":207},[162,28663,28664,28666],{"class":164,"line":328},[162,28665,27940],{"class":207},[162,28667,27770],{"class":207},[162,28669,28670,28673],{"class":164,"line":466},[162,28671,28672],{"class":207},"  --display_data=false",[162,28674,27770],{"class":207},[162,28676,28677,28679,28681],{"class":164,"line":471},[162,28678,28360],{"class":207},[162,28680,28363],{"class":179},[162,28682,27770],{"class":207},[162,28684,28685,28687,28689],{"class":164,"line":687},[162,28686,28377],{"class":207},[162,28688,28380],{"class":179},[162,28690,27770],{"class":207},[162,28692,28693,28696],{"class":164,"line":692},[162,28694,28695],{"class":207},"  --policy.path=",[162,28697,28555],{"class":179},[4279,28699,28700],{},[1455,28701,28702,28705],{},[71,28703,28704],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[3219,28707,28473],{},{"title":158,"searchDepth":197,"depth":197,"links":28709},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":28622,"description":3241},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":28716,"title":28717,"body":28718,"description":3241,"extension":3242,"meta":28747,"navigation":300,"path":28748,"seo":28749,"stem":28750,"__hash__":28751},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":28719,"toc":28745},[28720,28724,28727,28733,28736,28742],[10,28721,28723],{"id":28722},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,28725,28726],{},"项目地址：",[19,28728,28729],{},[3538,28730,28731],{"href":28731,"rel":28732},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[26956],[19,28734,28735],{},"参考教程：",[19,28737,28738],{},[3538,28739,28740],{"href":28740,"rel":28741},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[26956],[19,28743,28744],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":158,"searchDepth":197,"depth":197,"links":28746},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":28717,"description":3241},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":28753,"title":28754,"body":28755,"description":28759,"extension":3242,"meta":28760,"navigation":300,"path":28761,"seo":28762,"stem":28763,"__hash__":28764},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":28756,"toc":28757},[],{"title":158,"searchDepth":197,"depth":197,"links":28758},[],"act复现",{"category":26469},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":28754,"description":28759},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":28766,"title":28767,"body":28768,"description":158,"extension":3242,"meta":29069,"navigation":300,"path":29070,"seo":29071,"stem":29072,"__hash__":29073},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":28769,"toc":29061},[28770,28773,28777,28787,28794,28801,28804,28811,28814,28817,28821,28833,28837,28882,28885,28888,28891,28894,28897,28901,28939,28945,28949,29003,29008,29011,29014,29019,29022,29027,29030,29033,29037,29040,29043,29047],[10,28771,28767],{"id":28772},"_1简介",[3284,28774,28776],{"id":28775},"_11什么是-docker","1.1什么是 Docker？",[19,28778,28779,28780,28783,28784],{},"Docker 是一个开源的 ",[3453,28781,28782],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[3453,28785,28786],{},"一次构建，到处运行。",[19,28788,28789,28790,28793],{},"“ ",[3453,28791,28792],{},"一次构建，到处运行"," ”也就是说：",[1452,28795,28796],{},[1455,28797,28798],{},[3453,28799,28800],{},"之前：",[19,28802,28803],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[1452,28805,28806],{},[1455,28807,28808],{},[3453,28809,28810],{},"使用docker后：",[19,28812,28813],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,28815,28816],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[3284,28818,28820],{"id":28819},"_12它是怎么工作的","1.2.它是怎么工作的？",[4279,28822,28823,28826],{},[1455,28824,28825],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[1455,28827,28828,28829,28832],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[3453,28830,28831],{},"无论在哪运行都一样稳定"," 。",[3284,28834,28836],{"id":28835},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[26,28838,28839,28849],{},[29,28840,28841],{},[32,28842,28843,28846],{},[35,28844,28845],{"align":26827},"概念",[35,28847,28848],{"align":26827},"解释",[51,28850,28851,28859,28866,28874],{},[32,28852,28853,28856],{},[56,28854,28855],{"align":26827},"镜像",[56,28857,28858],{"align":26827},"Image，运行容器的模板，像是一个应用快照",[32,28860,28861,28863],{},[56,28862,37],{"align":26827},[56,28864,28865],{"align":26827},"Container，运行中的镜像实例，有自己的文件系统、网络等",[32,28867,28868,28871],{},[56,28869,28870],{"align":26827},"Dockerfile",[56,28872,28873],{"align":26827},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[32,28875,28876,28879],{},[56,28877,28878],{"align":26827},"仓库",[56,28880,28881],{"align":26827},"Registry，存放镜像的地方，比如 Docker Hub",[19,28883,28884],{},"抽象化理解:",[19,28886,28887],{},"Docker镜像≈C++类",[19,28889,28890],{},"Docker容器≈C++类实例(即对象)",[19,28892,28893],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,28895,28896],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[3284,28898,28900],{"id":28899},"_14类比理解","1.4.类比理解",[26,28902,28903,28913],{},[29,28904,28905],{},[32,28906,28907,28910],{},[35,28908,28909],{"align":26827},"传统部署",[35,28911,28912],{"align":26827},"Docker部署",[51,28914,28915,28923,28931],{},[32,28916,28917,28920],{},[56,28918,28919],{"align":26827},"手动安装依赖、调试版本不一致问题",[56,28921,28922],{"align":26827},"一次打包环境和代码",[32,28924,28925,28928],{},[56,28926,28927],{"align":26827},"程序“裸奔”跑在系统上",[56,28929,28930],{"align":26827},"程序“穿着容器”隔离运行",[32,28932,28933,28936],{},[56,28934,28935],{"align":26827},"容易“在我电脑上能跑”",[56,28937,28938],{"align":26827},"保证“无论在哪都能跑”",[19,28940,28941,28942],{},"就像快递包裹： ",[3453,28943,28944],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[3284,28946,28948],{"id":28947},"_15docker-的核心优势","1.5.Docker 的核心优势",[26,28950,28951,28961],{},[29,28952,28953],{},[32,28954,28955,28958],{},[35,28956,28957],{"align":26827},"优势",[35,28959,28960],{"align":26827},"说明",[51,28962,28963,28971,28979,28987,28995],{},[32,28964,28965,28968],{},[56,28966,28967],{"align":26827},"轻量级",[56,28969,28970],{"align":26827},"基于系统内核共享，启动速度快，占资源少",[32,28972,28973,28976],{},[56,28974,28975],{"align":26827},"跨平台",[56,28977,28978],{"align":26827},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[32,28980,28981,28984],{},[56,28982,28983],{"align":26827},"易于迁移部署",[56,28985,28986],{"align":26827},"应用和环境一起封装，不怕依赖不一致",[32,28988,28989,28992],{},[56,28990,28991],{"align":26827},"易于版本控制",[56,28993,28994],{"align":26827},"镜像版本可控，支持回滚",[32,28996,28997,29000],{},[56,28998,28999],{"align":26827},"生态丰富",[56,29001,29002],{"align":26827},"Docker Hub 上有成千上万的现成镜像可用",[1452,29004,29005],{},[1455,29006,29007],{},"在Linux上可以几乎实现无性能损失。",[19,29009,29010],{},"docker里的发行版和本机共用Linux内核。",[19,29012,29013],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[1452,29015,29016],{},[1455,29017,29018],{},"可以快速部署在绝大多数Linux发行版",[19,29020,29021],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[1452,29023,29024],{},[1455,29025,29026],{},"配置环境简单",[19,29028,29029],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,29031,29032],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[1452,29034,29035],{},[1455,29036,28999],{},[19,29038,29039],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,29041,29042],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[3284,29044,29046],{"id":29045},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[4279,29048,29049,29052,29055,29058],{},[1455,29050,29051],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[1455,29053,29054],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[1455,29056,29057],{},"微服务架构：每个服务一个容器，灵活组合",[1455,29059,29060],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":158,"searchDepth":197,"depth":197,"links":29062},[29063,29064,29065,29066,29067,29068],{"id":28775,"depth":228,"text":28776},{"id":28819,"depth":228,"text":28820},{"id":28835,"depth":228,"text":28836},{"id":28899,"depth":228,"text":28900},{"id":28947,"depth":228,"text":28948},{"id":29045,"depth":228,"text":29046},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":28767,"description":158},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":29075,"title":29076,"body":29077,"description":158,"extension":3242,"meta":29809,"navigation":300,"path":29810,"seo":29811,"stem":29812,"__hash__":29813},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":29078,"toc":29804},[29079,29082,29086,29089,29092,29098,29104,29108,29117,29120,29176,29179,29230,29233,29316,29319,29356,29360,29371,29384,29391,29394,29474,29477,29527,29530,29553,29557,29564,29567,29583,29589,29592,29608,29614,29617,29633,29647,29653,29673,29679,29682,29694,29700,29703,29717,29723,29726,29746,29751,29754,29757,29761,29764,29767,29770,29777,29780,29783,29786,29791,29796,29801],[10,29080,29076],{"id":29081},"_2安装docker",[3284,29083,29085],{"id":29084},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,29087,29088],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,29090,29091],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,29093,29094],{},[3538,29095,29096],{"href":29096,"rel":29097},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[26956],[19,29099,29100],{},[3538,29101,29102],{"href":29102,"rel":29103},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[26956],[25089,29105,29107],{"id":29106},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,29109,29110,29111,29116],{},"以下内容根据 ",[3538,29112,29115],{"href":29113,"rel":29114},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[26956],"官方文档"," 修改而来。",[19,29118,29119],{},"如果你过去安装过 docker，先删掉：",[153,29121,29123],{"className":26913,"code":29122,"language":26915,"meta":158,"style":158},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[71,29124,29125],{"__ignoreMap":158},[162,29126,29127,29129,29132,29134,29137,29140,29143,29146,29149,29152,29155,29158,29161,29164,29167,29170,29173],{"class":164,"line":165},[162,29128,808],{"class":172},[162,29130,29131],{"class":168}," pkg ",[162,29133,814],{"class":172},[162,29135,29136],{"class":179}," docker.io",[162,29138,29139],{"class":179}," docker-doc",[162,29141,29142],{"class":179}," docker-compose",[162,29144,29145],{"class":179}," docker-compose-v2",[162,29147,29148],{"class":179}," podman-docker",[162,29150,29151],{"class":179}," containerd",[162,29153,29154],{"class":179}," runc",[162,29156,29157],{"class":168},"; ",[162,29159,29160],{"class":172},"do",[162,29162,29163],{"class":5082}," sudo",[162,29165,29166],{"class":179}," apt-get",[162,29168,29169],{"class":179}," remove",[162,29171,29172],{"class":168}," $pkg; ",[162,29174,29175],{"class":172},"done\n",[19,29177,29178],{},"首先安装依赖和GPG：",[153,29180,29184],{"className":29181,"code":29182,"language":29183,"meta":158,"style":158},"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",[71,29185,29186,29191,29196,29201,29206,29211,29216,29220,29225],{"__ignoreMap":158},[162,29187,29188],{"class":164,"line":165},[162,29189,29190],{},"# Add Docker's official GPG key:\n",[162,29192,29193],{"class":164,"line":197},[162,29194,29195],{},"sudo apt-get update\n",[162,29197,29198],{"class":164,"line":228},[162,29199,29200],{},"sudo apt-get install ca-certificates curl\n",[162,29202,29203],{"class":164,"line":252},[162,29204,29205],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[162,29207,29208],{"class":164,"line":328},[162,29209,29210],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[162,29212,29213],{"class":164,"line":466},[162,29214,29215],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[162,29217,29218],{"class":164,"line":471},[162,29219,301],{"emptyLinePlaceholder":300},[162,29221,29222],{"class":164,"line":687},[162,29223,29224],{},"# 如果上面这行报错就弄下面这行\n",[162,29226,29227],{"class":164,"line":692},[162,29228,29229],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,29231,29232],{},"信任 Docker 的 GPG 公钥并添加仓库：",[153,29234,29236],{"className":26913,"code":29235,"language":26915,"meta":158,"style":158},"# 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",[71,29237,29238,29243,29249,29266,29299],{"__ignoreMap":158},[162,29239,29240],{"class":164,"line":165},[162,29241,29242],{"class":361},"# Add the repository to Apt sources:\n",[162,29244,29245,29247],{"class":164,"line":197},[162,29246,28217],{"class":207},[162,29248,27770],{"class":207},[162,29250,29251,29254,29257,29260,29263],{"class":164,"line":228},[162,29252,29253],{"class":179},"  \"deb [arch=$(",[162,29255,29256],{"class":5082},"dpkg",[162,29258,29259],{"class":207}," --print-architecture",[162,29261,29262],{"class":179},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[162,29264,29265],{"class":207},"\\\n",[162,29267,29268,29271,29273,29275,29278,29281,29283,29285,29288,29290,29292,29295,29297],{"class":164,"line":252},[162,29269,29270],{"class":179},"  \"",[162,29272,28191],{"class":168},[162,29274,3847],{"class":207},[162,29276,29277],{"class":179}," \u002Fetc\u002Fos-release",[162,29279,29280],{"class":168}," && ",[162,29282,28217],{"class":207},[162,29284,12824],{"class":179},[162,29286,29287],{"class":168},"$VERSION_CODENAME",[162,29289,979],{"class":179},[162,29291,3720],{"class":168},[162,29293,29294],{"class":179},"\" stable\"",[162,29296,28201],{"class":172},[162,29298,27770],{"class":207},[162,29300,29301,29304,29307,29310,29313],{"class":164,"line":328},[162,29302,29303],{"class":5082},"  sudo",[162,29305,29306],{"class":179}," tee",[162,29308,29309],{"class":179}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[162,29311,29312],{"class":172}," >",[162,29314,29315],{"class":179}," \u002Fdev\u002Fnull\n",[19,29317,29318],{},"最后安装",[153,29320,29322],{"className":26913,"code":29321,"language":26915,"meta":158,"style":158},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[71,29323,29324,29333],{"__ignoreMap":158},[162,29325,29326,29328,29330],{"class":164,"line":165},[162,29327,27668],{"class":5082},[162,29329,29166],{"class":179},[162,29331,29332],{"class":179}," update\n",[162,29334,29335,29337,29339,29341,29344,29347,29350,29353],{"class":164,"line":197},[162,29336,27668],{"class":5082},[162,29338,29166],{"class":179},[162,29340,26925],{"class":179},[162,29342,29343],{"class":179}," docker-ce",[162,29345,29346],{"class":179}," docker-ce-cli",[162,29348,29349],{"class":179}," containerd.io",[162,29351,29352],{"class":179}," docker-buildx-plugin",[162,29354,29355],{"class":179}," docker-compose-plugin\n",[25089,29357,29359],{"id":29358},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,29361,29362,29363,29366,29367,29370],{},"查看自己自己包管理工具版本（dnf是 ",[3453,29364,29365],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[3453,29368,29369],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[153,29372,29374],{"className":26913,"code":29373,"language":26915,"meta":158,"style":158},"dnf --version\n",[71,29375,29376],{"__ignoreMap":158},[162,29377,29378,29381],{"class":164,"line":165},[162,29379,29380],{"class":5082},"dnf",[162,29382,29383],{"class":207}," --version\n",[19,29385,29110,29386,29390],{},[3538,29387,29115],{"href":29388,"rel":29389},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[26956]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,29392,29393],{},"如果你之前安装过 docker，请先删掉",[153,29395,29397],{"className":26913,"code":29396,"language":26915,"meta":158,"style":158},"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",[71,29398,29399,29413,29420,29427,29434,29441,29448,29455,29462,29469],{"__ignoreMap":158},[162,29400,29401,29403,29406,29408,29411],{"class":164,"line":165},[162,29402,27668],{"class":5082},[162,29404,29405],{"class":179}," dnf",[162,29407,29169],{"class":179},[162,29409,29410],{"class":179}," docker",[162,29412,27770],{"class":207},[162,29414,29415,29418],{"class":164,"line":197},[162,29416,29417],{"class":179},"                  docker-client",[162,29419,27770],{"class":207},[162,29421,29422,29425],{"class":164,"line":228},[162,29423,29424],{"class":179},"                  docker-client-latest",[162,29426,27770],{"class":207},[162,29428,29429,29432],{"class":164,"line":252},[162,29430,29431],{"class":179},"                  docker-common",[162,29433,27770],{"class":207},[162,29435,29436,29439],{"class":164,"line":328},[162,29437,29438],{"class":179},"                  docker-latest",[162,29440,27770],{"class":207},[162,29442,29443,29446],{"class":164,"line":466},[162,29444,29445],{"class":179},"                  docker-latest-logrotate",[162,29447,27770],{"class":207},[162,29449,29450,29453],{"class":164,"line":471},[162,29451,29452],{"class":179},"                  docker-logrotate",[162,29454,27770],{"class":207},[162,29456,29457,29460],{"class":164,"line":687},[162,29458,29459],{"class":179},"                  docker-selinux",[162,29461,27770],{"class":207},[162,29463,29464,29467],{"class":164,"line":692},[162,29465,29466],{"class":179},"                  docker-engine-selinux",[162,29468,27770],{"class":207},[162,29470,29471],{"class":164,"line":698},[162,29472,29473],{"class":179},"                  docker-engine\n",[19,29475,29476],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[153,29478,29480],{"className":26913,"code":29479,"language":26915,"meta":158,"style":158},"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",[71,29481,29482,29496,29511],{"__ignoreMap":158},[162,29483,29484,29486,29488,29491,29493],{"class":164,"line":165},[162,29485,27668],{"class":5082},[162,29487,29405],{"class":179},[162,29489,29490],{"class":207}," -y",[162,29492,26925],{"class":179},[162,29494,29495],{"class":179}," dnf-plugins-core\n",[162,29497,29498,29500,29502,29505,29508],{"class":164,"line":197},[162,29499,27668],{"class":5082},[162,29501,29405],{"class":179},[162,29503,29504],{"class":179}," config-manager",[162,29506,29507],{"class":179}," addrepo",[162,29509,29510],{"class":207}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[162,29512,29513,29515,29518,29521,29524],{"class":164,"line":228},[162,29514,27668],{"class":5082},[162,29516,29517],{"class":179}," sed",[162,29519,29520],{"class":207}," -i",[162,29522,29523],{"class":179}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[162,29525,29526],{"class":179}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,29528,29529],{},"最后安装：",[153,29531,29533],{"className":26913,"code":29532,"language":26915,"meta":158,"style":158},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[71,29534,29535],{"__ignoreMap":158},[162,29536,29537,29539,29541,29543,29545,29547,29549,29551],{"class":164,"line":165},[162,29538,27668],{"class":5082},[162,29540,29405],{"class":179},[162,29542,26925],{"class":179},[162,29544,29343],{"class":179},[162,29546,29346],{"class":179},[162,29548,29349],{"class":179},[162,29550,29352],{"class":179},[162,29552,29355],{"class":179},[3284,29554,29556],{"id":29555},"_22配置环境","2.2.配置环境",[25089,29558,29560,29563],{"id":29559},"_221检查-docker-服务状态",[3453,29561,29562],{},"2.2.1.检查 Docker 服务状态"," ：",[19,29565,29566],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[153,29568,29570],{"className":26913,"code":29569,"language":26915,"meta":158,"style":158},"systemctl status docker\n",[71,29571,29572],{"__ignoreMap":158},[162,29573,29574,29577,29580],{"class":164,"line":165},[162,29575,29576],{"class":5082},"systemctl",[162,29578,29579],{"class":179}," status",[162,29581,29582],{"class":179}," docker\n",[25089,29584,29586,29563],{"id":29585},"_222启动-docker-服务",[3453,29587,29588],{},"2.2.2.启动 Docker 服务",[19,29590,29591],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[153,29593,29595],{"className":26913,"code":29594,"language":26915,"meta":158,"style":158},"sudo systemctl start docker\n",[71,29596,29597],{"__ignoreMap":158},[162,29598,29599,29601,29604,29606],{"class":164,"line":165},[162,29600,27668],{"class":5082},[162,29602,29603],{"class":179}," systemctl",[162,29605,7296],{"class":179},[162,29607,29582],{"class":179},[25089,29609,29611,29563],{"id":29610},"_223设置-docker-开机自启",[3453,29612,29613],{},"2.2.3.设置 Docker 开机自启",[19,29615,29616],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[153,29618,29620],{"className":26913,"code":29619,"language":26915,"meta":158,"style":158},"sudo systemctl enable docker\n",[71,29621,29622],{"__ignoreMap":158},[162,29623,29624,29626,29628,29631],{"class":164,"line":165},[162,29625,27668],{"class":5082},[162,29627,29603],{"class":179},[162,29629,29630],{"class":179}," enable",[162,29632,29582],{"class":179},[25089,29634,29636,16889,29639,16889,29644,29563],{"id":29635},"_224将用户添加到-docker-组",[3453,29637,29638],{},"2.2.4.将用户添加到",[3453,29640,29641],{},[71,29642,29643],{},"docker",[3453,29645,29646],{},"组",[19,29648,29649,29650,29652],{},"使用以下命令将当前用户添加到 ",[71,29651,29643],{}," 组：",[153,29654,29656],{"className":26913,"code":29655,"language":26915,"meta":158,"style":158},"sudo usermod -aG docker $USER\n",[71,29657,29658],{"__ignoreMap":158},[162,29659,29660,29662,29665,29668,29670],{"class":164,"line":165},[162,29661,27668],{"class":5082},[162,29663,29664],{"class":179}," usermod",[162,29666,29667],{"class":207}," -aG",[162,29669,29410],{"class":179},[162,29671,29672],{"class":168}," $USER\n",[25089,29674,29676,29563],{"id":29675},"_225退出并重新登录",[3453,29677,29678],{},"2.2.5.退出并重新登录",[19,29680,29681],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[153,29683,29685],{"className":26913,"code":29684,"language":26915,"meta":158,"style":158},"newgrp docker\n",[71,29686,29687],{"__ignoreMap":158},[162,29688,29689,29692],{"class":164,"line":165},[162,29690,29691],{"class":5082},"newgrp",[162,29693,29582],{"class":179},[25089,29695,29697,29563],{"id":29696},"_226重新启动-docker-服务如果需要",[3453,29698,29699],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,29701,29702],{},"确保 Docker 服务正在运行，可以使用以下命令：",[153,29704,29705],{"className":26913,"code":29594,"language":26915,"meta":158,"style":158},[71,29706,29707],{"__ignoreMap":158},[162,29708,29709,29711,29713,29715],{"class":164,"line":165},[162,29710,27668],{"class":5082},[162,29712,29603],{"class":179},[162,29714,7296],{"class":179},[162,29716,29582],{"class":179},[25089,29718,29720,29563],{"id":29719},"_227重启电脑后检查-docker-服务状态",[3453,29721,29722],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,29724,29725],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[153,29727,29729],{"className":26913,"code":29728,"language":26915,"meta":158,"style":158},"sudo reboot\nsystemctl status docker\n",[71,29730,29731,29738],{"__ignoreMap":158},[162,29732,29733,29735],{"class":164,"line":165},[162,29734,27668],{"class":5082},[162,29736,29737],{"class":179}," reboot\n",[162,29739,29740,29742,29744],{"class":164,"line":197},[162,29741,29576],{"class":5082},[162,29743,29579],{"class":179},[162,29745,29582],{"class":179},[19,29747,29748],{},[4602,29749],{"alt":158,"src":29750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,29752,29753],{},"第三行显示enabled说明开机自启动成功",[19,29755,29756],{},"按q退出",[3284,29758,29760],{"id":29759},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,29762,29763],{},"优先使用linux来使用docker是比较好的",[19,29765,29766],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,29768,29769],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,29771,29772,29773],{},"官方下载安装:",[3538,29774,29775],{"href":29775,"rel":29776},"https:\u002F\u002Fwww.docker.com\u002F",[26956],[19,29778,29779],{},"Windows的Docker显卡直通与USB直通:",[19,29781,29782],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,29784,29785],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,29787,29788],{},[4602,29789],{"alt":158,"src":29790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,29792,29793],{},[4602,29794],{"alt":158,"src":29795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,29797,29798],{},[4602,29799],{"alt":158,"src":29800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[3219,29802,29803],{},"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":158,"searchDepth":197,"depth":197,"links":29805},[29806,29807,29808],{"id":29084,"depth":228,"text":29085},{"id":29555,"depth":228,"text":29556},{"id":29759,"depth":228,"text":29760},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":29076,"description":158},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":29815,"title":29816,"body":29817,"description":29824,"extension":3242,"meta":30517,"navigation":300,"path":30518,"seo":30519,"stem":30520,"__hash__":30521},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":29818,"toc":30511},[29819,29822,29825,29829,29834,29839,29842,29870,29875,29884,29887,29892,29896,29903,29908,29914,29918,29921,29925,29930,30022,30027,30045,30050,30071,30076,30092,30096,30101,30130,30135,30181,30186,30230,30238,30255,30260,30276,30281,30295,30298,30301,30304,30307,30336,30339,30344,30348,30351,30354,30360,30363,30366,30369,30431,30438,30443,30446,30464,30468,30471,30488,30491,30494,30508],[10,29820,29816],{"id":29821},"_3docker直通",[19,29823,29824],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[3284,29826,29828],{"id":29827},"_31usb直通","3.1.USB直通",[19,29830,29831],{},[4602,29832],{"alt":158,"src":29833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[1452,29835,29836],{},[1455,29837,29838],{},"方法一(不是很推荐新手)：",[19,29840,29841],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[153,29843,29845],{"className":26913,"code":29844,"language":26915,"meta":158,"style":158},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[71,29846,29847,29855,29860],{"__ignoreMap":158},[162,29848,29849,29852],{"class":164,"line":165},[162,29850,29851],{"class":5082},"ls",[162,29853,29854],{"class":179}," \u002Fdev\n",[162,29856,29857],{"class":164,"line":197},[162,29858,29859],{"class":361},"#例如\n",[162,29861,29862,29865,29867],{"class":164,"line":228},[162,29863,29864],{"class":168},"--device",[162,29866,173],{"class":172},[162,29868,29869],{"class":179},"\u002Fdev\u002Ftty_USB0\n",[1452,29871,29872],{"start":197},[1455,29873,29874],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[153,29876,29878],{"className":26913,"code":29877,"language":26915,"meta":158,"style":158},"--privileged\n",[71,29879,29880],{"__ignoreMap":158},[162,29881,29882],{"class":164,"line":165},[162,29883,29877],{"class":5082},[19,29885,29886],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,29888,29889],{},[4602,29890],{"alt":158,"src":29891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[3284,29893,29895],{"id":29894},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,29897,29898,29899,29902],{},"NVIDIA Container Toolkit使用户 ",[3453,29900,29901],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,29904,29905],{},[4602,29906],{"alt":158,"src":29907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,29909,29910],{},[3538,29911,29912],{"href":29912,"rel":29913},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[26956],[25089,29915,29917],{"id":29916},"_321安装","3.2.1.安装",[19,29919,29920],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[26001,29922,29924],{"id":29923},"_3211ubuntu","3.2.1.1.Ubuntu",[1452,29926,29927],{},[1455,29928,29929],{},"配置存储库 并更新",[153,29931,29933],{"className":26913,"code":29932,"language":26915,"meta":158,"style":158},"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",[71,29934,29935,29964,29984,29996,30008,30014],{"__ignoreMap":158},[162,29936,29937,29940,29943,29946,29948,29950,29953,29956,29959,29962],{"class":164,"line":165},[162,29938,29939],{"class":5082},"curl",[162,29941,29942],{"class":207}," -fsSL",[162,29944,29945],{"class":179}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[162,29947,28201],{"class":172},[162,29949,29163],{"class":5082},[162,29951,29952],{"class":179}," gpg",[162,29954,29955],{"class":207}," --dearmor",[162,29957,29958],{"class":207}," -o",[162,29960,29961],{"class":179}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[162,29963,27770],{"class":207},[162,29965,29966,29969,29971,29974,29977,29980,29982],{"class":164,"line":197},[162,29967,29968],{"class":168},"  && ",[162,29970,29939],{"class":5082},[162,29972,29973],{"class":207}," -s",[162,29975,29976],{"class":207}," -L",[162,29978,29979],{"class":179}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[162,29981,28201],{"class":172},[162,29983,27770],{"class":207},[162,29985,29986,29989,29992,29994],{"class":164,"line":228},[162,29987,29988],{"class":5082},"    sed",[162,29990,29991],{"class":179}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[162,29993,28201],{"class":172},[162,29995,27770],{"class":207},[162,29997,29998,30001,30003,30006],{"class":164,"line":252},[162,29999,30000],{"class":5082},"    sudo",[162,30002,29306],{"class":179},[162,30004,30005],{"class":179}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[162,30007,27770],{"class":207},[162,30009,30010,30012],{"class":164,"line":328},[162,30011,29968],{"class":168},[162,30013,29265],{"class":207},[162,30015,30016,30018,30020],{"class":164,"line":466},[162,30017,30000],{"class":5082},[162,30019,29166],{"class":179},[162,30021,29332],{"class":179},[1452,30023,30024],{"start":197},[1455,30025,30026],{},"安装nvidia-docker2",[153,30028,30030],{"className":26913,"code":30029,"language":26915,"meta":158,"style":158},"sudo apt-get install -y nvidia-docker2\n",[71,30031,30032],{"__ignoreMap":158},[162,30033,30034,30036,30038,30040,30042],{"class":164,"line":165},[162,30035,27668],{"class":5082},[162,30037,29166],{"class":179},[162,30039,26925],{"class":179},[162,30041,29490],{"class":207},[162,30043,30044],{"class":179}," nvidia-docker2\n",[1452,30046,30047],{"start":228},[1455,30048,30049],{},"使用nvidia-ctk命令配置container runtime",[153,30051,30053],{"className":26913,"code":30052,"language":26915,"meta":158,"style":158},"sudo nvidia-ctk runtime configure --runtime=docker\n",[71,30054,30055],{"__ignoreMap":158},[162,30056,30057,30059,30062,30065,30068],{"class":164,"line":165},[162,30058,27668],{"class":5082},[162,30060,30061],{"class":179}," nvidia-ctk",[162,30063,30064],{"class":179}," runtime",[162,30066,30067],{"class":179}," configure",[162,30069,30070],{"class":207}," --runtime=docker\n",[1452,30072,30073],{"start":252},[1455,30074,30075],{},"重启docker服务:",[153,30077,30079],{"className":26913,"code":30078,"language":26915,"meta":158,"style":158},"sudo systemctl restart docker\n",[71,30080,30081],{"__ignoreMap":158},[162,30082,30083,30085,30087,30090],{"class":164,"line":165},[162,30084,27668],{"class":5082},[162,30086,29603],{"class":179},[162,30088,30089],{"class":179}," restart",[162,30091,29582],{"class":179},[26001,30093,30095],{"id":30094},"_3212fedora","3.2.1.2.Fedora",[1452,30097,30098],{},[1455,30099,30100],{},"配置存储库",[153,30102,30104],{"className":26913,"code":30103,"language":26915,"meta":158,"style":158},"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",[71,30105,30106,30121],{"__ignoreMap":158},[162,30107,30108,30110,30112,30114,30117,30119],{"class":164,"line":165},[162,30109,29939],{"class":5082},[162,30111,29973],{"class":207},[162,30113,29976],{"class":207},[162,30115,30116],{"class":179}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[162,30118,28201],{"class":172},[162,30120,27770],{"class":207},[162,30122,30123,30125,30127],{"class":164,"line":197},[162,30124,27668],{"class":5082},[162,30126,29306],{"class":179},[162,30128,30129],{"class":179}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[1452,30131,30132],{"start":197},[1455,30133,30134],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[153,30136,30138],{"className":26913,"code":30137,"language":26915,"meta":158,"style":158},"# 如果是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",[71,30139,30140,30145,30159,30163,30168],{"__ignoreMap":158},[162,30141,30142],{"class":164,"line":165},[162,30143,30144],{"class":361},"# 如果是RHEL或者Rocky（DNF4）\n",[162,30146,30147,30149,30151,30153,30156],{"class":164,"line":197},[162,30148,27668],{"class":5082},[162,30150,29405],{"class":179},[162,30152,29504],{"class":179},[162,30154,30155],{"class":207}," --add-repo",[162,30157,30158],{"class":179}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[162,30160,30161],{"class":164,"line":228},[162,30162,301],{"emptyLinePlaceholder":300},[162,30164,30165],{"class":164,"line":252},[162,30166,30167],{"class":361},"# 如果是Feodra41+（DNF5）\n",[162,30169,30170,30172,30174,30176,30178],{"class":164,"line":328},[162,30171,27668],{"class":5082},[162,30173,29405],{"class":179},[162,30175,29504],{"class":179},[162,30177,29507],{"class":179},[162,30179,30180],{"class":207}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[1452,30182,30183],{"start":228},[1455,30184,30185],{},"安装NVIDIA Container Toolki包",[153,30187,30189],{"className":26913,"code":30188,"language":26915,"meta":158,"style":158},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[71,30190,30191,30196,30209,30213,30218],{"__ignoreMap":158},[162,30192,30193],{"class":164,"line":165},[162,30194,30195],{"class":361},"# 如果是RHEL或者Rocky\n",[162,30197,30198,30200,30202,30204,30206],{"class":164,"line":197},[162,30199,27668],{"class":5082},[162,30201,29405],{"class":179},[162,30203,26925],{"class":179},[162,30205,29490],{"class":207},[162,30207,30208],{"class":179}," nvidia-container-toolkit\n",[162,30210,30211],{"class":164,"line":228},[162,30212,301],{"emptyLinePlaceholder":300},[162,30214,30215],{"class":164,"line":252},[162,30216,30217],{"class":361},"# 如果是Fedora\n",[162,30219,30220,30222,30224,30226,30228],{"class":164,"line":328},[162,30221,27668],{"class":5082},[162,30223,29405],{"class":179},[162,30225,26925],{"class":179},[162,30227,29490],{"class":207},[162,30229,30208],{"class":179},[1452,30231,30232],{"start":252},[1455,30233,30234,30235,30237],{},"安装nvidia-docker2 ： 在Fedora上使用",[71,30236,29380],{},"进行安装",[153,30239,30241],{"className":26913,"code":30240,"language":26915,"meta":158,"style":158},"sudo dnf install -y nvidia-docker2\n",[71,30242,30243],{"__ignoreMap":158},[162,30244,30245,30247,30249,30251,30253],{"class":164,"line":165},[162,30246,27668],{"class":5082},[162,30248,29405],{"class":179},[162,30250,26925],{"class":179},[162,30252,29490],{"class":207},[162,30254,30044],{"class":179},[1452,30256,30257],{"start":328},[1455,30258,30259],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[153,30261,30262],{"className":26913,"code":30052,"language":26915,"meta":158,"style":158},[71,30263,30264],{"__ignoreMap":158},[162,30265,30266,30268,30270,30272,30274],{"class":164,"line":165},[162,30267,27668],{"class":5082},[162,30269,30061],{"class":179},[162,30271,30064],{"class":179},[162,30273,30067],{"class":179},[162,30275,30070],{"class":207},[1452,30277,30278],{"start":466},[1455,30279,30280],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[153,30282,30283],{"className":26913,"code":30078,"language":26915,"meta":158,"style":158},[71,30284,30285],{"__ignoreMap":158},[162,30286,30287,30289,30291,30293],{"class":164,"line":165},[162,30288,27668],{"class":5082},[162,30290,29603],{"class":179},[162,30292,30089],{"class":179},[162,30294,29582],{"class":179},[19,30296,30297],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,30299,30300],{},"方法：",[19,30302,30303],{},"1️⃣nvidia-smi",[19,30305,30306],{},"2️⃣运行nvidia cuda 容器进行测试",[153,30308,30310],{"className":26913,"code":30309,"language":26915,"meta":158,"style":158},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[71,30311,30312],{"__ignoreMap":158},[162,30313,30314,30316,30318,30321,30324,30327,30330,30333],{"class":164,"line":165},[162,30315,27668],{"class":5082},[162,30317,29410],{"class":179},[162,30319,30320],{"class":179}," run",[162,30322,30323],{"class":207}," --rm",[162,30325,30326],{"class":207}," --gpus",[162,30328,30329],{"class":179}," all",[162,30331,30332],{"class":179}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[162,30334,30335],{"class":179}," nvidia-smi\n",[19,30337,30338],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,30340,30341],{},[4602,30342],{"alt":158,"src":30343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[3284,30345,30347],{"id":30346},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,30349,30350],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,30352,30353],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,30355,30356],{},[3538,30357,30358],{"href":30358,"rel":30359},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[26956],[19,30361,30362],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,30364,30365],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,30367,30368],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[26,30370,30371,30387],{},[29,30372,30373],{},[32,30374,30375,30378,30381,30384],{},[35,30376,30377],{"align":26827},"镜像类型",[35,30379,30380],{"align":26827},"适用场景",[35,30382,30383],{"align":26827},"示例标签",[35,30385,30386],{"align":26827},"大小",[51,30388,30389,30403,30417],{},[32,30390,30391,30394,30397,30400],{},[56,30392,30393],{"align":26827},"base",[56,30395,30396],{"align":26827},"仅需 CUDA 运行时库",[56,30398,30399],{"align":26827},"12.4.0-base-ubuntu22.04",[56,30401,30402],{"align":26827},"~240MB",[32,30404,30405,30408,30411,30414],{},[56,30406,30407],{"align":26827},"runtime",[56,30409,30410],{"align":26827},"部署编译后的应用（含数学库）",[56,30412,30413],{"align":26827},"12.4.0-runtime-ubuntu22.04",[56,30415,30416],{"align":26827},"~2GB",[32,30418,30419,30422,30425,30428],{},[56,30420,30421],{"align":26827},"devel",[56,30423,30424],{"align":26827},"开发环境（含编译工具）",[56,30426,30427],{"align":26827},"12.4.0-devel-ubuntu22.04",[56,30429,30430],{"align":26827},"~3GB",[19,30432,30433,30434,30437],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[71,30435,30436],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,30439,30440],{},[4602,30441],{"alt":158,"src":30442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,30444,30445],{},"在dockerfile里就可以开头这么写：",[153,30447,30449],{"className":26913,"code":30448,"language":26915,"meta":158,"style":158},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[71,30450,30451,30456],{"__ignoreMap":158},[162,30452,30453],{"class":164,"line":165},[162,30454,30455],{"class":361},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[162,30457,30458,30461],{"class":164,"line":197},[162,30459,30460],{"class":5082},"FROM",[162,30462,30463],{"class":179}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[3284,30465,30467],{"id":30466},"_34配置以太网","3.4.配置以太网",[19,30469,30470],{},"指定网络模式",[153,30472,30474],{"className":26913,"code":30473,"language":26915,"meta":158,"style":158},"--net=host \\\n",[71,30475,30476],{"__ignoreMap":158},[162,30477,30478,30481,30483,30486],{"class":164,"line":165},[162,30479,30480],{"class":168},"--net",[162,30482,173],{"class":172},[162,30484,30485],{"class":179},"host",[162,30487,27770],{"class":5082},[19,30489,30490],{},"启动参数里加上这行即可。具体在下方",[19,30492,30493],{},"--net选项：指定网络模式，该选项有以下参数可选：",[4279,30495,30496,30499,30502,30505],{},[1455,30497,30498],{},"--net=bridge:默认选项，表示连接到默认的网桥",[1455,30500,30501],{},"--net=host:容器使用宿主机的网络",[1455,30503,30504],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[1455,30506,30507],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[3219,30509,30510],{},"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":158,"searchDepth":197,"depth":197,"links":30512},[30513,30514,30515,30516],{"id":29827,"depth":228,"text":29828},{"id":29894,"depth":228,"text":29895},{"id":30346,"depth":228,"text":30347},{"id":30466,"depth":228,"text":30467},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":29816,"description":29824},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":30523,"title":30524,"body":30525,"description":30532,"extension":3242,"meta":30538,"navigation":300,"path":30539,"seo":30540,"stem":30541,"__hash__":30542},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":30526,"toc":30536},[30527,30530,30533],[10,30528,30524],{"id":30529},"_4dockerhub换源",[19,30531,30532],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,30534,30535],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":158,"searchDepth":197,"depth":197,"links":30537},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":30524,"description":30532},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":30544,"title":30545,"body":30546,"description":158,"extension":3242,"meta":31556,"navigation":300,"path":31557,"seo":31558,"stem":31559,"__hash__":31560},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":30547,"toc":31551},[30548,30551,30555,30561,30565,30568,30907,30910,30913,30916,30921,30926,30929,30932,30935,30938,30957,30960,30971,30977,31159,31169,31185,31448,31450,31474,31489,31498,31548],[10,30549,30545],{"id":30550},"_5docker命令学习",[3284,30552,30554],{"id":30553},"_51参考文档","5.1.参考文档",[19,30556,30557],{},[3538,30558,30559],{"href":30559,"rel":30560},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[26956],[3284,30562,30564],{"id":30563},"_52常用命令","5.2.常用命令",[19,30566,30567],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[26,30569,30570,30582],{},[29,30571,30572],{},[32,30573,30574,30577,30580],{},[35,30575,30576],{"align":26827},"命令",[35,30578,30579],{"align":26827},"描述",[35,30581,49],{"align":26827},[51,30583,30584,30595,30606,30617,30628,30639,30650,30661,30671,30682,30693,30704,30714,30725,30736,30747,30757,30767,30777,30787,30798,30809,30820,30831,30842,30853,30863,30874,30885,30896],{},[32,30585,30586,30589,30592],{},[56,30587,30588],{"align":26827},"docker run",[56,30590,30591],{"align":26827},"创建并启动一个新的容器。",[56,30593,30594],{"align":26827},"docker run -it ubuntu bash",[32,30596,30597,30600,30603],{},[56,30598,30599],{"align":26827},"docker build",[56,30601,30602],{"align":26827},"通过指定的 Dockerfile 创建一个新的镜像。",[56,30604,30605],{"align":26827},"docker build -t myimage .",[32,30607,30608,30611,30614],{},[56,30609,30610],{"align":26827},"docker pull",[56,30612,30613],{"align":26827},"从 Docker 仓库拉取镜像。",[56,30615,30616],{"align":26827},"docker pull ubuntu",[32,30618,30619,30622,30625],{},[56,30620,30621],{"align":26827},"docker push",[56,30623,30624],{"align":26827},"将本地镜像推送到 Docker 仓库。",[56,30626,30627],{"align":26827},"docker push myimage",[32,30629,30630,30633,30636],{},[56,30631,30632],{"align":26827},"docker stop",[56,30634,30635],{"align":26827},"停止一个正在运行的容器。",[56,30637,30638],{"align":26827},"docker stop container_id",[32,30640,30641,30644,30647],{},[56,30642,30643],{"align":26827},"docker start",[56,30645,30646],{"align":26827},"启动一个已经存在的容器。",[56,30648,30649],{"align":26827},"docker start container_id",[32,30651,30652,30655,30658],{},[56,30653,30654],{"align":26827},"docker restart",[56,30656,30657],{"align":26827},"重新启动容器。",[56,30659,30660],{"align":26827},"docker restart container_id",[32,30662,30663,30666,30669],{},[56,30664,30665],{"align":26827},"docker ps",[56,30667,30668],{"align":26827},"列出当前正在运行的容器。",[56,30670,30665],{"align":26827},[32,30672,30673,30676,30679],{},[56,30674,30675],{"align":26827},"docker rm",[56,30677,30678],{"align":26827},"删除一个或多个停止的容器。",[56,30680,30681],{"align":26827},"docker rm container_id",[32,30683,30684,30687,30690],{},[56,30685,30686],{"align":26827},"docker exec",[56,30688,30689],{"align":26827},"在一个正在运行的容器中执行命令。",[56,30691,30692],{"align":26827},"docker exec -it container_id bash",[32,30694,30695,30698,30701],{},[56,30696,30697],{"align":26827},"docker logs",[56,30699,30700],{"align":26827},"查看容器的日志输出。",[56,30702,30703],{"align":26827},"docker logs container_id",[32,30705,30706,30709,30712],{},[56,30707,30708],{"align":26827},"docker images",[56,30710,30711],{"align":26827},"列出本地所有镜像。",[56,30713,30708],{"align":26827},[32,30715,30716,30719,30722],{},[56,30717,30718],{"align":26827},"docker rmi",[56,30720,30721],{"align":26827},"删除一个或多个镜像。",[56,30723,30724],{"align":26827},"docker rmi myimage",[32,30726,30727,30730,30733],{},[56,30728,30729],{"align":26827},"docker network",[56,30731,30732],{"align":26827},"管理 Docker 网络。",[56,30734,30735],{"align":26827},"docker network ls",[32,30737,30738,30741,30744],{},[56,30739,30740],{"align":26827},"docker volume",[56,30742,30743],{"align":26827},"管理 Docker 数据卷。",[56,30745,30746],{"align":26827},"docker volume ls",[32,30748,30749,30752,30755],{},[56,30750,30751],{"align":26827},"docker-compose up",[56,30753,30754],{"align":26827},"启动 docker-compose.yml 中定义的所有服务。",[56,30756,30751],{"align":26827},[32,30758,30759,30762,30765],{},[56,30760,30761],{"align":26827},"docker-compose down",[56,30763,30764],{"align":26827},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[56,30766,30761],{"align":26827},[32,30768,30769,30772,30775],{},[56,30770,30771],{"align":26827},"docker info",[56,30773,30774],{"align":26827},"显示 Docker 系统的详细信息。",[56,30776,30771],{"align":26827},[32,30778,30779,30782,30785],{},[56,30780,30781],{"align":26827},"docker stats",[56,30783,30784],{"align":26827},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[56,30786,30781],{"align":26827},[32,30788,30789,30792,30795],{},[56,30790,30791],{"align":26827},"docker inspect",[56,30793,30794],{"align":26827},"查看容器或镜像的详细信息（JSON 格式）。",[56,30796,30797],{"align":26827},"docker inspect container_id",[32,30799,30800,30803,30806],{},[56,30801,30802],{"align":26827},"docker save",[56,30804,30805],{"align":26827},"将一个镜像保存为 tar 文件。",[56,30807,30808],{"align":26827},"docker save -o myimage.tar myimage",[32,30810,30811,30814,30817],{},[56,30812,30813],{"align":26827},"docker load",[56,30815,30816],{"align":26827},"从 tar 文件中加载镜像。",[56,30818,30819],{"align":26827},"docker load -i myimage.tar",[32,30821,30822,30825,30828],{},[56,30823,30824],{"align":26827},"docker tag",[56,30826,30827],{"align":26827},"为镜像添加标签（tag）。",[56,30829,30830],{"align":26827},"docker tag myimage myimage:v1",[32,30832,30833,30836,30839],{},[56,30834,30835],{"align":26827},"docker buildx build",[56,30837,30838],{"align":26827},"使用 Buildx 构建多架构镜像。",[56,30840,30841],{"align":26827},"docker buildx build -t myimage .",[32,30843,30844,30847,30850],{},[56,30845,30846],{"align":26827},"docker buildx create",[56,30848,30849],{"align":26827},"创建一个新的 Buildx 构建实例。",[56,30851,30852],{"align":26827},"docker buildx create –use",[32,30854,30855,30858,30861],{},[56,30856,30857],{"align":26827},"docker buildx ls",[56,30859,30860],{"align":26827},"列出所有可用的 Buildx 构建实例。",[56,30862,30857],{"align":26827},[32,30864,30865,30868,30871],{},[56,30866,30867],{"align":26827},"docker buildx use",[56,30869,30870],{"align":26827},"设置当前的 Buildx 构建实例。",[56,30872,30873],{"align":26827},"docker buildx use mybuilder",[32,30875,30876,30879,30882],{},[56,30877,30878],{"align":26827},"docker buildx bake",[56,30880,30881],{"align":26827},"使用 Bake 文件批量构建镜像。",[56,30883,30884],{"align":26827},"docker buildx bake -f bake.hcl",[32,30886,30887,30890,30893],{},[56,30888,30889],{"align":26827},"docker buildx build –push",[56,30891,30892],{"align":26827},"构建镜像并推送到镜像仓库。",[56,30894,30895],{"align":26827},"docker buildx build –push -t myimage .",[32,30897,30898,30901,30904],{},[56,30899,30900],{"align":26827},"docker buildx build –platform",[56,30902,30903],{"align":26827},"构建镜像并为多个平台生成支持。",[56,30905,30906],{"align":26827},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,30908,30909],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,30911,30912],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,30914,30915],{},"docker images 可以查看已经下载的镜像",[19,30917,30918],{},[4602,30919],{"alt":158,"src":30920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,30922,30923],{},[3453,30924,30925],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,30927,30928],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,30930,30931],{},"docker container logs 查看容器日志",[19,30933,30934],{},"docker top 查看容器里的进程",[19,30936,30937],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[153,30939,30941],{"className":26913,"code":30940,"language":26915,"meta":158,"style":158},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[71,30942,30943],{"__ignoreMap":158},[162,30944,30945,30948,30951,30954],{"class":164,"line":165},[162,30946,30947],{"class":5082},"如：docker",[162,30949,30950],{"class":179}," cp",[162,30952,30953],{"class":179}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[162,30955,30956],{"class":179}," \u002Fmydata\u002Fnginx\n",[19,30958,30959],{},"docker run时在启动容器的时候会有几个常用的选项：",[4279,30961,30962,30965,30968],{},[1455,30963,30964],{},"-d选项：表示后台运行",[1455,30966,30967],{},"-P选项：随机端口映射",[1455,30969,30970],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[3284,30972,30974],{"id":30973},"_53run命令的参数非常重要",[3453,30975,30976],{},"5.3.run命令的参数（非常重要）",[26,30978,30979,30992],{},[29,30980,30981],{},[32,30982,30983,30986,30989],{},[35,30984,30985],{"align":26827},"参数\u002F配置",[35,30987,30988],{"align":26827},"功能说明",[35,30990,30991],{"align":26827},"重要性与参考依据",[51,30993,30994,31005,31016,31027,31038,31049,31060,31071,31082,31093,31104,31115,31126,31137,31148],{},[32,30995,30996,30999,31002],{},[56,30997,30998],{"align":26827},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[56,31000,31001],{"align":26827},"指定容器名称，便于后续管理",[56,31003,31004],{"align":26827},"替代随机生成的容器名。",[32,31006,31007,31010,31013],{},[56,31008,31009],{"align":26827},"–gpus all",[56,31011,31012],{"align":26827},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[56,31014,31015],{"align":26827},"用于CUDA加速等GPU依赖任务。",[32,31017,31018,31021,31024],{},[56,31019,31020],{"align":26827},"-e NVIDIA_DRIVER_CAPABILITIES=all",[56,31022,31023],{"align":26827},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[56,31025,31026],{"align":26827},"确保容器内GPU功能完整67。",[32,31028,31029,31032,31035],{},[56,31030,31031],{"align":26827},"-dit",[56,31033,31034],{"align":26827},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[56,31036,31037],{"align":26827},"允许容器在后台运行并支持交互操作。",[32,31039,31040,31043,31046],{},[56,31041,31042],{"align":26827},"–privileged",[56,31044,31045],{"align":26827},"赋予容器完全主机权限（可访问设备、内核模块等）",[56,31047,31048],{"align":26827},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[32,31050,31051,31054,31057],{},[56,31052,31053],{"align":26827},"–net=host",[56,31055,31056],{"align":26827},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[56,31058,31059],{"align":26827},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[32,31061,31062,31065,31068],{},[56,31063,31064],{"align":26827},"–group-add audio–group-add video–group-add dialout",[56,31066,31067],{"align":26827},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[56,31069,31070],{"align":26827},"避免权限问题（如避免无法调用摄像头、麦克风）。",[32,31072,31073,31076,31079],{},[56,31074,31075],{"align":26827},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[56,31077,31078],{"align":26827},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[56,31080,31081],{"align":26827},"支持容器内运行图形界面应用（如OpenCV可视化）。",[32,31083,31084,31087,31090],{},[56,31085,31086],{"align":26827},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[56,31088,31089],{"align":26827},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[56,31091,31092],{"align":26827},"实现容器内图形显示。",[32,31094,31095,31098,31101],{},[56,31096,31097],{"align":26827},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[56,31099,31100],{"align":26827},"挂载X11认证文件（只读）",[56,31102,31103],{"align":26827},"确保容器有权连接宿主机显示服务。",[32,31105,31106,31109,31112],{},[56,31107,31108],{"align":26827},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[56,31110,31111],{"align":26827},"挂载Wayland显示协议相关目录",[56,31113,31114],{"align":26827},"支持Wayland协议的图形显示。",[32,31116,31117,31120,31123],{},[56,31118,31119],{"align":26827},"–ulimit nofile=1024:524288",[56,31121,31122],{"align":26827},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[56,31124,31125],{"align":26827},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[32,31127,31128,31131,31134],{},[56,31129,31130],{"align":26827},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[56,31132,31133],{"align":26827},"挂载宿主机用户目录到容器内同名路径",[56,31135,31136],{"align":26827},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[32,31138,31139,31142,31145],{},[56,31140,31141],{"align":26827},"-w \u002Fhome\u002Ftungchiahui",[56,31143,31144],{"align":26827},"设置容器启动后的默认工作目录",[56,31146,31147],{"align":26827},"直接进入项目路径，方便执行命令2324。",[32,31149,31150,31153,31156],{},[56,31151,31152],{"align":26827},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[56,31154,31155],{"align":26827},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[56,31157,31158],{"align":26827},"提供预配置的深度学习与机器人开发环境。",[19,31160,31161,31162,31164,31165,31168],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[71,31163,27668],{},"加不加",[71,31166,31167],{},"sudo -E","都无所谓。",[19,31170,31171,31172,31174,31175,31177,31178,31181,31182,31184],{},"用户已经被加到docker组了，不用",[71,31173,27668],{},"也行跑，其次，",[71,31176,27668],{},"运行的话，你的",[71,31179,31180],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[71,31183,31180],{},"更不可能变了。",[153,31186,31188],{"className":26913,"code":31187,"language":26915,"meta":158,"style":158},"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",[71,31189,31190,31203,31213,31223,31235,31242,31249,31256,31266,31275,31284,31298,31310,31322,31331,31341,31350,31365,31398,31425,31436,31443],{"__ignoreMap":158},[162,31191,31192,31194,31196,31198,31201],{"class":164,"line":165},[162,31193,27668],{"class":5082},[162,31195,29410],{"class":179},[162,31197,30320],{"class":179},[162,31199,31200],{"class":207}," --name=ros_opencv_cuda",[162,31202,27770],{"class":207},[162,31204,31205,31208,31211],{"class":164,"line":197},[162,31206,31207],{"class":168},"--gpus ",[162,31209,31210],{"class":179},"all",[162,31212,27770],{"class":207},[162,31214,31215,31218,31221],{"class":164,"line":228},[162,31216,31217],{"class":168},"-e ",[162,31219,31220],{"class":179},"NVIDIA_DRIVER_CAPABILITIES=all",[162,31222,27770],{"class":207},[162,31224,31225,31227,31230,31233],{"class":164,"line":252},[162,31226,31217],{"class":168},[162,31228,31229],{"class":179},"DISPLAY=",[162,31231,31232],{"class":168},"$DISPLAY ",[162,31234,29265],{"class":207},[162,31236,31237,31240],{"class":164,"line":328},[162,31238,31239],{"class":168},"-dit ",[162,31241,29265],{"class":207},[162,31243,31244,31247],{"class":164,"line":466},[162,31245,31246],{"class":168},"--privileged ",[162,31248,29265],{"class":207},[162,31250,31251,31254],{"class":164,"line":471},[162,31252,31253],{"class":168},"--net=host ",[162,31255,29265],{"class":207},[162,31257,31258,31261,31264],{"class":164,"line":687},[162,31259,31260],{"class":168},"--group-add ",[162,31262,31263],{"class":179},"audio",[162,31265,27770],{"class":207},[162,31267,31268,31270,31273],{"class":164,"line":692},[162,31269,31260],{"class":168},[162,31271,31272],{"class":179},"video",[162,31274,27770],{"class":207},[162,31276,31277,31279,31282],{"class":164,"line":698},[162,31278,31260],{"class":168},[162,31280,31281],{"class":179},"dialout",[162,31283,27770],{"class":207},[162,31285,31286,31288,31291,31293,31296],{"class":164,"line":2955},[162,31287,31217],{"class":168},[162,31289,31290],{"class":179},"XAUTHORITY=",[162,31292,31180],{"class":168},[162,31294,31295],{"class":179},"\u002F.Xauthority",[162,31297,27770],{"class":207},[162,31299,31300,31302,31305,31308],{"class":164,"line":2960},[162,31301,31217],{"class":168},[162,31303,31304],{"class":179},"WAYLAND_DISPLAY=",[162,31306,31307],{"class":168},"$WAYLAND_DISPLAY ",[162,31309,29265],{"class":207},[162,31311,31312,31314,31317,31320],{"class":164,"line":2971},[162,31313,31217],{"class":168},[162,31315,31316],{"class":179},"XDG_RUNTIME_DIR=",[162,31318,31319],{"class":168},"$XDG_RUNTIME_DIR ",[162,31321,29265],{"class":207},[162,31323,31324,31326,31329],{"class":164,"line":2984},[162,31325,31217],{"class":168},[162,31327,31328],{"class":179},"QT_QPA_PLATFORM=xcb",[162,31330,27770],{"class":207},[162,31332,31333,31336,31339],{"class":164,"line":2989},[162,31334,31335],{"class":168},"-v ",[162,31337,31338],{"class":179},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[162,31340,27770],{"class":207},[162,31342,31343,31345,31348],{"class":164,"line":3011},[162,31344,31335],{"class":168},[162,31346,31347],{"class":179},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[162,31349,27770],{"class":207},[162,31351,31352,31355,31358,31360,31363],{"class":164,"line":3022},[162,31353,31354],{"class":168},"-v $HOME",[162,31356,31357],{"class":179},"\u002F.Xauthority:",[162,31359,31180],{"class":168},[162,31361,31362],{"class":179},"\u002F.Xauthority:ro",[162,31364,27770],{"class":207},[162,31366,31367,31369,31372,31374,31377,31380,31382,31385,31387,31389,31391,31393,31396],{"class":164,"line":3027},[162,31368,31335],{"class":168},[162,31370,31371],{"class":179},"\u002Frun\u002Fuser\u002F",[162,31373,28191],{"class":168},[162,31375,31376],{"class":5082},"id",[162,31378,31379],{"class":207}," -u",[162,31381,3720],{"class":168},[162,31383,31384],{"class":179},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[162,31386,28191],{"class":168},[162,31388,31376],{"class":5082},[162,31390,31379],{"class":207},[162,31392,3720],{"class":168},[162,31394,31395],{"class":179},"\u002Fwayland-0",[162,31397,27770],{"class":207},[162,31399,31400,31402,31404,31406,31408,31410,31412,31415,31417,31419,31421,31423],{"class":164,"line":3046},[162,31401,31335],{"class":168},[162,31403,31371],{"class":179},[162,31405,28191],{"class":168},[162,31407,31376],{"class":5082},[162,31409,31379],{"class":207},[162,31411,3720],{"class":168},[162,31413,31414],{"class":179},":\u002Frun\u002Fuser\u002F",[162,31416,28191],{"class":168},[162,31418,31376],{"class":5082},[162,31420,31379],{"class":207},[162,31422,1823],{"class":168},[162,31424,29265],{"class":207},[162,31426,31427,31429,31431,31434],{"class":164,"line":3052},[162,31428,31354],{"class":168},[162,31430,1332],{"class":179},[162,31432,31433],{"class":168},"$HOME ",[162,31435,29265],{"class":207},[162,31437,31438,31441],{"class":164,"line":3057},[162,31439,31440],{"class":168},"-w $HOME ",[162,31442,29265],{"class":207},[162,31444,31445],{"class":164,"line":3072},[162,31446,31447],{"class":168},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,31449,1529],{},[1452,31451,31452,31460,31463,31466],{},[1455,31453,31454,16889,31456,31459],{},[71,31455,31220],{},[71,31457,31458],{},"--gpus all","没有英伟达显卡请注释。",[1455,31461,31462],{},"--name后面请自己为容器起名。",[1455,31464,31465],{},"最后一行仓库名称请你自己找对应的镜像填上。",[1455,31467,31468,31469,3183],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[26644,31470,31471],{},[3453,31472,31473],{},"请不要加",[153,31475,31477],{"className":26913,"code":31476,"language":26915,"meta":158,"style":158},"--ulimit nofile=1024:524288 \\\n",[71,31478,31479],{"__ignoreMap":158},[162,31480,31481,31484,31487],{"class":164,"line":165},[162,31482,31483],{"class":5082},"--ulimit",[162,31485,31486],{"class":179}," nofile=1024:524288",[162,31488,27770],{"class":207},[19,31490,31491,31492,31497],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[26644,31493,31494],{},[3453,31495,31496],{},"不建议","**.**",[153,31499,31501],{"className":26913,"code":31500,"language":26915,"meta":158,"style":158},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[71,31502,31503,31530,31539],{"__ignoreMap":158},[162,31504,31505,31508,31511,31513,31515,31517,31519,31521,31523,31526,31528],{"class":164,"line":165},[162,31506,31507],{"class":5082},"--user",[162,31509,31510],{"class":168}," $(",[162,31512,31376],{"class":5082},[162,31514,31379],{"class":207},[162,31516,3720],{"class":168},[162,31518,1332],{"class":179},[162,31520,28191],{"class":168},[162,31522,31376],{"class":5082},[162,31524,31525],{"class":207}," -g",[162,31527,1823],{"class":168},[162,31529,29265],{"class":207},[162,31531,31532,31534,31537],{"class":164,"line":197},[162,31533,31335],{"class":168},[162,31535,31536],{"class":179},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[162,31538,27770],{"class":207},[162,31540,31541,31543,31546],{"class":164,"line":228},[162,31542,31335],{"class":168},[162,31544,31545],{"class":179},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[162,31547,27770],{"class":207},[3219,31549,31550],{},"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":158,"searchDepth":197,"depth":197,"links":31552},[31553,31554,31555],{"id":30553,"depth":228,"text":30554},{"id":30563,"depth":228,"text":30564},{"id":30973,"depth":228,"text":30976},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":30545,"description":158},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":31562,"title":31563,"body":31564,"description":158,"extension":3242,"meta":33187,"navigation":300,"path":33188,"seo":33189,"stem":33190,"__hash__":33191},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":31565,"toc":33182},[31566,31569,31573,31576,31798,31802,31806,31809,31915,31920,31923,31928,31931,31936,31939,31944,31947,31959,31962,31967,31974,32002,32009,32085,32090,32093,32116,32118,32193,32198,32201,32205,32213,32218,32223,32227,32238,32244,32247,32250,32274,32277,32280,32308,32311,32314,32779,32782,32787,32792,32796,32819,32824,32828,32832,32835,32838,32841,32868,32871,32874,32892,32895,32898,32920,32928,32933,32938,32942,32945,32948,32951,32954,32999,33002,33020,33023,33028,33031,33052,33055,33111,33114,33119,33123,33126,33133,33136,33139,33144,33147,33163,33166,33179],[10,31567,31563],{"id":31568},"_6手动创建docker镜像",[3284,31570,31572],{"id":31571},"_61dockerfile","6.1.DockerFile",[19,31574,31575],{},"常用命令：",[26,31577,31578,31589],{},[29,31579,31580],{},[32,31581,31582,31585,31587],{},[35,31583,31584],{"align":26827},"指令",[35,31586,28960],{"align":26827},[35,31588,49],{"align":26827},[51,31590,31591,31601,31617,31628,31639,31650,31661,31672,31683,31697,31711,31722,31736,31747,31758,31772,31787],{},[32,31592,31593,31595,31598],{},[56,31594,30460],{"align":26827},[56,31596,31597],{"align":26827},"指定基础镜像，是 Dockerfile 的起点",[56,31599,31600],{"align":26827},"FROM ubuntu:22.04",[32,31602,31603,31606,31609],{},[56,31604,31605],{"align":26827},"LABEL",[56,31607,31608],{"align":26827},"添加元数据（如作者、版本等）",[56,31610,31611,31612,31616],{"align":26827},"LABEL maintainer=”",[3538,31613,31615],{"href":31614},"mailto:you@example.com","you@example.com","”",[32,31618,31619,31622,31625],{},[56,31620,31621],{"align":26827},"ENV",[56,31623,31624],{"align":26827},"设置环境变量",[56,31626,31627],{"align":26827},"ENV PORT=8080",[32,31629,31630,31633,31636],{},[56,31631,31632],{"align":26827},"ARG",[56,31634,31635],{"align":26827},"构建参数，只在构建期间可用",[56,31637,31638],{"align":26827},"ARG VERSION=1.0",[32,31640,31641,31644,31647],{},[56,31642,31643],{"align":26827},"RUN",[56,31645,31646],{"align":26827},"构建镜像时运行命令",[56,31648,31649],{"align":26827},"RUN apt-get update && apt-get install -y curl",[32,31651,31652,31655,31658],{},[56,31653,31654],{"align":26827},"COPY",[56,31656,31657],{"align":26827},"复制文件到镜像中",[56,31659,31660],{"align":26827},"COPY . \u002Fapp",[32,31662,31663,31666,31669],{},[56,31664,31665],{"align":26827},"ADD",[56,31667,31668],{"align":26827},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[56,31670,31671],{"align":26827},"ADD archive.tar.gz \u002Fdata\u002F",[32,31673,31674,31677,31680],{},[56,31675,31676],{"align":26827},"WORKDIR",[56,31678,31679],{"align":26827},"设置工作目录",[56,31681,31682],{"align":26827},"WORKDIR \u002Fopt",[32,31684,31685,31688,31691],{},[56,31686,31687],{"align":26827},"CMD",[56,31689,31690],{"align":26827},"设置容器启动时默认命令（可被 docker run 覆盖）",[56,31692,31693,31694],{"align":26827},"CMD ",[162,31695,31696],{},"“node”, “index.js”",[32,31698,31699,31702,31705],{},[56,31700,31701],{"align":26827},"ENTRYPOINT",[56,31703,31704],{"align":26827},"设置容器启动时固定命令（通常用于 CLI 工具等）",[56,31706,31707,31708],{"align":26827},"ENTRYPOINT ",[162,31709,31710],{},"“python3”",[32,31712,31713,31716,31719],{},[56,31714,31715],{"align":26827},"EXPOSE",[56,31717,31718],{"align":26827},"声明镜像内服务监听的端口（不会自动映射）",[56,31720,31721],{"align":26827},"EXPOSE 80",[32,31723,31724,31727,31730],{},[56,31725,31726],{"align":26827},"VOLUME",[56,31728,31729],{"align":26827},"声明数据卷挂载点",[56,31731,31732,31733],{"align":26827},"VOLUME ",[162,31734,31735],{},"“\u002Fdata”",[32,31737,31738,31741,31744],{},[56,31739,31740],{"align":26827},"USER",[56,31742,31743],{"align":26827},"设置后续命令执行的用户",[56,31745,31746],{"align":26827},"USER appuser",[32,31748,31749,31752,31755],{},[56,31750,31751],{"align":26827},"ONBUILD",[56,31753,31754],{"align":26827},"当镜像作为其他镜像基础镜像时触发的构建指令",[56,31756,31757],{"align":26827},"ONBUILD COPY . \u002Fsrc",[32,31759,31760,31763,31766],{},[56,31761,31762],{"align":26827},"SHELL",[56,31764,31765],{"align":26827},"更改默认 shell，比如将 sh -c 改为 bash -c",[56,31767,31768,31769],{"align":26827},"SHELL ",[162,31770,31771],{},"“\u002Fbin\u002Fbash”, “-c”",[32,31773,31774,31777,31780],{},[56,31775,31776],{"align":26827},"HEALTHCHECK",[56,31778,31779],{"align":26827},"定义容器运行时的健康检查命令",[56,31781,31782,31783],{"align":26827},"`HEALTHCHECK CMD curl –fail ",[3538,31784,31785],{"href":31785,"rel":31786},"http:\u002F\u002Flocalhost:8080",[26956],[32,31788,31789,31792,31795],{},[56,31790,31791],{"align":26827},"STOPSIGNAL",[56,31793,31794],{"align":26827},"容器停止时发送的信号",[56,31796,31797],{"align":26827},"STOPSIGNAL SIGKILL",[3284,31799,31801],{"id":31800},"_62自己创建容器","6.2.自己创建容器",[25089,31803,31805],{"id":31804},"_621手动创建","6.2.1.手动创建",[19,31807,31808],{},"在x86电脑上编译x86的：",[153,31810,31812],{"className":26913,"code":31811,"language":26915,"meta":158,"style":158},"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",[71,31813,31814,31830,31834,31847,31851,31864,31868,31881,31885,31898,31902],{"__ignoreMap":158},[162,31815,31816,31818,31821,31824,31827],{"class":164,"line":165},[162,31817,29643],{"class":5082},[162,31819,31820],{"class":179}," build",[162,31822,31823],{"class":207}," -t",[162,31825,31826],{"class":179}," ros-melodic-cuda118-cudnn8-bionic:latest",[162,31828,31829],{"class":179}," .\n",[162,31831,31832],{"class":164,"line":197},[162,31833,301],{"emptyLinePlaceholder":300},[162,31835,31836,31838,31840,31842,31845],{"class":164,"line":228},[162,31837,29643],{"class":5082},[162,31839,31820],{"class":179},[162,31841,31823],{"class":207},[162,31843,31844],{"class":179}," ros-noetic-focal:latest",[162,31846,31829],{"class":179},[162,31848,31849],{"class":164,"line":252},[162,31850,301],{"emptyLinePlaceholder":300},[162,31852,31853,31855,31857,31859,31862],{"class":164,"line":328},[162,31854,29643],{"class":5082},[162,31856,31820],{"class":179},[162,31858,31823],{"class":207},[162,31860,31861],{"class":179}," ros-humble-jammy:latest",[162,31863,31829],{"class":179},[162,31865,31866],{"class":164,"line":466},[162,31867,301],{"emptyLinePlaceholder":300},[162,31869,31870,31872,31874,31876,31879],{"class":164,"line":471},[162,31871,29643],{"class":5082},[162,31873,31820],{"class":179},[162,31875,31823],{"class":207},[162,31877,31878],{"class":179}," ros-jazzy-noble:latest",[162,31880,31829],{"class":179},[162,31882,31883],{"class":164,"line":687},[162,31884,301],{"emptyLinePlaceholder":300},[162,31886,31887,31889,31891,31893,31896],{"class":164,"line":692},[162,31888,29643],{"class":5082},[162,31890,31820],{"class":179},[162,31892,31823],{"class":207},[162,31894,31895],{"class":179}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[162,31897,31829],{"class":179},[162,31899,31900],{"class":164,"line":698},[162,31901,301],{"emptyLinePlaceholder":300},[162,31903,31904,31906,31908,31910,31913],{"class":164,"line":2955},[162,31905,29643],{"class":5082},[162,31907,31820],{"class":179},[162,31909,31823],{"class":207},[162,31911,31912],{"class":179}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[162,31914,31829],{"class":179},[19,31916,31917],{},[4602,31918],{"alt":158,"src":31919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,31921,31922],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,31924,31925],{},[4602,31926],{"alt":158,"src":31927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,31929,31930],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[1452,31932,31933],{},[1455,31934,31935],{},"创建 Docker Hub 账户",[19,31937,31938],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[1452,31940,31941],{"start":197},[1455,31942,31943],{},"登录 Docker Hub",[19,31945,31946],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[153,31948,31950],{"className":26913,"code":31949,"language":26915,"meta":158,"style":158},"docker login\n",[71,31951,31952],{"__ignoreMap":158},[162,31953,31954,31956],{"class":164,"line":165},[162,31955,29643],{"class":5082},[162,31957,31958],{"class":179}," login\n",[19,31960,31961],{},"输入你的 Docker Hub 用户名和密码进行验证。",[1452,31963,31964],{},[1455,31965,31966],{},"为你的镜像打标签",[19,31968,31969,31970,31973],{},"Docker Hub 使用 ",[71,31971,31972],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[153,31975,31977],{"className":26913,"code":31976,"language":26915,"meta":158,"style":158},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[71,31978,31979],{"__ignoreMap":158},[162,31980,31981,31983,31986,31988,31991,31994,31997,31999],{"class":164,"line":165},[162,31982,29643],{"class":5082},[162,31984,31985],{"class":179}," tag",[162,31987,31878],{"class":179},[162,31989,31990],{"class":172}," \u003C",[162,31992,31993],{"class":179},"你的用户",[162,31995,31996],{"class":168},"名",[162,31998,3000],{"class":172},[162,32000,32001],{"class":179},"\u002Fros-jazzy-noble:latest\n",[19,32003,32004,32005,32008],{},"例如，如果你的 Docker Hub 用户名是 ",[71,32006,32007],{},"tungchiahui","，你应该执行：",[153,32010,32012],{"className":26913,"code":32011,"language":26915,"meta":158,"style":158},"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",[71,32013,32014,32025,32029,32040,32044,32055,32059,32070,32074],{"__ignoreMap":158},[162,32015,32016,32018,32020,32022],{"class":164,"line":165},[162,32017,29643],{"class":5082},[162,32019,31985],{"class":179},[162,32021,31844],{"class":179},[162,32023,32024],{"class":179}," tungchiahui\u002Fros-noetic-focal:latest\n",[162,32026,32027],{"class":164,"line":197},[162,32028,301],{"emptyLinePlaceholder":300},[162,32030,32031,32033,32035,32037],{"class":164,"line":228},[162,32032,29643],{"class":5082},[162,32034,31985],{"class":179},[162,32036,31861],{"class":179},[162,32038,32039],{"class":179}," tungchiahui\u002Fros-humble-jammy:latest\n",[162,32041,32042],{"class":164,"line":252},[162,32043,301],{"emptyLinePlaceholder":300},[162,32045,32046,32048,32050,32052],{"class":164,"line":328},[162,32047,29643],{"class":5082},[162,32049,31985],{"class":179},[162,32051,31878],{"class":179},[162,32053,32054],{"class":179}," tungchiahui\u002Fros-jazzy-noble:latest\n",[162,32056,32057],{"class":164,"line":466},[162,32058,301],{"emptyLinePlaceholder":300},[162,32060,32061,32063,32065,32067],{"class":164,"line":471},[162,32062,29643],{"class":5082},[162,32064,31985],{"class":179},[162,32066,31895],{"class":179},[162,32068,32069],{"class":179}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[162,32071,32072],{"class":164,"line":687},[162,32073,301],{"emptyLinePlaceholder":300},[162,32075,32076,32078,32080,32082],{"class":164,"line":692},[162,32077,29643],{"class":5082},[162,32079,31985],{"class":179},[162,32081,31912],{"class":179},[162,32083,32084],{"class":179}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[1452,32086,32087],{"start":197},[1455,32088,32089],{},"推送镜像到 Docker Hub",[19,32091,32092],{},"使用以下命令将镜像推送到 Docker Hub：",[153,32094,32096],{"className":26913,"code":32095,"language":26915,"meta":158,"style":158},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[71,32097,32098],{"__ignoreMap":158},[162,32099,32100,32102,32105,32107,32109,32111,32113],{"class":164,"line":165},[162,32101,29643],{"class":5082},[162,32103,32104],{"class":179}," push",[162,32106,31990],{"class":172},[162,32108,31993],{"class":179},[162,32110,31996],{"class":168},[162,32112,3000],{"class":172},[162,32114,32115],{"class":179},"\u002Fros-noetic-jazzy-noble:latest\n",[19,32117,17727],{},[153,32119,32121],{"className":26913,"code":32120,"language":26915,"meta":158,"style":158},"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",[71,32122,32123,32131,32135,32143,32147,32155,32159,32168,32172,32180,32184],{"__ignoreMap":158},[162,32124,32125,32127,32129],{"class":164,"line":165},[162,32126,29643],{"class":5082},[162,32128,32104],{"class":179},[162,32130,32024],{"class":179},[162,32132,32133],{"class":164,"line":197},[162,32134,301],{"emptyLinePlaceholder":300},[162,32136,32137,32139,32141],{"class":164,"line":228},[162,32138,29643],{"class":5082},[162,32140,32104],{"class":179},[162,32142,32039],{"class":179},[162,32144,32145],{"class":164,"line":252},[162,32146,301],{"emptyLinePlaceholder":300},[162,32148,32149,32151,32153],{"class":164,"line":328},[162,32150,29643],{"class":5082},[162,32152,32104],{"class":179},[162,32154,32054],{"class":179},[162,32156,32157],{"class":164,"line":466},[162,32158,301],{"emptyLinePlaceholder":300},[162,32160,32161,32163,32165],{"class":164,"line":471},[162,32162,29643],{"class":5082},[162,32164,32104],{"class":179},[162,32166,32167],{"class":179}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[162,32169,32170],{"class":164,"line":687},[162,32171,301],{"emptyLinePlaceholder":300},[162,32173,32174,32176,32178],{"class":164,"line":692},[162,32175,29643],{"class":5082},[162,32177,32104],{"class":179},[162,32179,32084],{"class":179},[162,32181,32182],{"class":164,"line":698},[162,32183,301],{"emptyLinePlaceholder":300},[162,32185,32186,32188,32190],{"class":164,"line":2955},[162,32187,29643],{"class":5082},[162,32189,32104],{"class":179},[162,32191,32192],{"class":179}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[1452,32194,32195],{"start":228},[1455,32196,32197],{},"验证推送成功",[19,32199,32200],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,32202,32203],{},[3453,32204,6897],{},[4279,32206,32207,32210],{},[1455,32208,32209],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[1455,32211,32212],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,32214,32215],{},[4602,32216],{"alt":158,"src":32217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,32219,32220],{},[4602,32221],{"alt":158,"src":32222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[25089,32224,32226],{"id":32225},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,32228,32229,32230,32233,32234,32237],{},"如果您想在 ",[3453,32231,32232],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[3453,32235,32236],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,32239,32240,32241],{},"1. ",[3453,32242,32243],{},"启用 Docker 跨平台构建",[19,32245,32246],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,32248,32249],{},"第一步：启用 buildx（只需执行一次）",[153,32251,32253],{"className":26913,"code":32252,"language":26915,"meta":158,"style":158},"docker buildx create --name multiarch_builder --use\n",[71,32254,32255],{"__ignoreMap":158},[162,32256,32257,32259,32262,32265,32268,32271],{"class":164,"line":165},[162,32258,29643],{"class":5082},[162,32260,32261],{"class":179}," buildx",[162,32263,32264],{"class":179}," create",[162,32266,32267],{"class":207}," --name",[162,32269,32270],{"class":179}," multiarch_builder",[162,32272,32273],{"class":207}," --use\n",[19,32275,32276],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,32278,32279],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[153,32281,32283],{"className":26913,"code":32282,"language":26915,"meta":158,"style":158},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[71,32284,32285],{"__ignoreMap":158},[162,32286,32287,32289,32291,32293,32296,32299,32302,32305],{"class":164,"line":165},[162,32288,29643],{"class":5082},[162,32290,30320],{"class":179},[162,32292,30323],{"class":207},[162,32294,32295],{"class":207}," --privileged",[162,32297,32298],{"class":179}," multiarch\u002Fqemu-user-static",[162,32300,32301],{"class":207}," --reset",[162,32303,32304],{"class":207}," -p",[162,32306,32307],{"class":179}," yes\n",[19,32309,32310],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,32312,32313],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[153,32315,32317],{"className":26913,"code":32316,"language":26915,"meta":158,"style":158},"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",[71,32318,32319,32361,32365,32370,32380,32390,32399,32405,32409,32413,32423,32431,32440,32446,32450,32454,32464,32472,32481,32487,32491,32495,32505,32513,32522,32528,32532,32536,32546,32554,32563,32569,32573,32577,32587,32595,32604,32610,32614,32618,32628,32636,32645,32651,32655,32659,32669,32677,32686,32692,32696,32700,32710,32718,32727,32733,32737,32741,32752,32760,32769,32775],{"__ignoreMap":158},[162,32320,32321,32323,32325,32327,32330,32333,32335,32337,32340,32342,32344,32346,32348,32351,32354,32356,32359],{"class":164,"line":165},[162,32322,29643],{"class":5082},[162,32324,32261],{"class":179},[162,32326,31820],{"class":179},[162,32328,32329],{"class":207}," --platform",[162,32331,32332],{"class":179}," linux\u002Famd64,linux\u002Farm64",[162,32334,31823],{"class":207},[162,32336,31990],{"class":172},[162,32338,32339],{"class":179},"你的镜像",[162,32341,31996],{"class":168},[162,32343,3000],{"class":172},[162,32345,1332],{"class":179},[162,32347,4187],{"class":172},[162,32349,32350],{"class":179},"标",[162,32352,32353],{"class":168},"签",[162,32355,3000],{"class":172},[162,32357,32358],{"class":207}," --push",[162,32360,31829],{"class":179},[162,32362,32363],{"class":164,"line":197},[162,32364,301],{"emptyLinePlaceholder":300},[162,32366,32367],{"class":164,"line":228},[162,32368,32369],{"class":361},"# 例子：\n",[162,32371,32372,32374,32376,32378],{"class":164,"line":252},[162,32373,29643],{"class":5082},[162,32375,32261],{"class":179},[162,32377,31820],{"class":179},[162,32379,27770],{"class":207},[162,32381,32382,32385,32388],{"class":164,"line":328},[162,32383,32384],{"class":168},"--platform ",[162,32386,32387],{"class":179},"linux\u002Famd64,linux\u002Farm64",[162,32389,27770],{"class":207},[162,32391,32392,32394,32397],{"class":164,"line":466},[162,32393,31823],{"class":207},[162,32395,32396],{"class":179}," tungchiahui\u002Fros:noetic-focal",[162,32398,27770],{"class":207},[162,32400,32401,32403],{"class":164,"line":471},[162,32402,32358],{"class":207},[162,32404,27770],{"class":207},[162,32406,32407],{"class":164,"line":687},[162,32408,31829],{"class":179},[162,32410,32411],{"class":164,"line":692},[162,32412,301],{"emptyLinePlaceholder":300},[162,32414,32415,32417,32419,32421],{"class":164,"line":698},[162,32416,29643],{"class":5082},[162,32418,32261],{"class":179},[162,32420,31820],{"class":179},[162,32422,27770],{"class":207},[162,32424,32425,32427,32429],{"class":164,"line":2955},[162,32426,32384],{"class":168},[162,32428,32387],{"class":179},[162,32430,27770],{"class":207},[162,32432,32433,32435,32438],{"class":164,"line":2960},[162,32434,31823],{"class":207},[162,32436,32437],{"class":179}," tungchiahui\u002Fros:humble-jammy",[162,32439,27770],{"class":207},[162,32441,32442,32444],{"class":164,"line":2971},[162,32443,32358],{"class":207},[162,32445,27770],{"class":207},[162,32447,32448],{"class":164,"line":2984},[162,32449,31829],{"class":179},[162,32451,32452],{"class":164,"line":2989},[162,32453,301],{"emptyLinePlaceholder":300},[162,32455,32456,32458,32460,32462],{"class":164,"line":3011},[162,32457,29643],{"class":5082},[162,32459,32261],{"class":179},[162,32461,31820],{"class":179},[162,32463,27770],{"class":207},[162,32465,32466,32468,32470],{"class":164,"line":3022},[162,32467,32384],{"class":168},[162,32469,32387],{"class":179},[162,32471,27770],{"class":207},[162,32473,32474,32476,32479],{"class":164,"line":3027},[162,32475,31823],{"class":207},[162,32477,32478],{"class":179}," tungchiahui\u002Fros:jazzy-noble",[162,32480,27770],{"class":207},[162,32482,32483,32485],{"class":164,"line":3046},[162,32484,32358],{"class":207},[162,32486,27770],{"class":207},[162,32488,32489],{"class":164,"line":3052},[162,32490,31829],{"class":179},[162,32492,32493],{"class":164,"line":3057},[162,32494,301],{"emptyLinePlaceholder":300},[162,32496,32497,32499,32501,32503],{"class":164,"line":3072},[162,32498,29410],{"class":5082},[162,32500,32261],{"class":179},[162,32502,31820],{"class":179},[162,32504,27770],{"class":207},[162,32506,32507,32509,32511],{"class":164,"line":3077},[162,32508,32384],{"class":168},[162,32510,32387],{"class":179},[162,32512,27770],{"class":207},[162,32514,32515,32517,32520],{"class":164,"line":3100},[162,32516,31823],{"class":207},[162,32518,32519],{"class":179}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[162,32521,27770],{"class":207},[162,32523,32524,32526],{"class":164,"line":3140},[162,32525,32358],{"class":207},[162,32527,27770],{"class":207},[162,32529,32530],{"class":164,"line":4878},[162,32531,31829],{"class":179},[162,32533,32534],{"class":164,"line":4883},[162,32535,301],{"emptyLinePlaceholder":300},[162,32537,32538,32540,32542,32544],{"class":164,"line":4897},[162,32539,29643],{"class":5082},[162,32541,32261],{"class":179},[162,32543,31820],{"class":179},[162,32545,27770],{"class":207},[162,32547,32548,32550,32552],{"class":164,"line":4902},[162,32549,32384],{"class":168},[162,32551,32387],{"class":179},[162,32553,27770],{"class":207},[162,32555,32556,32558,32561],{"class":164,"line":5694},[162,32557,31823],{"class":207},[162,32559,32560],{"class":179}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[162,32562,27770],{"class":207},[162,32564,32565,32567],{"class":164,"line":5708},[162,32566,32358],{"class":207},[162,32568,27770],{"class":207},[162,32570,32571],{"class":164,"line":5716},[162,32572,31829],{"class":179},[162,32574,32575],{"class":164,"line":5721},[162,32576,301],{"emptyLinePlaceholder":300},[162,32578,32579,32581,32583,32585],{"class":164,"line":5727},[162,32580,29410],{"class":5082},[162,32582,32261],{"class":179},[162,32584,31820],{"class":179},[162,32586,27770],{"class":207},[162,32588,32589,32591,32593],{"class":164,"line":5733},[162,32590,32384],{"class":168},[162,32592,32387],{"class":179},[162,32594,27770],{"class":207},[162,32596,32597,32599,32602],{"class":164,"line":5738},[162,32598,31823],{"class":207},[162,32600,32601],{"class":179}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[162,32603,27770],{"class":207},[162,32605,32606,32608],{"class":164,"line":11052},[162,32607,32358],{"class":207},[162,32609,27770],{"class":207},[162,32611,32612],{"class":164,"line":11076},[162,32613,31829],{"class":179},[162,32615,32616],{"class":164,"line":11081},[162,32617,301],{"emptyLinePlaceholder":300},[162,32619,32620,32622,32624,32626],{"class":164,"line":11087},[162,32621,29643],{"class":5082},[162,32623,32261],{"class":179},[162,32625,31820],{"class":179},[162,32627,27770],{"class":207},[162,32629,32630,32632,32634],{"class":164,"line":11114},[162,32631,32384],{"class":168},[162,32633,32387],{"class":179},[162,32635,27770],{"class":207},[162,32637,32638,32640,32643],{"class":164,"line":11119},[162,32639,31823],{"class":207},[162,32641,32642],{"class":179}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[162,32644,27770],{"class":207},[162,32646,32647,32649],{"class":164,"line":11125},[162,32648,32358],{"class":207},[162,32650,27770],{"class":207},[162,32652,32653],{"class":164,"line":11137},[162,32654,31829],{"class":179},[162,32656,32657],{"class":164,"line":11149},[162,32658,301],{"emptyLinePlaceholder":300},[162,32660,32661,32663,32665,32667],{"class":164,"line":11161},[162,32662,29643],{"class":5082},[162,32664,32261],{"class":179},[162,32666,31820],{"class":179},[162,32668,27770],{"class":207},[162,32670,32671,32673,32675],{"class":164,"line":12816},[162,32672,32384],{"class":168},[162,32674,32387],{"class":179},[162,32676,27770],{"class":207},[162,32678,32679,32681,32684],{"class":164,"line":12841},[162,32680,31823],{"class":207},[162,32682,32683],{"class":179}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[162,32685,27770],{"class":207},[162,32687,32688,32690],{"class":164,"line":12864},[162,32689,32358],{"class":207},[162,32691,27770],{"class":207},[162,32693,32694],{"class":164,"line":12888},[162,32695,31829],{"class":179},[162,32697,32698],{"class":164,"line":12893},[162,32699,301],{"emptyLinePlaceholder":300},[162,32701,32702,32704,32706,32708],{"class":164,"line":12898},[162,32703,29410],{"class":5082},[162,32705,32261],{"class":179},[162,32707,31820],{"class":179},[162,32709,27770],{"class":207},[162,32711,32712,32714,32716],{"class":164,"line":12903},[162,32713,32384],{"class":168},[162,32715,32387],{"class":179},[162,32717,27770],{"class":207},[162,32719,32720,32722,32725],{"class":164,"line":12912},[162,32721,31823],{"class":207},[162,32723,32724],{"class":179}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[162,32726,27770],{"class":207},[162,32728,32729,32731],{"class":164,"line":12917},[162,32730,32358],{"class":207},[162,32732,27770],{"class":207},[162,32734,32735],{"class":164,"line":12923},[162,32736,31829],{"class":179},[162,32738,32739],{"class":164,"line":12944},[162,32740,301],{"emptyLinePlaceholder":300},[162,32742,32743,32746,32748,32750],{"class":164,"line":12950},[162,32744,32745],{"class":5082},"  docker",[162,32747,32261],{"class":179},[162,32749,31820],{"class":179},[162,32751,27770],{"class":207},[162,32753,32754,32756,32758],{"class":164,"line":12964},[162,32755,32384],{"class":168},[162,32757,32387],{"class":179},[162,32759,27770],{"class":207},[162,32761,32762,32764,32767],{"class":164,"line":12970},[162,32763,31823],{"class":207},[162,32765,32766],{"class":179}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[162,32768,27770],{"class":207},[162,32770,32771,32773],{"class":164,"line":12997},[162,32772,32358],{"class":207},[162,32774,27770],{"class":207},[162,32776,32777],{"class":164,"line":13006},[162,32778,31829],{"class":179},[19,32780,32781],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,32783,32784],{},[4602,32785],{"alt":158,"src":32786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,32788,32789],{},[4602,32790],{"alt":158,"src":32791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[25089,32793,32795],{"id":32794},"_623清除构建缓存","6.2.3.清除构建缓存",[153,32797,32799],{"className":26913,"code":32798,"language":26915,"meta":158,"style":158},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[71,32800,32801,32806],{"__ignoreMap":158},[162,32802,32803],{"class":164,"line":165},[162,32804,32805],{"class":361},"# 清理BuildKit构建缓存\n",[162,32807,32808,32810,32813,32816],{"class":164,"line":197},[162,32809,29643],{"class":5082},[162,32811,32812],{"class":179}," builder",[162,32814,32815],{"class":179}," prune",[162,32817,32818],{"class":207}," -f\n",[19,32820,32821],{},[4602,32822],{"alt":158,"src":32823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[3284,32825,32827],{"id":32826},"_63补充","6.3.补充",[25089,32829,32831],{"id":32830},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,32833,32834],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,32836,32837],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,32839,32840],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[153,32842,32844],{"className":26913,"code":32843,"language":26915,"meta":158,"style":158},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[71,32845,32846,32853],{"__ignoreMap":158},[162,32847,32848,32850],{"class":164,"line":165},[162,32849,30460],{"class":5082},[162,32851,32852],{"class":179}," nginx\n",[162,32854,32855,32857,32860,32863,32865],{"class":164,"line":197},[162,32856,31643],{"class":5082},[162,32858,32859],{"class":179}," echo",[162,32861,32862],{"class":179}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[162,32864,29312],{"class":172},[162,32866,32867],{"class":179}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,32869,32870],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,32872,32873],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[153,32875,32877],{"className":26913,"code":32876,"language":26915,"meta":158,"style":158},"docker build -t nginx:tuling .\n",[71,32878,32879],{"__ignoreMap":158},[162,32880,32881,32883,32885,32887,32890],{"class":164,"line":165},[162,32882,29643],{"class":5082},[162,32884,31820],{"class":179},[162,32886,31823],{"class":207},[162,32888,32889],{"class":179}," nginx:tuling",[162,32891,31829],{"class":179},[19,32893,32894],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,32896,32897],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[153,32899,32901],{"className":26913,"code":32900,"language":26915,"meta":158,"style":158},"docker run -d -p 92:80 nginx:tuling\n",[71,32902,32903],{"__ignoreMap":158},[162,32904,32905,32907,32909,32912,32914,32917],{"class":164,"line":165},[162,32906,29643],{"class":5082},[162,32908,30320],{"class":179},[162,32910,32911],{"class":207}," -d",[162,32913,32304],{"class":207},[162,32915,32916],{"class":179}," 92:80",[162,32918,32919],{"class":179}," nginx:tuling\n",[19,32921,32922,32923],{},"4、访问 ",[3538,32924,32927],{"href":32925,"rel":32926},"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",[26956],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,32929,32930],{},[4602,32931],{"alt":158,"src":32932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,32934,32935],{},[4602,32936],{"alt":158,"src":32937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[25089,32939,32941],{"id":32940},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,32943,32944],{},"只需要知道大体流程即可",[19,32946,32947],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,32949,32950],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,32952,32953],{},"2、在Dockerfile中添加以下内容",[153,32955,32957],{"className":29181,"code":32956,"language":29183,"meta":158,"style":158},"# 基于哪个镜像\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",[71,32958,32959,32964,32969,32974,32979,32984,32989,32994],{"__ignoreMap":158},[162,32960,32961],{"class":164,"line":165},[162,32962,32963],{},"# 基于哪个镜像\n",[162,32965,32966],{"class":164,"line":197},[162,32967,32968],{},"From java:8\n",[162,32970,32971],{"class":164,"line":228},[162,32972,32973],{},"# 复制文件到容器\n",[162,32975,32976],{"class":164,"line":252},[162,32977,32978],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[162,32980,32981],{"class":164,"line":328},[162,32982,32983],{},"# 声明需要暴露的端口\n",[162,32985,32986],{"class":164,"line":466},[162,32987,32988],{},"EXPOSE 8877\n",[162,32990,32991],{"class":164,"line":471},[162,32992,32993],{},"# 配置容器启动后执行的命令\n",[162,32995,32996],{"class":164,"line":687},[162,32997,32998],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,33000,33001],{},"3、使用docker build命令构建镜像",[153,33003,33005],{"className":26913,"code":33004,"language":26915,"meta":158,"style":158},"docker build -t tulingmall-member:0.0.5 .\n",[71,33006,33007],{"__ignoreMap":158},[162,33008,33009,33011,33013,33015,33018],{"class":164,"line":165},[162,33010,29643],{"class":5082},[162,33012,31820],{"class":179},[162,33014,31823],{"class":207},[162,33016,33017],{"class":179}," tulingmall-member:0.0.5",[162,33019,31829],{"class":179},[19,33021,33022],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,33024,33025],{},[4602,33026],{"alt":158,"src":33027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,33029,33030],{},"4、启动镜像，加-d可在后台启动",[153,33032,33034],{"className":26913,"code":33033,"language":26915,"meta":158,"style":158},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[71,33035,33036],{"__ignoreMap":158},[162,33037,33038,33040,33042,33044,33046,33049],{"class":164,"line":165},[162,33039,29643],{"class":5082},[162,33041,30320],{"class":179},[162,33043,32911],{"class":207},[162,33045,32304],{"class":207},[162,33047,33048],{"class":179}," 8877:8877",[162,33050,33051],{"class":179}," tulingmall-member:0.0.5\n",[19,33053,33054],{},"加上JVM参数：",[153,33056,33058],{"className":26913,"code":33057,"language":26915,"meta":158,"style":158},"# --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",[71,33059,33060,33065,33080,33090,33099,33106],{"__ignoreMap":158},[162,33061,33062],{"class":164,"line":165},[162,33063,33064],{"class":361},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[162,33066,33067,33069,33071,33074,33076,33078],{"class":164,"line":197},[162,33068,29643],{"class":5082},[162,33070,30320],{"class":179},[162,33072,33073],{"class":207},"  -d",[162,33075,32304],{"class":207},[162,33077,33048],{"class":179},[162,33079,27770],{"class":207},[162,33081,33082,33084,33087],{"class":164,"line":228},[162,33083,31217],{"class":168},[162,33085,33086],{"class":179},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[162,33088,33089],{"class":207},"  \\\n",[162,33091,33092,33094,33097],{"class":164,"line":252},[162,33093,31217],{"class":168},[162,33095,33096],{"class":179},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[162,33098,33089],{"class":207},[162,33100,33101,33104],{"class":164,"line":328},[162,33102,33103],{"class":168},"--cap-add=SYS_PTRACE  ",[162,33105,29265],{"class":207},[162,33107,33108],{"class":164,"line":466},[162,33109,33110],{"class":168},"tulingmall-member:0.0.5\n",[19,33112,33113],{},"5、访问会员服务接口",[19,33115,33116],{},[4602,33117],{"alt":158,"src":33118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[25089,33120,33122],{"id":33121},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,33124,33125],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,33127,33128,33129],{},"阿里云docker镜像仓库：",[3538,33130,33131],{"href":33131,"rel":33132},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[26956],[19,33134,33135],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,33137,33138],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,33140,33141],{},[4602,33142],{"alt":158,"src":33143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,33145,33146],{},"要把镜像推送到镜像仓库",[153,33148,33150],{"className":26913,"code":33149,"language":26915,"meta":158,"style":158},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[71,33151,33152],{"__ignoreMap":158},[162,33153,33154,33156,33158,33160],{"class":164,"line":165},[162,33155,29643],{"class":5082},[162,33157,31985],{"class":179},[162,33159,33017],{"class":179},[162,33161,33162],{"class":179}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,33164,33165],{},"最后将镜像推送到远程仓库",[153,33167,33169],{"className":26913,"code":33168,"language":26915,"meta":158,"style":158},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[71,33170,33171],{"__ignoreMap":158},[162,33172,33173,33175,33177],{"class":164,"line":165},[162,33174,29643],{"class":5082},[162,33176,32104],{"class":179},[162,33178,33162],{"class":179},[3219,33180,33181],{},"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":158,"searchDepth":197,"depth":197,"links":33183},[33184,33185,33186],{"id":31571,"depth":228,"text":31572},{"id":31800,"depth":228,"text":31801},{"id":32826,"depth":228,"text":32827},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":31563,"description":158},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":33193,"title":33194,"body":33195,"description":158,"extension":3242,"meta":33338,"navigation":300,"path":33339,"seo":33340,"stem":33341,"__hash__":33342},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":33196,"toc":33336},[33197,33200,33205,33210,33213,33218,33223,33226,33231,33236,33239,33244,33247,33250,33253,33256,33259,33262,33282,33304,33307,33310,33330,33333],[10,33198,33194],{"id":33199},"_7vscode远程开发",[1452,33201,33202],{},[1455,33203,33204],{},"插件1：微软Docker工具",[19,33206,33207],{},[4602,33208],{"alt":158,"src":33209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,33211,33212],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,33214,33215],{},[4602,33216],{"alt":158,"src":33217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[1452,33219,33220],{"start":197},[1455,33221,33222],{},"插件2：微软Docker远程开发工具",[19,33224,33225],{},"下面这是远程开发的插件。",[19,33227,33228],{},[4602,33229],{"alt":158,"src":33230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,33232,33233],{},[4602,33234],{"alt":158,"src":33235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,33237,33238],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,33240,33241],{},[4602,33242],{"alt":158,"src":33243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,33245,33246],{},"安装完拓展之后，vscode进行链接：",[19,33248,33249],{},"1.按ctrl+shift+p",[19,33251,33252],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,33254,33255],{},"3.选择目前运行的容器",[19,33257,33258],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,33260,33261],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[153,33263,33265],{"className":26913,"code":33264,"language":26915,"meta":158,"style":158},"docker run -v 主机目录:容器目录 image-name\n",[71,33266,33267],{"__ignoreMap":158},[162,33268,33269,33271,33273,33276,33279],{"class":164,"line":165},[162,33270,29643],{"class":5082},[162,33272,30320],{"class":179},[162,33274,33275],{"class":207}," -v",[162,33277,33278],{"class":179}," 主机目录:容器目录",[162,33280,33281],{"class":179}," image-name\n",[153,33283,33285],{"className":26913,"code":33284,"language":26915,"meta":158,"style":158},"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",[71,33286,33287],{"__ignoreMap":158},[162,33288,33289,33291,33293,33296,33298,33301],{"class":164,"line":165},[162,33290,29643],{"class":5082},[162,33292,30320],{"class":179},[162,33294,33295],{"class":207}," -it",[162,33297,33275],{"class":207},[162,33299,33300],{"class":179}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[162,33302,33303],{"class":179}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,33305,33306],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,33308,33309],{},"查看挂载情况：",[153,33311,33313],{"className":26913,"code":33312,"language":26915,"meta":158,"style":158},"mount | grep -i project\n",[71,33314,33315],{"__ignoreMap":158},[162,33316,33317,33320,33322,33325,33327],{"class":164,"line":165},[162,33318,33319],{"class":5082},"mount",[162,33321,28201],{"class":172},[162,33323,33324],{"class":5082}," grep",[162,33326,29520],{"class":207},[162,33328,33329],{"class":179}," project\n",[19,33331,33332],{},"也可以通过ls来进行查看",[3219,33334,33335],{},"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":158,"searchDepth":197,"depth":197,"links":33337},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":33194,"description":158},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":33344,"title":33345,"body":33346,"description":3241,"extension":3242,"meta":33350,"navigation":300,"path":33352,"seo":33353,"stem":33354,"__hash__":33355},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":33347,"toc":33348},[],{"title":158,"searchDepth":197,"depth":197,"links":33349},[],{"category":33351},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":33345,"description":3241},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":33357,"title":33358,"body":33359,"description":3241,"extension":3242,"meta":33363,"navigation":300,"path":33364,"seo":33365,"stem":33366,"__hash__":33367},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":33360,"toc":33361},[],{"title":158,"searchDepth":197,"depth":197,"links":33362},[],{"category":33351},"\u002Fwiki\u002F2025-11-10-k8s",{"title":33358,"description":3241},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":33369,"title":33370,"body":33371,"description":3241,"extension":3242,"meta":33660,"navigation":300,"path":33661,"seo":33662,"stem":33663,"__hash__":33664},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":33372,"toc":33658},[33373,33376,33384,33399,33404,33455,33458,33464,33647,33652,33655],[10,33374,33370],{"id":33375},"_1验证深度学习环境",[19,33377,33378,33379],{},"关于环境的安装，看",[3538,33380,33383],{"href":33381,"rel":33382},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[26956],"Pytorch-->深度学习",[19,33385,33386,33387,33390,33391,33394,33395,33398],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[71,33388,33389],{},"pytorch-cuda=12.4"," 是一个“ ",[3453,33392,33393],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[3453,33396,33397],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,33400,33401],{},[4602,33402],{"alt":158,"src":33403},"\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",[153,33405,33407],{"className":26913,"code":33406,"language":26915,"meta":158,"style":158},"# 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",[71,33408,33409,33414],{"__ignoreMap":158},[162,33410,33411],{"class":164,"line":165},[162,33412,33413],{"class":361},"# CUDA 12.4\n",[162,33415,33416,33419,33421,33424,33427,33430,33433,33436,33438,33441,33444,33447,33450,33452],{"class":164,"line":197},[162,33417,33418],{"class":5082},"conda",[162,33420,26925],{"class":179},[162,33422,33423],{"class":179}," pytorch==",[162,33425,33426],{"class":207},"2.5.1",[162,33428,33429],{"class":179}," torchvision==",[162,33431,33432],{"class":207},"0.20.1",[162,33434,33435],{"class":179}," torchaudio==",[162,33437,33426],{"class":207},[162,33439,33440],{"class":179}," pytorch-cuda=",[162,33442,33443],{"class":207},"12.4",[162,33445,33446],{"class":207}," -c",[162,33448,33449],{"class":179}," pytorch",[162,33451,33446],{"class":207},[162,33453,33454],{"class":179}," nvidia\n",[19,33456,33457],{},"）：",[19,33459,33460],{},[3538,33461,33462],{"href":33462,"rel":33463},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[26956],[153,33465,33467],{"className":155,"code":33466,"language":157,"meta":158,"style":158},"# 对深度学习环境进行测试\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",[71,33468,33469,33474,33482,33487,33497,33512,33517,33527,33564,33571,33582,33598,33603,33613,33625,33635],{"__ignoreMap":158},[162,33470,33471],{"class":164,"line":165},[162,33472,33473],{"class":361},"# 对深度学习环境进行测试\n",[162,33475,33476,33479],{"class":164,"line":197},[162,33477,33478],{"class":172},"import",[162,33480,33481],{"class":168}," torch\n",[162,33483,33484],{"class":164,"line":228},[162,33485,33486],{"class":361},"# 查看cuda是否被激活\n",[162,33488,33489,33492,33494],{"class":164,"line":252},[162,33490,33491],{"class":168},"flag",[162,33493,173],{"class":172},[162,33495,33496],{"class":168},"torch.cuda.is_available()\n",[162,33498,33499,33501,33503,33506,33509],{"class":164,"line":328},[162,33500,306],{"class":207},[162,33502,604],{"class":168},[162,33504,33505],{"class":179},"\"cuda:\"",[162,33507,33508],{"class":168},", flag)   ",[162,33510,33511],{"class":361},"#返回true的话说明被激活\n",[162,33513,33514],{"class":164,"line":466},[162,33515,33516],{"class":361},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[162,33518,33519,33522,33524],{"class":164,"line":471},[162,33520,33521],{"class":168},"ngpu",[162,33523,173],{"class":172},[162,33525,33526],{"class":207},"1\n",[162,33528,33529,33532,33534,33537,33540,33542,33545,33548,33551,33553,33555,33557,33559,33562],{"class":164,"line":687},[162,33530,33531],{"class":168},"device",[162,33533,173],{"class":172},[162,33535,33536],{"class":168},"torch.device(",[162,33538,33539],{"class":179},"\"cuda:0\"",[162,33541,4828],{"class":172},[162,33543,33544],{"class":168},"(torch.cuda.is_available() ",[162,33546,33547],{"class":172},"and",[162,33549,33550],{"class":168}," ngpu",[162,33552,3000],{"class":172},[162,33554,312],{"class":207},[162,33556,1823],{"class":168},[162,33558,2313],{"class":172},[162,33560,33561],{"class":179}," \"cpu\"",[162,33563,434],{"class":168},[162,33565,33566,33568],{"class":164,"line":692},[162,33567,306],{"class":207},[162,33569,33570],{"class":168},"(device)\n",[162,33572,33573,33575,33578,33580],{"class":164,"line":698},[162,33574,306],{"class":207},[162,33576,33577],{"class":168},"(torch.cuda.get_device_name(",[162,33579,312],{"class":207},[162,33581,586],{"class":168},[162,33583,33584,33586,33589,33591,33593,33595],{"class":164,"line":2955},[162,33585,306],{"class":207},[162,33587,33588],{"class":168},"(torch.rand(",[162,33590,218],{"class":207},[162,33592,3670],{"class":168},[162,33594,218],{"class":207},[162,33596,33597],{"class":168},").cuda())\n",[162,33599,33600],{"class":164,"line":2960},[162,33601,33602],{"class":361},"# 查看cuda和cudnn的版本\n",[162,33604,33605,33608,33610],{"class":164,"line":2971},[162,33606,33607],{"class":168},"cuda_version",[162,33609,173],{"class":172},[162,33611,33612],{"class":168},"torch.version.cuda\n",[162,33614,33615,33617,33619,33622],{"class":164,"line":2984},[162,33616,306],{"class":207},[162,33618,604],{"class":168},[162,33620,33621],{"class":179},"\"cuda version\"",[162,33623,33624],{"class":168},",cuda_version)\n",[162,33626,33627,33630,33632],{"class":164,"line":2989},[162,33628,33629],{"class":168},"cudnn_version",[162,33631,173],{"class":172},[162,33633,33634],{"class":168},"torch.backends.cudnn.version()\n",[162,33636,33637,33639,33641,33644],{"class":164,"line":3011},[162,33638,306],{"class":207},[162,33640,604],{"class":168},[162,33642,33643],{"class":179},"\"cudnn version\"",[162,33645,33646],{"class":168},",cudnn_version)\n",[19,33648,33649],{},[4602,33650],{"alt":158,"src":33651},"\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,33653,33654],{},"cuda:0 指的是一块显卡",[3219,33656,33657],{},"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":158,"searchDepth":197,"depth":197,"links":33659},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":33370,"description":3241},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":33666,"title":33667,"body":33668,"description":3241,"extension":3242,"meta":53461,"navigation":300,"path":53462,"seo":53463,"stem":53464,"__hash__":53465},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":33669,"toc":53455},[33670,33673,33677,33681,33684,33689,33694,33697,33702,33707,33712,33715,33719,33724,33728,33733,33736,33741,33744,33747,33750,33753,33758,33761,33766,33771,33776,33781,33784,33788,33791,33796,34399,34404,34407,34412,34415,34418,34878,34881,34884,34887,34890,36937,36940,36945,36950,37745,37748,37753,38531,38535,40194,40198,40912,40916,40920,40925,40930,40935,40938,40943,40948,40953,40958,40963,40967,40972,42254,42259,42262,42265,42268,42423,42426,42429,43645,43650,44345,44349,44353,44358,44363,44366,44371,44376,44381,44386,44391,44396,44401,44406,44411,44416,44421,44426,44431,44436,44441,44446,44451,44456,44461,44466,44471,44476,44481,44486,44491,44496,44501,44506,44511,44516,44520,44524,44527,46005,46009,47656,47660,48354,48358,48361,48364,48907,48910,48914,48917,50314,50318,50321,50898,52685,52689,52692,53452],[10,33671,33667],{"id":33672},"_2经典神经网络",[3284,33674,33676],{"id":33675},"_21lenet与alexnet","2.1.LeNet与AlexNet",[25089,33678,33680],{"id":33679},"_211原理介绍","2.1.1.原理介绍",[19,33682,33683],{},"LeNet-5",[1452,33685,33686],{},[1455,33687,33688],{},"原理",[19,33690,33691],{},[4602,33692],{"alt":158,"src":33693},"\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,33695,33696],{},"B是batch批次；C是channel通道",[1452,33698,33699],{"start":197},[1455,33700,33701],{},"网络参数详细",[19,33703,33704],{},[4602,33705],{"alt":158,"src":33706},"\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,33708,33709],{},[4602,33710],{"alt":158,"src":33711},"\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,33713,33714],{},"AlexNet",[1452,33716,33717],{},[1455,33718,33688],{},[19,33720,33721],{},[4602,33722],{"alt":158,"src":33723},"\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",[1452,33725,33726],{"start":197},[1455,33727,33701],{},[19,33729,33730],{},[4602,33731],{"alt":158,"src":33732},"\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,33734,33735],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,33737,33738],{},[4602,33739],{"alt":158,"src":33740},"\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,33742,33743],{},"数据处理中的图像增强操作:",[19,33745,33746],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,33748,33749],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,33751,33752],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,33754,33755],{},[4602,33756],{"alt":158,"src":33757},"\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,33759,33760],{},"提升网络精确度的方法：LRN正则化",[19,33762,33763],{},[4602,33764],{"alt":158,"src":33765},"\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,33767,33768],{},[4602,33769],{"alt":158,"src":33770},"\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",[1452,33772,33773],{"start":228},[1455,33774,33775],{},"AlexNet的总结",[19,33777,33778],{},[4602,33779],{"alt":158,"src":33780},"\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,33782,33783],{},"比LeNet模型要深一丢丢",[25089,33785,33787],{"id":33786},"_212代码实现","2.1.2.代码实现",[19,33789,33790],{},"（1）LeNet",[1452,33792,33793],{},[1455,33794,33795],{},"模型搭建",[153,33797,33799],{"className":155,"code":33798,"language":157,"meta":158,"style":158},"# 导入库\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",[71,33800,33801,33806,33812,33817,33830,33835,33847,33851,33871,33876,33881,33892,33897,33916,33920,33925,33974,33986,33991,34020,34055,34082,34087,34099,34104,34124,34143,34162,34166,34171,34181,34198,34209,34224,34235,34246,34261,34276,34287,34294,34298,34312,34317,34340,34345,34350,34355,34359,34364,34369,34379],{"__ignoreMap":158},[162,33802,33803],{"class":164,"line":165},[162,33804,33805],{"class":361},"# 导入库\n",[162,33807,33808,33810],{"class":164,"line":197},[162,33809,33478],{"class":172},[162,33811,33481],{"class":168},[162,33813,33814],{"class":164,"line":228},[162,33815,33816],{"class":361},"# 导入神经网络层\n",[162,33818,33819,33822,33825,33827],{"class":164,"line":252},[162,33820,33821],{"class":172},"from",[162,33823,33824],{"class":168}," torch ",[162,33826,33478],{"class":172},[162,33828,33829],{"class":168}," nn\n",[162,33831,33832],{"class":164,"line":328},[162,33833,33834],{"class":361},"# 导入展示神经网络参数的包\n",[162,33836,33837,33839,33842,33844],{"class":164,"line":466},[162,33838,33821],{"class":172},[162,33840,33841],{"class":168}," torchsummary ",[162,33843,33478],{"class":172},[162,33845,33846],{"class":168}," summary\n",[162,33848,33849],{"class":164,"line":471},[162,33850,301],{"emptyLinePlaceholder":300},[162,33852,33853,33855,33858,33860,33863,33865,33868],{"class":164,"line":687},[162,33854,17788],{"class":172},[162,33856,33857],{"class":5082}," LeNet",[162,33859,604],{"class":168},[162,33861,33862],{"class":5082},"nn",[162,33864,3847],{"class":168},[162,33866,33867],{"class":5082},"Module",[162,33869,33870],{"class":168},"):\n",[162,33872,33873],{"class":164,"line":692},[162,33874,33875],{"class":361},"    # 模型初始化:\n",[162,33877,33878],{"class":164,"line":698},[162,33879,33880],{"class":361},"    # 定义一些网络层和激活函数\n",[162,33882,33883,33886,33889],{"class":164,"line":2955},[162,33884,33885],{"class":172},"    def",[162,33887,33888],{"class":207}," __init__",[162,33890,33891],{"class":168},"(self):\n",[162,33893,33894],{"class":164,"line":2960},[162,33895,33896],{"class":361},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[162,33898,33899,33902,33905,33908,33911,33914],{"class":164,"line":2971},[162,33900,33901],{"class":207},"        super",[162,33903,33904],{"class":168},"(LeNet,",[162,33906,33907],{"class":207},"self",[162,33909,33910],{"class":168},").",[162,33912,33913],{"class":207},"__init__",[162,33915,1526],{"class":168},[162,33917,33918],{"class":164,"line":2984},[162,33919,301],{"emptyLinePlaceholder":300},[162,33921,33922],{"class":164,"line":2989},[162,33923,33924],{"class":361},"        # 定义网络层\n",[162,33926,33927,33930,33933,33935,33938,33941,33943,33945,33947,33950,33952,33954,33956,33959,33961,33963,33965,33968,33970,33972],{"class":164,"line":3011},[162,33928,33929],{"class":207},"        self",[162,33931,33932],{"class":168},".c1",[162,33934,173],{"class":172},[162,33936,33937],{"class":168},"nn.Conv2d(",[162,33939,33940],{"class":671},"in_channels",[162,33942,173],{"class":172},[162,33944,208],{"class":207},[162,33946,3670],{"class":168},[162,33948,33949],{"class":671},"out_channels",[162,33951,173],{"class":172},[162,33953,1314],{"class":207},[162,33955,3670],{"class":168},[162,33957,33958],{"class":671},"kernel_size",[162,33960,173],{"class":172},[162,33962,637],{"class":207},[162,33964,3670],{"class":168},[162,33966,33967],{"class":671},"padding",[162,33969,173],{"class":172},[162,33971,213],{"class":207},[162,33973,434],{"class":168},[162,33975,33976,33978,33981,33983],{"class":164,"line":3022},[162,33977,33929],{"class":207},[162,33979,33980],{"class":168},".sig",[162,33982,173],{"class":172},[162,33984,33985],{"class":168},"nn.Sigmoid()\n",[162,33987,33988],{"class":164,"line":3027},[162,33989,33990],{"class":361},"        # 定义池化\n",[162,33992,33993,33995,33998,34000,34003,34005,34007,34009,34011,34014,34016,34018],{"class":164,"line":3046},[162,33994,33929],{"class":207},[162,33996,33997],{"class":168},".s2",[162,33999,173],{"class":172},[162,34001,34002],{"class":168},"nn.AvgPool2d(",[162,34004,33958],{"class":671},[162,34006,173],{"class":172},[162,34008,213],{"class":207},[162,34010,3670],{"class":168},[162,34012,34013],{"class":671},"stride",[162,34015,173],{"class":172},[162,34017,213],{"class":207},[162,34019,434],{"class":168},[162,34021,34022,34024,34027,34029,34031,34033,34035,34037,34039,34041,34043,34045,34047,34049,34051,34053],{"class":164,"line":3052},[162,34023,33929],{"class":207},[162,34025,34026],{"class":168},".c3",[162,34028,173],{"class":172},[162,34030,33937],{"class":168},[162,34032,33940],{"class":671},[162,34034,173],{"class":172},[162,34036,1314],{"class":207},[162,34038,3670],{"class":168},[162,34040,33949],{"class":671},[162,34042,173],{"class":172},[162,34044,3888],{"class":207},[162,34046,3670],{"class":168},[162,34048,33958],{"class":671},[162,34050,173],{"class":172},[162,34052,637],{"class":207},[162,34054,434],{"class":168},[162,34056,34057,34059,34062,34064,34066,34068,34070,34072,34074,34076,34078,34080],{"class":164,"line":3057},[162,34058,33929],{"class":207},[162,34060,34061],{"class":168},".s4",[162,34063,173],{"class":172},[162,34065,34002],{"class":168},[162,34067,33958],{"class":671},[162,34069,173],{"class":172},[162,34071,213],{"class":207},[162,34073,3670],{"class":168},[162,34075,34013],{"class":671},[162,34077,173],{"class":172},[162,34079,213],{"class":207},[162,34081,434],{"class":168},[162,34083,34084],{"class":164,"line":3072},[162,34085,34086],{"class":361},"        # 定义平展层\n",[162,34088,34089,34091,34094,34096],{"class":164,"line":3077},[162,34090,33929],{"class":207},[162,34092,34093],{"class":168},".flatten",[162,34095,173],{"class":172},[162,34097,34098],{"class":168},"nn.Flatten()\n",[162,34100,34101],{"class":164,"line":3100},[162,34102,34103],{"class":361},"        # 定义全连接层\n",[162,34105,34106,34108,34111,34113,34116,34118,34120,34122],{"class":164,"line":3140},[162,34107,33929],{"class":207},[162,34109,34110],{"class":168},".f5",[162,34112,173],{"class":172},[162,34114,34115],{"class":168},"nn.Linear(",[162,34117,7100],{"class":207},[162,34119,3670],{"class":168},[162,34121,4098],{"class":207},[162,34123,434],{"class":168},[162,34125,34126,34128,34131,34133,34135,34137,34139,34141],{"class":164,"line":4878},[162,34127,33929],{"class":207},[162,34129,34130],{"class":168},".f6",[162,34132,173],{"class":172},[162,34134,34115],{"class":168},[162,34136,4098],{"class":207},[162,34138,3670],{"class":168},[162,34140,3994],{"class":207},[162,34142,434],{"class":168},[162,34144,34145,34147,34150,34152,34154,34156,34158,34160],{"class":164,"line":4883},[162,34146,33929],{"class":207},[162,34148,34149],{"class":168},".f7",[162,34151,173],{"class":172},[162,34153,34115],{"class":168},[162,34155,3994],{"class":207},[162,34157,3670],{"class":168},[162,34159,1006],{"class":207},[162,34161,434],{"class":168},[162,34163,34164],{"class":164,"line":4897},[162,34165,301],{"emptyLinePlaceholder":300},[162,34167,34168],{"class":164,"line":4902},[162,34169,34170],{"class":361},"    # 写工具->写前向传播\n",[162,34172,34173,34175,34178],{"class":164,"line":5694},[162,34174,33885],{"class":172},[162,34176,34177],{"class":5082}," forward",[162,34179,34180],{"class":168},"(self,x):\n",[162,34182,34183,34186,34188,34190,34193,34195],{"class":164,"line":5708},[162,34184,34185],{"class":168},"        x",[162,34187,173],{"class":172},[162,34189,33907],{"class":207},[162,34191,34192],{"class":168},".sig(",[162,34194,33907],{"class":207},[162,34196,34197],{"class":168},".c1(x))\n",[162,34199,34200,34202,34204,34206],{"class":164,"line":5716},[162,34201,34185],{"class":168},[162,34203,173],{"class":172},[162,34205,33907],{"class":207},[162,34207,34208],{"class":168},".s2(x)\n",[162,34210,34211,34213,34215,34217,34219,34221],{"class":164,"line":5721},[162,34212,34185],{"class":168},[162,34214,173],{"class":172},[162,34216,33907],{"class":207},[162,34218,34192],{"class":168},[162,34220,33907],{"class":207},[162,34222,34223],{"class":168},".c3(x))\n",[162,34225,34226,34228,34230,34232],{"class":164,"line":5727},[162,34227,34185],{"class":168},[162,34229,173],{"class":172},[162,34231,33907],{"class":207},[162,34233,34234],{"class":168},".s4(x)\n",[162,34236,34237,34239,34241,34243],{"class":164,"line":5733},[162,34238,34185],{"class":168},[162,34240,173],{"class":172},[162,34242,33907],{"class":207},[162,34244,34245],{"class":168},".flatten(x)\n",[162,34247,34248,34250,34252,34254,34256,34258],{"class":164,"line":5738},[162,34249,34185],{"class":168},[162,34251,173],{"class":172},[162,34253,33907],{"class":207},[162,34255,34192],{"class":168},[162,34257,33907],{"class":207},[162,34259,34260],{"class":168},".f5(x))\n",[162,34262,34263,34265,34267,34269,34271,34273],{"class":164,"line":11052},[162,34264,34185],{"class":168},[162,34266,173],{"class":172},[162,34268,33907],{"class":207},[162,34270,34192],{"class":168},[162,34272,33907],{"class":207},[162,34274,34275],{"class":168},".f6(x))\n",[162,34277,34278,34280,34282,34284],{"class":164,"line":11076},[162,34279,34185],{"class":168},[162,34281,173],{"class":172},[162,34283,33907],{"class":207},[162,34285,34286],{"class":168},".f7(x)\n",[162,34288,34289,34291],{"class":164,"line":11081},[162,34290,17846],{"class":172},[162,34292,34293],{"class":168}," x\n",[162,34295,34296],{"class":164,"line":11087},[162,34297,301],{"emptyLinePlaceholder":300},[162,34299,34300,34302,34305,34307,34310],{"class":164,"line":11114},[162,34301,2703],{"class":172},[162,34303,34304],{"class":207}," __name__",[162,34306,2292],{"class":172},[162,34308,34309],{"class":179},"\"__main__\"",[162,34311,2316],{"class":168},[162,34313,34314],{"class":164,"line":11119},[162,34315,34316],{"class":361},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[162,34318,34319,34322,34324,34326,34329,34331,34334,34336,34338],{"class":164,"line":11125},[162,34320,34321],{"class":168},"    device",[162,34323,173],{"class":172},[162,34325,33536],{"class":168},[162,34327,34328],{"class":179},"\"cuda\"",[162,34330,4828],{"class":172},[162,34332,34333],{"class":168}," torch.cuda.is_available() ",[162,34335,2313],{"class":172},[162,34337,33561],{"class":179},[162,34339,434],{"class":168},[162,34341,34342],{"class":164,"line":11137},[162,34343,34344],{"class":361},"    # 如果就是想指定用cpu用下方代码:\n",[162,34346,34347],{"class":164,"line":11149},[162,34348,34349],{"class":361},"    # device=\"cpu\"\n",[162,34351,34352],{"class":164,"line":11161},[162,34353,34354],{"class":361},"    # print(device)\n",[162,34356,34357],{"class":164,"line":12816},[162,34358,301],{"emptyLinePlaceholder":300},[162,34360,34361],{"class":164,"line":12841},[162,34362,34363],{"class":361},"    # 实例化模型\n",[162,34365,34366],{"class":164,"line":12864},[162,34367,34368],{"class":361},"    # 将模型放到设备中去运行\n",[162,34370,34371,34374,34376],{"class":164,"line":12888},[162,34372,34373],{"class":168},"    model",[162,34375,173],{"class":172},[162,34377,34378],{"class":168},"LeNet().to(device)\n",[162,34380,34381,34383,34386,34388,34390,34392,34394,34396],{"class":164,"line":12893},[162,34382,822],{"class":207},[162,34384,34385],{"class":168},"(summary(model,(",[162,34387,208],{"class":207},[162,34389,3670],{"class":168},[162,34391,4178],{"class":207},[162,34393,3670],{"class":168},[162,34395,4178],{"class":207},[162,34397,34398],{"class":168},")))\n",[19,34400,34401],{},[4602,34402],{"alt":158,"src":34403},"\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,34405,34406],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[1452,34408,34409],{"start":197},[1455,34410,34411],{},"训练",[19,34413,34414],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,34416,34417],{},"在训练之前可以将数据展示看一下",[153,34419,34421],{"className":155,"code":34420,"language":157,"meta":158,"style":158},"# 建立画图的函数，用于展示数据\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",[71,34422,34423,34428,34433,34445,34457,34470,34475,34487,34492,34504,34509,34521,34525,34529,34549,34560,34565,34586,34597,34601,34606,34624,34635,34640,34651,34656,34667,34671,34676,34690,34703,34707,34712,34725,34738,34751,34756,34760,34765,34785,34802,34822,34835,34848,34858,34873],{"__ignoreMap":158},[162,34424,34425],{"class":164,"line":165},[162,34426,34427],{"class":361},"# 建立画图的函数，用于展示数据\n",[162,34429,34430],{"class":164,"line":197},[162,34431,34432],{"class":361},"# torchvision中包含很多内置的数据集\n",[162,34434,34435,34437,34440,34442],{"class":164,"line":228},[162,34436,33821],{"class":172},[162,34438,34439],{"class":168}," sklearn.externals.array_api_compat.torch ",[162,34441,33478],{"class":172},[162,34443,34444],{"class":168}," squeeze\n",[162,34446,34447,34449,34452,34454],{"class":164,"line":252},[162,34448,33821],{"class":172},[162,34450,34451],{"class":168}," torchvision.datasets ",[162,34453,33478],{"class":172},[162,34455,34456],{"class":168}," FashionMNIST\n",[162,34458,34459,34461,34464,34467],{"class":164,"line":328},[162,34460,33478],{"class":172},[162,34462,34463],{"class":168}," numpy ",[162,34465,34466],{"class":172},"as",[162,34468,34469],{"class":168}," np\n",[162,34471,34472],{"class":164,"line":466},[162,34473,34474],{"class":361},"# 引入处理数据集的包\n",[162,34476,34477,34479,34482,34484],{"class":164,"line":471},[162,34478,33821],{"class":172},[162,34480,34481],{"class":168}," torchvision ",[162,34483,33478],{"class":172},[162,34485,34486],{"class":168}," transforms\n",[162,34488,34489],{"class":164,"line":687},[162,34490,34491],{"class":361},"# 从torch库中引入数据处理的包\n",[162,34493,34494,34496,34499,34501],{"class":164,"line":692},[162,34495,33478],{"class":172},[162,34497,34498],{"class":168}," torch.utils.data ",[162,34500,34466],{"class":172},[162,34502,34503],{"class":168}," Data\n",[162,34505,34506],{"class":164,"line":698},[162,34507,34508],{"class":361},"# 导入画图的库\n",[162,34510,34511,34513,34516,34518],{"class":164,"line":2955},[162,34512,33478],{"class":172},[162,34514,34515],{"class":168}," matplotlib.pyplot ",[162,34517,34466],{"class":172},[162,34519,34520],{"class":168}," plt\n",[162,34522,34523],{"class":164,"line":2960},[162,34524,301],{"emptyLinePlaceholder":300},[162,34526,34527],{"class":164,"line":2971},[162,34528,301],{"emptyLinePlaceholder":300},[162,34530,34531,34534,34536,34539,34542,34544,34547],{"class":164,"line":2984},[162,34532,34533],{"class":168},"train_data",[162,34535,173],{"class":172},[162,34537,34538],{"class":168},"FashionMNIST(",[162,34540,34541],{"class":671},"root",[162,34543,173],{"class":172},[162,34545,34546],{"class":179},"'.\u002Fdata'",[162,34548,1735],{"class":168},[162,34550,34551,34554,34556,34558],{"class":164,"line":2989},[162,34552,34553],{"class":671},"                        train",[162,34555,173],{"class":172},[162,34557,247],{"class":207},[162,34559,1735],{"class":168},[162,34561,34562],{"class":164,"line":3011},[162,34563,34564],{"class":361},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[162,34566,34567,34570,34572,34575,34578,34580,34583],{"class":164,"line":3022},[162,34568,34569],{"class":671},"                        transform",[162,34571,173],{"class":172},[162,34573,34574],{"class":168},"transforms.Compose([transforms.Resize(",[162,34576,34577],{"class":671},"size",[162,34579,173],{"class":172},[162,34581,34582],{"class":207},"224",[162,34584,34585],{"class":168},"),transforms.ToTensor()]),\n",[162,34587,34588,34591,34593,34595],{"class":164,"line":3027},[162,34589,34590],{"class":671},"                        download",[162,34592,173],{"class":172},[162,34594,247],{"class":207},[162,34596,434],{"class":168},[162,34598,34599],{"class":164,"line":3046},[162,34600,301],{"emptyLinePlaceholder":300},[162,34602,34603],{"class":164,"line":3052},[162,34604,34605],{"class":361},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[162,34607,34608,34611,34613,34616,34619,34621],{"class":164,"line":3057},[162,34609,34610],{"class":168},"train_loader",[162,34612,173],{"class":172},[162,34614,34615],{"class":168},"Data.DataLoader(",[162,34617,34618],{"class":671},"dataset",[162,34620,173],{"class":172},[162,34622,34623],{"class":168},"train_data,\n",[162,34625,34626,34629,34631,34633],{"class":164,"line":3072},[162,34627,34628],{"class":671},"                             batch_size",[162,34630,173],{"class":172},[162,34632,3504],{"class":207},[162,34634,1735],{"class":168},[162,34636,34637],{"class":164,"line":3077},[162,34638,34639],{"class":361},"                             # 数据是否打乱\n",[162,34641,34642,34645,34647,34649],{"class":164,"line":3100},[162,34643,34644],{"class":671},"                             shuffle",[162,34646,173],{"class":172},[162,34648,247],{"class":207},[162,34650,1735],{"class":168},[162,34652,34653],{"class":164,"line":3140},[162,34654,34655],{"class":361},"                             # 规定加载数据的进程\n",[162,34657,34658,34661,34663,34665],{"class":164,"line":4878},[162,34659,34660],{"class":671},"                             num_workers",[162,34662,173],{"class":172},[162,34664,312],{"class":207},[162,34666,434],{"class":168},[162,34668,34669],{"class":164,"line":4883},[162,34670,301],{"emptyLinePlaceholder":300},[162,34672,34673],{"class":164,"line":4897},[162,34674,34675],{"class":361},"# 获得一个batch的数据\n",[162,34677,34678,34680,34683,34685,34687],{"class":164,"line":4902},[162,34679,808],{"class":172},[162,34681,34682],{"class":168}," step,(b_x,b_y) ",[162,34684,814],{"class":172},[162,34686,845],{"class":207},[162,34688,34689],{"class":168},"(train_loader):\n",[162,34691,34692,34694,34697,34699,34701],{"class":164,"line":5694},[162,34693,2283],{"class":172},[162,34695,34696],{"class":168}," step ",[162,34698,3000],{"class":172},[162,34700,2717],{"class":207},[162,34702,2316],{"class":168},[162,34704,34705],{"class":164,"line":5708},[162,34706,2308],{"class":172},[162,34708,34709],{"class":164,"line":5716},[162,34710,34711],{"class":361},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[162,34713,34714,34717,34719,34722],{"class":164,"line":5721},[162,34715,34716],{"class":168},"batch_x",[162,34718,173],{"class":172},[162,34720,34721],{"class":168},"b_x.squeeze().numpy()  ",[162,34723,34724],{"class":361},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[162,34726,34727,34730,34732,34735],{"class":164,"line":5727},[162,34728,34729],{"class":168},"batch_y",[162,34731,173],{"class":172},[162,34733,34734],{"class":168},"b_y.numpy()   ",[162,34736,34737],{"class":361},"#将张量转换成功numpy数组\n",[162,34739,34740,34743,34745,34748],{"class":164,"line":5733},[162,34741,34742],{"class":168},"class_label",[162,34744,173],{"class":172},[162,34746,34747],{"class":168},"train_data.classes  ",[162,34749,34750],{"class":361},"#训练集标签\n",[162,34752,34753],{"class":164,"line":5738},[162,34754,34755],{"class":361},"# print(class_label)\n",[162,34757,34758],{"class":164,"line":11052},[162,34759,301],{"emptyLinePlaceholder":300},[162,34761,34762],{"class":164,"line":11076},[162,34763,34764],{"class":361},"# 可视化一个batch的图像\n",[162,34766,34767,34770,34773,34775,34777,34779,34781,34783],{"class":164,"line":11081},[162,34768,34769],{"class":168},"plt.figure(",[162,34771,34772],{"class":671},"figsize",[162,34774,173],{"class":172},[162,34776,604],{"class":168},[162,34778,3788],{"class":207},[162,34780,3670],{"class":168},[162,34782,637],{"class":207},[162,34784,586],{"class":168},[162,34786,34787,34789,34792,34794,34797,34799],{"class":164,"line":11087},[162,34788,808],{"class":172},[162,34790,34791],{"class":168}," ii ",[162,34793,814],{"class":172},[162,34795,34796],{"class":168}," np.arange(",[162,34798,607],{"class":207},[162,34800,34801],{"class":168},"(batch_y)):\n",[162,34803,34804,34807,34809,34811,34813,34816,34818,34820],{"class":164,"line":11114},[162,34805,34806],{"class":168},"    plt.subplot(",[162,34808,223],{"class":207},[162,34810,3670],{"class":168},[162,34812,3888],{"class":207},[162,34814,34815],{"class":168},",ii ",[162,34817,3771],{"class":172},[162,34819,28210],{"class":207},[162,34821,434],{"class":168},[162,34823,34824,34827,34830,34832],{"class":164,"line":11119},[162,34825,34826],{"class":168},"    plt.imshow(batch_x[ii,:,:],",[162,34828,34829],{"class":671},"cmap",[162,34831,173],{"class":172},[162,34833,34834],{"class":168},"plt.cm.gray)\n",[162,34836,34837,34840,34842,34844,34846],{"class":164,"line":11125},[162,34838,34839],{"class":168},"    plt.title(class_label[batch_y[ii]],",[162,34841,34577],{"class":671},[162,34843,173],{"class":172},[162,34845,1006],{"class":207},[162,34847,434],{"class":168},[162,34849,34850,34853,34856],{"class":164,"line":11137},[162,34851,34852],{"class":168},"    plt.axis(",[162,34854,34855],{"class":179},"\"off\"",[162,34857,434],{"class":168},[162,34859,34860,34863,34866,34868,34871],{"class":164,"line":11149},[162,34861,34862],{"class":168},"    plt.subplots_adjust(",[162,34864,34865],{"class":671},"wspace",[162,34867,173],{"class":172},[162,34869,34870],{"class":207},"0.05",[162,34872,434],{"class":168},[162,34874,34875],{"class":164,"line":11161},[162,34876,34877],{"class":168},"plt.show()\n",[19,34879,34880],{},"用matplotlib进行展示的过程可以后续再补",[19,34882,34883],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,34885,34886],{},"训练次数就是按照批次过整个训练集数据的次数",[19,34888,34889],{},"模型训练：",[153,34891,34893],{"className":155,"code":34892,"language":157,"meta":158,"style":158},"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",[71,34894,34895,34902,34909,34913,34925,34931,34942,34952,34962,34972,34982,34987,34999,35009,35013,35017,35022,35033,35046,35057,35074,35085,35124,35140,35152,35163,35168,35179,35195,35206,35217,35228,35235,35239,35244,35249,35253,35258,35268,35289,35293,35297,35302,35307,35312,35332,35336,35341,35351,35355,35360,35369,35374,35379,35384,35394,35398,35402,35407,35412,35422,35427,35437,35442,35451,35456,35465,35470,35479,35483,35488,35498,35502,35506,35511,35525,35551,35566,35570,35575,35580,35589,35594,35603,35608,35617,35622,35631,35636,35645,35650,35659,35664,35677,35682,35692,35697,35707,35713,35719,35725,35731,35742,35748,35768,35774,35785,35791,35797,35803,35809,35815,35821,35827,35847,35853,35869,35875,35889,35895,35910,35916,35925,35931,35940,35946,35952,35961,35967,35978,35984,36003,36009,36020,36026,36046,36062,36068,36082,36088,36094,36105,36111,36117,36127,36133,36144,36150,36160,36165,36171,36220,36267,36272,36278,36297,36303,36322,36328,36334,36344,36349,36355,36371,36416,36422,36428,36434,36445,36451,36457,36463,36481,36495,36504,36513,36522,36531,36537,36543,36551,36556,36562,36573,36579,36599,36605,36611,36617,36634,36640,36646,36652,36658,36664,36691,36715,36721,36727,36733,36744,36755,36761,36778,36801,36824,36830,36835,36844,36854,36860,36865,36871,36884,36890,36901,36912,36931],{"__ignoreMap":158},[162,34896,34897,34899],{"class":164,"line":165},[162,34898,33478],{"class":172},[162,34900,34901],{"class":168}," copy\n",[162,34903,34904,34906],{"class":164,"line":197},[162,34905,33478],{"class":172},[162,34907,34908],{"class":168}," time\n",[162,34910,34911],{"class":164,"line":228},[162,34912,301],{"emptyLinePlaceholder":300},[162,34914,34915,34917,34920,34922],{"class":164,"line":252},[162,34916,33478],{"class":172},[162,34918,34919],{"class":168}," pandas ",[162,34921,34466],{"class":172},[162,34923,34924],{"class":168}," pd\n",[162,34926,34927,34929],{"class":164,"line":328},[162,34928,33478],{"class":172},[162,34930,33481],{"class":168},[162,34932,34933,34935,34937,34939],{"class":164,"line":466},[162,34934,33821],{"class":172},[162,34936,34498],{"class":168},[162,34938,33478],{"class":172},[162,34940,34941],{"class":168}," Dataset\n",[162,34943,34944,34946,34948,34950],{"class":164,"line":471},[162,34945,33821],{"class":172},[162,34947,34451],{"class":168},[162,34949,33478],{"class":172},[162,34951,34456],{"class":168},[162,34953,34954,34956,34958,34960],{"class":164,"line":687},[162,34955,33821],{"class":172},[162,34957,34481],{"class":168},[162,34959,33478],{"class":172},[162,34961,34486],{"class":168},[162,34963,34964,34966,34968,34970],{"class":164,"line":692},[162,34965,33478],{"class":172},[162,34967,34498],{"class":168},[162,34969,34466],{"class":172},[162,34971,34503],{"class":168},[162,34973,34974,34976,34978,34980],{"class":164,"line":698},[162,34975,33478],{"class":172},[162,34977,34515],{"class":168},[162,34979,34466],{"class":172},[162,34981,34520],{"class":168},[162,34983,34984],{"class":164,"line":2955},[162,34985,34986],{"class":361},"# 导入模型\n",[162,34988,34989,34991,34994,34996],{"class":164,"line":2960},[162,34990,33821],{"class":172},[162,34992,34993],{"class":168}," model ",[162,34995,33478],{"class":172},[162,34997,34998],{"class":168}," LeNet\n",[162,35000,35001,35003,35005,35007],{"class":164,"line":2971},[162,35002,33821],{"class":172},[162,35004,33824],{"class":168},[162,35006,33478],{"class":172},[162,35008,33829],{"class":168},[162,35010,35011],{"class":164,"line":2984},[162,35012,301],{"emptyLinePlaceholder":300},[162,35014,35015],{"class":164,"line":2989},[162,35016,301],{"emptyLinePlaceholder":300},[162,35018,35019],{"class":164,"line":3011},[162,35020,35021],{"class":361},"# 处理训练集与验证集函数--->划分数据集\n",[162,35023,35024,35027,35030],{"class":164,"line":3022},[162,35025,35026],{"class":172},"def",[162,35028,35029],{"class":5082}," train_val_data_process",[162,35031,35032],{"class":168},"():\n",[162,35034,35035,35038,35040,35042,35044],{"class":164,"line":3027},[162,35036,35037],{"class":168},"    train_data",[162,35039,173],{"class":172},[162,35041,34538],{"class":168},[162,35043,34546],{"class":179},[162,35045,1735],{"class":168},[162,35047,35048,35051,35053,35055],{"class":164,"line":3046},[162,35049,35050],{"class":671},"                            train",[162,35052,173],{"class":172},[162,35054,247],{"class":207},[162,35056,1735],{"class":168},[162,35058,35059,35062,35064,35066,35068,35070,35072],{"class":164,"line":3052},[162,35060,35061],{"class":671},"                            transform",[162,35063,173],{"class":172},[162,35065,34574],{"class":168},[162,35067,34577],{"class":671},[162,35069,173],{"class":172},[162,35071,4178],{"class":207},[162,35073,34585],{"class":168},[162,35075,35076,35079,35081,35083],{"class":164,"line":3057},[162,35077,35078],{"class":671},"                            download",[162,35080,173],{"class":172},[162,35082,247],{"class":207},[162,35084,434],{"class":168},[162,35086,35087,35090,35092,35095,35098,35100,35103,35105,35107,35110,35112,35114,35117,35119,35121],{"class":164,"line":3072},[162,35088,35089],{"class":168},"    train_data,val_data",[162,35091,173],{"class":172},[162,35093,35094],{"class":168},"Data.random_split(train_data,[",[162,35096,35097],{"class":207},"round",[162,35099,604],{"class":168},[162,35101,35102],{"class":207},"0.8",[162,35104,3745],{"class":172},[162,35106,607],{"class":207},[162,35108,35109],{"class":168},"(train_data)),",[162,35111,35097],{"class":207},[162,35113,604],{"class":168},[162,35115,35116],{"class":207},"0.2",[162,35118,3745],{"class":172},[162,35120,607],{"class":207},[162,35122,35123],{"class":168},"(train_data))])\n",[162,35125,35126,35129,35131,35134,35136,35138],{"class":164,"line":3077},[162,35127,35128],{"class":168},"    train_dataloader ",[162,35130,173],{"class":172},[162,35132,35133],{"class":168}," Data.DataLoader(",[162,35135,34618],{"class":671},[162,35137,173],{"class":172},[162,35139,34623],{"class":168},[162,35141,35142,35145,35147,35150],{"class":164,"line":3100},[162,35143,35144],{"class":671},"                                       batch_size",[162,35146,173],{"class":172},[162,35148,35149],{"class":207},"128",[162,35151,1735],{"class":168},[162,35153,35154,35157,35159,35161],{"class":164,"line":3140},[162,35155,35156],{"class":671},"                                       shuffle",[162,35158,173],{"class":172},[162,35160,247],{"class":207},[162,35162,1735],{"class":168},[162,35164,35165],{"class":164,"line":4878},[162,35166,35167],{"class":361},"                                       # 规定8个进程\n",[162,35169,35170,35173,35175,35177],{"class":164,"line":4883},[162,35171,35172],{"class":671},"                                       num_workers",[162,35174,173],{"class":172},[162,35176,3687],{"class":207},[162,35178,434],{"class":168},[162,35180,35181,35184,35186,35188,35190,35192],{"class":164,"line":4897},[162,35182,35183],{"class":168},"    val_dataloader",[162,35185,173],{"class":172},[162,35187,34615],{"class":168},[162,35189,34618],{"class":671},[162,35191,173],{"class":172},[162,35193,35194],{"class":168},"val_data,\n",[162,35196,35197,35200,35202,35204],{"class":164,"line":4902},[162,35198,35199],{"class":671},"                                   batch_size",[162,35201,173],{"class":172},[162,35203,35149],{"class":207},[162,35205,1735],{"class":168},[162,35207,35208,35211,35213,35215],{"class":164,"line":5694},[162,35209,35210],{"class":671},"                                   shuffle",[162,35212,173],{"class":172},[162,35214,247],{"class":207},[162,35216,1735],{"class":168},[162,35218,35219,35222,35224,35226],{"class":164,"line":5708},[162,35220,35221],{"class":671},"                                   num_workers",[162,35223,173],{"class":172},[162,35225,3687],{"class":207},[162,35227,434],{"class":168},[162,35229,35230,35232],{"class":164,"line":5716},[162,35231,7203],{"class":172},[162,35233,35234],{"class":168}," train_dataloader,val_dataloader\n",[162,35236,35237],{"class":164,"line":5721},[162,35238,301],{"emptyLinePlaceholder":300},[162,35240,35241],{"class":164,"line":5727},[162,35242,35243],{"class":361},"# 验证是否出错\n",[162,35245,35246],{"class":164,"line":5733},[162,35247,35248],{"class":361},"# train_val_data_process()\n",[162,35250,35251],{"class":164,"line":5738},[162,35252,301],{"emptyLinePlaceholder":300},[162,35254,35255],{"class":164,"line":11052},[162,35256,35257],{"class":361},"# 定义模型训练函数\n",[162,35259,35260,35262,35265],{"class":164,"line":11076},[162,35261,35026],{"class":172},[162,35263,35264],{"class":5082}," train_model_process",[162,35266,35267],{"class":168},"(model,train_dataloader,val_dataloader,num_epochs):\n",[162,35269,35270,35272,35274,35276,35278,35280,35282,35284,35287],{"class":164,"line":11081},[162,35271,34321],{"class":168},[162,35273,173],{"class":172},[162,35275,33536],{"class":168},[162,35277,34328],{"class":179},[162,35279,4828],{"class":172},[162,35281,34333],{"class":168},[162,35283,2313],{"class":172},[162,35285,35286],{"class":179}," 'cpu'",[162,35288,434],{"class":168},[162,35290,35291],{"class":164,"line":11087},[162,35292,301],{"emptyLinePlaceholder":300},[162,35294,35295],{"class":164,"line":11114},[162,35296,301],{"emptyLinePlaceholder":300},[162,35298,35299],{"class":164,"line":11119},[162,35300,35301],{"class":361},"    # 定义优化器\n",[162,35303,35304],{"class":164,"line":11125},[162,35305,35306],{"class":361},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[162,35308,35309],{"class":164,"line":11137},[162,35310,35311],{"class":361},"    # lr为学习率\n",[162,35313,35314,35317,35319,35322,35325,35327,35330],{"class":164,"line":11149},[162,35315,35316],{"class":168},"    optimizer",[162,35318,173],{"class":172},[162,35320,35321],{"class":168},"torch.optim.Adam(model.parameters(),",[162,35323,35324],{"class":671},"lr",[162,35326,173],{"class":172},[162,35328,35329],{"class":207},"0.001",[162,35331,434],{"class":168},[162,35333,35334],{"class":164,"line":11161},[162,35335,301],{"emptyLinePlaceholder":300},[162,35337,35338],{"class":164,"line":12816},[162,35339,35340],{"class":361},"    # 定义损失函数使用交叉熵损失函数\n",[162,35342,35343,35346,35348],{"class":164,"line":12841},[162,35344,35345],{"class":168},"    criterion",[162,35347,173],{"class":172},[162,35349,35350],{"class":168},"nn.CrossEntropyLoss()\n",[162,35352,35353],{"class":164,"line":12864},[162,35354,301],{"emptyLinePlaceholder":300},[162,35356,35357],{"class":164,"line":12888},[162,35358,35359],{"class":361},"    # 将模型放到GPU中进行训练\n",[162,35361,35362,35364,35366],{"class":164,"line":12893},[162,35363,34373],{"class":168},[162,35365,173],{"class":172},[162,35367,35368],{"class":168},"model.to(device)\n",[162,35370,35371],{"class":164,"line":12898},[162,35372,35373],{"class":361},"    # 复制当前模型的参数\n",[162,35375,35376],{"class":164,"line":12903},[162,35377,35378],{"class":361},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[162,35380,35381],{"class":164,"line":12912},[162,35382,35383],{"class":361},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[162,35385,35386,35389,35391],{"class":164,"line":12917},[162,35387,35388],{"class":168},"    best_model_wts",[162,35390,173],{"class":172},[162,35392,35393],{"class":168},"copy.deepcopy(model.state_dict())\n",[162,35395,35396],{"class":164,"line":12923},[162,35397,301],{"emptyLinePlaceholder":300},[162,35399,35400],{"class":164,"line":12944},[162,35401,301],{"emptyLinePlaceholder":300},[162,35403,35404],{"class":164,"line":12950},[162,35405,35406],{"class":361},"    # 初始化参数\n",[162,35408,35409],{"class":164,"line":12964},[162,35410,35411],{"class":361},"    # 最高准确度\n",[162,35413,35414,35417,35419],{"class":164,"line":12970},[162,35415,35416],{"class":168},"    best_acc",[162,35418,173],{"class":172},[162,35420,35421],{"class":207},"0.0\n",[162,35423,35424],{"class":164,"line":12997},[162,35425,35426],{"class":361},"    # 训练集损失列表\n",[162,35428,35429,35432,35434],{"class":164,"line":13006},[162,35430,35431],{"class":168},"    train_loss_all",[162,35433,173],{"class":172},[162,35435,35436],{"class":168},"[]\n",[162,35438,35439],{"class":164,"line":13012},[162,35440,35441],{"class":361},"    # 验证集函数列表\n",[162,35443,35444,35447,35449],{"class":164,"line":13020},[162,35445,35446],{"class":168},"    val_loss_all",[162,35448,173],{"class":172},[162,35450,35436],{"class":168},[162,35452,35453],{"class":164,"line":13025},[162,35454,35455],{"class":361},"    # 训练集准确度列表\n",[162,35457,35458,35461,35463],{"class":164,"line":19695},[162,35459,35460],{"class":168},"    train_acc_all",[162,35462,173],{"class":172},[162,35464,35436],{"class":168},[162,35466,35467],{"class":164,"line":19701},[162,35468,35469],{"class":361},"    # 验证集准确度列表\n",[162,35471,35472,35475,35477],{"class":164,"line":19724},[162,35473,35474],{"class":168},"    val_acc_all",[162,35476,173],{"class":172},[162,35478,35436],{"class":168},[162,35480,35481],{"class":164,"line":19730},[162,35482,301],{"emptyLinePlaceholder":300},[162,35484,35485],{"class":164,"line":19753},[162,35486,35487],{"class":361},"    # 保存当前时间--->方便看每轮训练的时间\n",[162,35489,35490,35493,35495],{"class":164,"line":19767},[162,35491,35492],{"class":168},"    since",[162,35494,173],{"class":172},[162,35496,35497],{"class":168},"time.time()\n",[162,35499,35500],{"class":164,"line":19787},[162,35501,301],{"emptyLinePlaceholder":300},[162,35503,35504],{"class":164,"line":19793},[162,35505,301],{"emptyLinePlaceholder":300},[162,35507,35508],{"class":164,"line":19804},[162,35509,35510],{"class":361},"    # 准备工作完成--->开始训练模型\n",[162,35512,35513,35515,35518,35520,35522],{"class":164,"line":19827},[162,35514,6315],{"class":172},[162,35516,35517],{"class":168}," epoch ",[162,35519,814],{"class":172},[162,35521,2647],{"class":207},[162,35523,35524],{"class":168},"(num_epochs):\n",[162,35526,35527,35529,35531,35534,35536,35538,35540,35542,35545,35547,35549],{"class":164,"line":19849},[162,35528,2300],{"class":207},[162,35530,604],{"class":168},[162,35532,35533],{"class":179},"\"Epoch ",[162,35535,1532],{"class":207},[162,35537,946],{"class":179},[162,35539,1532],{"class":207},[162,35541,979],{"class":179},[162,35543,35544],{"class":168},".format(epoch,num_epochs",[162,35546,353],{"class":172},[162,35548,208],{"class":207},[162,35550,586],{"class":168},[162,35552,35553,35555,35557,35560,35562,35564],{"class":164,"line":19854},[162,35554,2300],{"class":207},[162,35556,604],{"class":168},[162,35558,35559],{"class":179},"\"-\"",[162,35561,3745],{"class":172},[162,35563,1006],{"class":207},[162,35565,434],{"class":168},[162,35567,35568],{"class":164,"line":19860},[162,35569,301],{"emptyLinePlaceholder":300},[162,35571,35572],{"class":164,"line":19874},[162,35573,35574],{"class":361},"        # 初始化参数\n",[162,35576,35577],{"class":164,"line":19887},[162,35578,35579],{"class":361},"        # 训练集损失函数\n",[162,35581,35582,35585,35587],{"class":164,"line":19892},[162,35583,35584],{"class":168},"        train_loss",[162,35586,173],{"class":172},[162,35588,35421],{"class":207},[162,35590,35591],{"class":164,"line":19906},[162,35592,35593],{"class":361},"        # 训练集准确度\n",[162,35595,35596,35599,35601],{"class":164,"line":19911},[162,35597,35598],{"class":168},"        train_corrects",[162,35600,173],{"class":172},[162,35602,6200],{"class":207},[162,35604,35605],{"class":164,"line":19917},[162,35606,35607],{"class":361},"        # 验证集损失函数\n",[162,35609,35610,35613,35615],{"class":164,"line":19922},[162,35611,35612],{"class":168},"        val_loss",[162,35614,173],{"class":172},[162,35616,35421],{"class":207},[162,35618,35619],{"class":164,"line":19936},[162,35620,35621],{"class":361},"        # 验证集准确度\n",[162,35623,35624,35627,35629],{"class":164,"line":19941},[162,35625,35626],{"class":168},"        val_corrects",[162,35628,173],{"class":172},[162,35630,6200],{"class":207},[162,35632,35633],{"class":164,"line":19946},[162,35634,35635],{"class":361},"        # 训练集样本数量\n",[162,35637,35638,35641,35643],{"class":164,"line":19960},[162,35639,35640],{"class":168},"        train_num",[162,35642,173],{"class":172},[162,35644,6200],{"class":207},[162,35646,35647],{"class":164,"line":19972},[162,35648,35649],{"class":361},"        # 验证集样本数量\n",[162,35651,35652,35655,35657],{"class":164,"line":19977},[162,35653,35654],{"class":168},"        val_num",[162,35656,173],{"class":172},[162,35658,6200],{"class":207},[162,35660,35661],{"class":164,"line":19990},[162,35662,35663],{"class":361},"        # 将数据放到设备,并开始训练\n",[162,35665,35666,35668,35670,35672,35674],{"class":164,"line":19995},[162,35667,6517],{"class":172},[162,35669,34682],{"class":168},[162,35671,814],{"class":172},[162,35673,845],{"class":207},[162,35675,35676],{"class":168},"(train_dataloader):\n",[162,35678,35679],{"class":164,"line":20000},[162,35680,35681],{"class":361},"            # 将特征放入到训练设备\n",[162,35683,35684,35687,35689],{"class":164,"line":20005},[162,35685,35686],{"class":168},"            b_x",[162,35688,173],{"class":172},[162,35690,35691],{"class":168},"b_x.to(device)\n",[162,35693,35694],{"class":164,"line":20018},[162,35695,35696],{"class":361},"            # 将标签放入到训练设备当中\n",[162,35698,35699,35702,35704],{"class":164,"line":20023},[162,35700,35701],{"class":168},"            b_y",[162,35703,173],{"class":172},[162,35705,35706],{"class":168},"b_y.to(device)\n",[162,35708,35710],{"class":164,"line":35709},98,[162,35711,35712],{"class":361},"            # 设置模型为训练模式\n",[162,35714,35716],{"class":164,"line":35715},99,[162,35717,35718],{"class":168},"            model.train()\n",[162,35720,35722],{"class":164,"line":35721},100,[162,35723,35724],{"class":361},"            # 将数据放到模型当中,开始前向传播\n",[162,35726,35728],{"class":164,"line":35727},101,[162,35729,35730],{"class":361},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[162,35732,35734,35737,35739],{"class":164,"line":35733},102,[162,35735,35736],{"class":168},"            output",[162,35738,173],{"class":172},[162,35740,35741],{"class":168},"model(b_x)\n",[162,35743,35745],{"class":164,"line":35744},103,[162,35746,35747],{"class":361},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[162,35749,35751,35754,35756,35759,35762,35764,35766],{"class":164,"line":35750},104,[162,35752,35753],{"class":168},"            pre_lab",[162,35755,173],{"class":172},[162,35757,35758],{"class":168},"torch.argmax(output,",[162,35760,35761],{"class":671},"dim",[162,35763,173],{"class":172},[162,35765,208],{"class":207},[162,35767,434],{"class":168},[162,35769,35771],{"class":164,"line":35770},105,[162,35772,35773],{"class":361},"            # 计算每一个batch的损失函数\n",[162,35775,35777,35780,35782],{"class":164,"line":35776},106,[162,35778,35779],{"class":168},"            loss",[162,35781,173],{"class":172},[162,35783,35784],{"class":168},"criterion(output,b_y)\n",[162,35786,35788],{"class":164,"line":35787},107,[162,35789,35790],{"class":361},"            # 将梯度初始化为0\n",[162,35792,35794],{"class":164,"line":35793},108,[162,35795,35796],{"class":168},"            optimizer.zero_grad()\n",[162,35798,35800],{"class":164,"line":35799},109,[162,35801,35802],{"class":361},"            # 梯度置为0后再进行反向传播\n",[162,35804,35806],{"class":164,"line":35805},110,[162,35807,35808],{"class":168},"            loss.backward()\n",[162,35810,35812],{"class":164,"line":35811},111,[162,35813,35814],{"class":361},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[162,35816,35818],{"class":164,"line":35817},112,[162,35819,35820],{"class":168},"            optimizer.step()\n",[162,35822,35824],{"class":164,"line":35823},113,[162,35825,35826],{"class":361},"            # loss.item()指的是batch的平均损失\n",[162,35828,35830,35833,35835,35838,35840,35843,35845],{"class":164,"line":35829},114,[162,35831,35832],{"class":168},"            train_loss",[162,35834,926],{"class":172},[162,35836,35837],{"class":168},"loss.item()",[162,35839,3745],{"class":172},[162,35841,35842],{"class":168},"b_x.size(",[162,35844,312],{"class":207},[162,35846,434],{"class":168},[162,35848,35850],{"class":164,"line":35849},115,[162,35851,35852],{"class":361},"            # 计算每个批次中正确预测的数量\n",[162,35854,35856,35859,35861,35864,35866],{"class":164,"line":35855},116,[162,35857,35858],{"class":168},"            train_corrects",[162,35860,926],{"class":172},[162,35862,35863],{"class":168},"torch.sum(pre_lab",[162,35865,2292],{"class":172},[162,35867,35868],{"class":168},"b_y.data)\n",[162,35870,35872],{"class":164,"line":35871},117,[162,35873,35874],{"class":361},"            # 计算目前为止一共处理了多少样本\n",[162,35876,35878,35881,35883,35885,35887],{"class":164,"line":35877},118,[162,35879,35880],{"class":168},"            train_num",[162,35882,926],{"class":172},[162,35884,35842],{"class":168},[162,35886,312],{"class":207},[162,35888,434],{"class":168},[162,35890,35892],{"class":164,"line":35891},119,[162,35893,35894],{"class":361},"        # 验证数据\n",[162,35896,35898,35900,35903,35905,35907],{"class":164,"line":35897},120,[162,35899,6517],{"class":172},[162,35901,35902],{"class":168}," step ,(b_x,b_y) ",[162,35904,814],{"class":172},[162,35906,845],{"class":207},[162,35908,35909],{"class":168},"(val_dataloader):\n",[162,35911,35913],{"class":164,"line":35912},121,[162,35914,35915],{"class":361},"            # 将特征放到验证设备当中\n",[162,35917,35919,35921,35923],{"class":164,"line":35918},122,[162,35920,35686],{"class":168},[162,35922,173],{"class":172},[162,35924,35691],{"class":168},[162,35926,35928],{"class":164,"line":35927},123,[162,35929,35930],{"class":361},"            # 将标签放到放到训练设备当中\n",[162,35932,35934,35936,35938],{"class":164,"line":35933},124,[162,35935,35701],{"class":168},[162,35937,173],{"class":172},[162,35939,35706],{"class":168},[162,35941,35943],{"class":164,"line":35942},125,[162,35944,35945],{"class":361},"            # 开启验证模式，设置模型为评估模式\n",[162,35947,35949],{"class":164,"line":35948},126,[162,35950,35951],{"class":168},"            model.eval()\n",[162,35953,35955,35958],{"class":164,"line":35954},127,[162,35956,35957],{"class":172},"            with",[162,35959,35960],{"class":168}," torch.no_grad():\n",[162,35962,35964],{"class":164,"line":35963},128,[162,35965,35966],{"class":361},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[162,35968,35970,35973,35975],{"class":164,"line":35969},129,[162,35971,35972],{"class":168},"                output ",[162,35974,173],{"class":172},[162,35976,35977],{"class":168}," model(b_x)\n",[162,35979,35981],{"class":164,"line":35980},130,[162,35982,35983],{"class":361},"                # 查找每一行中最大值对应的下标\n",[162,35985,35987,35990,35992,35995,35997,35999,36001],{"class":164,"line":35986},131,[162,35988,35989],{"class":168},"                pre_lab ",[162,35991,173],{"class":172},[162,35993,35994],{"class":168}," torch.argmax(output, ",[162,35996,35761],{"class":671},[162,35998,173],{"class":172},[162,36000,208],{"class":207},[162,36002,434],{"class":168},[162,36004,36006],{"class":164,"line":36005},132,[162,36007,36008],{"class":361},"                # 计算验证集上的当前 batch 损失\n",[162,36010,36012,36015,36017],{"class":164,"line":36011},133,[162,36013,36014],{"class":168},"                val_batch_loss ",[162,36016,173],{"class":172},[162,36018,36019],{"class":168}," criterion(output, b_y)\n",[162,36021,36023],{"class":164,"line":36022},134,[162,36024,36025],{"class":361},"                # 对损失函数进行累加（按样本数加权）\n",[162,36027,36029,36032,36034,36037,36039,36042,36044],{"class":164,"line":36028},135,[162,36030,36031],{"class":168},"                val_loss ",[162,36033,926],{"class":172},[162,36035,36036],{"class":168}," val_batch_loss.item() ",[162,36038,3745],{"class":172},[162,36040,36041],{"class":168}," b_x.size(",[162,36043,312],{"class":207},[162,36045,434],{"class":168},[162,36047,36049,36052,36054,36057,36059],{"class":164,"line":36048},136,[162,36050,36051],{"class":168},"                val_corrects ",[162,36053,926],{"class":172},[162,36055,36056],{"class":168}," torch.sum(pre_lab ",[162,36058,2292],{"class":172},[162,36060,36061],{"class":168}," b_y.data)\n",[162,36063,36065],{"class":164,"line":36064},137,[162,36066,36067],{"class":361},"                # 当前用于验证的样本数量\n",[162,36069,36071,36074,36076,36078,36080],{"class":164,"line":36070},138,[162,36072,36073],{"class":168},"            val_num ",[162,36075,926],{"class":172},[162,36077,36041],{"class":168},[162,36079,312],{"class":207},[162,36081,434],{"class":168},[162,36083,36085],{"class":164,"line":36084},139,[162,36086,36087],{"class":361},"        # 计算并保存每一次迭代的loss值和准确率\n",[162,36089,36091],{"class":164,"line":36090},140,[162,36092,36093],{"class":361},"        # 计算并保存训练集的loss值\n",[162,36095,36097,36100,36102],{"class":164,"line":36096},141,[162,36098,36099],{"class":168},"        train_loss_all.append(train_loss",[162,36101,946],{"class":172},[162,36103,36104],{"class":168},"train_num)\n",[162,36106,36108],{"class":164,"line":36107},142,[162,36109,36110],{"class":361},"        # 取双精度\n",[162,36112,36114],{"class":164,"line":36113},143,[162,36115,36116],{"class":361},"        # 计算并保存训练集的准确率\n",[162,36118,36120,36123,36125],{"class":164,"line":36119},144,[162,36121,36122],{"class":168},"        train_acc_all.append(train_corrects.double().item()",[162,36124,946],{"class":172},[162,36126,36104],{"class":168},[162,36128,36130],{"class":164,"line":36129},145,[162,36131,36132],{"class":361},"        # 计算并保存验证集的loss值\n",[162,36134,36136,36139,36141],{"class":164,"line":36135},146,[162,36137,36138],{"class":168},"        val_loss_all.append(val_loss",[162,36140,946],{"class":172},[162,36142,36143],{"class":168},"val_num)\n",[162,36145,36147],{"class":164,"line":36146},147,[162,36148,36149],{"class":361},"        # 计算并保存验证集的准确率\n",[162,36151,36153,36156,36158],{"class":164,"line":36152},148,[162,36154,36155],{"class":168},"        val_acc_all.append(val_corrects.double().item()",[162,36157,946],{"class":172},[162,36159,36143],{"class":168},[162,36161,36163],{"class":164,"line":36162},149,[162,36164,301],{"emptyLinePlaceholder":300},[162,36166,36168],{"class":164,"line":36167},150,[162,36169,36170],{"class":361},"        # 打印训练一轮的loss值和准确率\n",[162,36172,36174,36176,36178,36180,36182,36185,36187,36190,36192,36195,36197,36199,36201,36203,36206,36208,36210,36213,36215,36217],{"class":164,"line":36173},151,[162,36175,2300],{"class":207},[162,36177,604],{"class":168},[162,36179,6706],{"class":179},[162,36181,1532],{"class":207},[162,36183,36184],{"class":179},"train loss:",[162,36186,967],{"class":207},[162,36188,36189],{"class":172},":.4f",[162,36191,976],{"class":207},[162,36193,36194],{"class":179}," train acc:",[162,36196,967],{"class":207},[162,36198,36189],{"class":172},[162,36200,976],{"class":207},[162,36202,6706],{"class":179},[162,36204,36205],{"class":168},".format(epoch,train_loss_all[",[162,36207,353],{"class":172},[162,36209,208],{"class":207},[162,36211,36212],{"class":168},"],train_acc_all[",[162,36214,353],{"class":172},[162,36216,208],{"class":207},[162,36218,36219],{"class":168},"]))\n",[162,36221,36223,36225,36227,36229,36231,36234,36236,36238,36240,36243,36245,36247,36249,36251,36254,36256,36258,36261,36263,36265],{"class":164,"line":36222},152,[162,36224,2300],{"class":207},[162,36226,604],{"class":168},[162,36228,6706],{"class":179},[162,36230,1532],{"class":207},[162,36232,36233],{"class":179},"val loss:",[162,36235,967],{"class":207},[162,36237,36189],{"class":172},[162,36239,976],{"class":207},[162,36241,36242],{"class":179}," val acc:",[162,36244,967],{"class":207},[162,36246,36189],{"class":172},[162,36248,976],{"class":207},[162,36250,6706],{"class":179},[162,36252,36253],{"class":168},".format(epoch,val_loss_all[",[162,36255,353],{"class":172},[162,36257,208],{"class":207},[162,36259,36260],{"class":168},"],val_acc_all[",[162,36262,353],{"class":172},[162,36264,208],{"class":207},[162,36266,36219],{"class":168},[162,36268,36270],{"class":164,"line":36269},153,[162,36271,301],{"emptyLinePlaceholder":300},[162,36273,36275],{"class":164,"line":36274},154,[162,36276,36277],{"class":361},"        # 判断准确度--->保存最优模型\n",[162,36279,36281,36283,36286,36288,36290,36292,36294],{"class":164,"line":36280},155,[162,36282,5614],{"class":172},[162,36284,36285],{"class":168}," val_acc_all[",[162,36287,353],{"class":172},[162,36289,208],{"class":207},[162,36291,3120],{"class":168},[162,36293,3000],{"class":172},[162,36295,36296],{"class":168},"best_acc:\n",[162,36298,36300],{"class":164,"line":36299},156,[162,36301,36302],{"class":361},"            # 保存当前模型准确度\n",[162,36304,36306,36309,36311,36313,36316,36318,36320],{"class":164,"line":36305},157,[162,36307,36308],{"class":168},"            best_acc:",[162,36310,3354],{"class":207},[162,36312,173],{"class":172},[162,36314,36315],{"class":168},"val_acc_all[",[162,36317,353],{"class":172},[162,36319,208],{"class":207},[162,36321,194],{"class":168},[162,36323,36325],{"class":164,"line":36324},158,[162,36326,36327],{"class":361},"            # 保存当前的准确度\n",[162,36329,36331],{"class":164,"line":36330},159,[162,36332,36333],{"class":361},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[162,36335,36337,36340,36342],{"class":164,"line":36336},160,[162,36338,36339],{"class":168},"            best_model_wts",[162,36341,173],{"class":172},[162,36343,35393],{"class":168},[162,36345,36347],{"class":164,"line":36346},161,[162,36348,301],{"emptyLinePlaceholder":300},[162,36350,36352],{"class":164,"line":36351},162,[162,36353,36354],{"class":361},"        # 计算耗时\n",[162,36356,36358,36361,36363,36366,36368],{"class":164,"line":36357},163,[162,36359,36360],{"class":168},"        time_use",[162,36362,173],{"class":172},[162,36364,36365],{"class":168},"time.time()",[162,36367,353],{"class":172},[162,36369,36370],{"class":168},"since\n",[162,36372,36374,36376,36378,36381,36383,36386,36388,36390,36392,36394,36396,36399,36402,36405,36407,36410,36412,36414],{"class":164,"line":36373},164,[162,36375,2300],{"class":207},[162,36377,604],{"class":168},[162,36379,36380],{"class":179},"'训练和验证耗费的时间",[162,36382,967],{"class":207},[162,36384,36385],{"class":172},":.0f",[162,36387,976],{"class":207},[162,36389,3833],{"class":179},[162,36391,967],{"class":207},[162,36393,36385],{"class":172},[162,36395,976],{"class":207},[162,36397,36398],{"class":179},"s'",[162,36400,36401],{"class":168},".format(time_use",[162,36403,36404],{"class":172},"\u002F\u002F",[162,36406,4184],{"class":207},[162,36408,36409],{"class":168},",time_use",[162,36411,2708],{"class":172},[162,36413,4184],{"class":207},[162,36415,586],{"class":168},[162,36417,36419],{"class":164,"line":36418},165,[162,36420,36421],{"class":361},"    # 选择最优参数\n",[162,36423,36425],{"class":164,"line":36424},166,[162,36426,36427],{"class":361},"    # 加载最高准确率下的模型参数\n",[162,36429,36431],{"class":164,"line":36430},167,[162,36432,36433],{"class":361},"    # model.load_state_dict(best_model_wts)\n",[162,36435,36437,36440,36443],{"class":164,"line":36436},168,[162,36438,36439],{"class":168},"    torch.save(model.state_dict(best_model_wts), ",[162,36441,36442],{"class":179},"'.\u002Fbest_model.pth'",[162,36444,434],{"class":168},[162,36446,36448],{"class":164,"line":36447},169,[162,36449,36450],{"class":361},"    # 或者写成\n",[162,36452,36454],{"class":164,"line":36453},170,[162,36455,36456],{"class":361},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[162,36458,36460],{"class":164,"line":36459},171,[162,36461,36462],{"class":361},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[162,36464,36466,36469,36471,36474,36477,36479],{"class":164,"line":36465},172,[162,36467,36468],{"class":168},"    train_process",[162,36470,173],{"class":172},[162,36472,36473],{"class":168},"pd.DataFrame(",[162,36475,36476],{"class":671},"data",[162,36478,173],{"class":172},[162,36480,4685],{"class":168},[162,36482,36484,36487,36489,36492],{"class":164,"line":36483},173,[162,36485,36486],{"class":179},"        \"epoch\"",[162,36488,1332],{"class":168},[162,36490,36491],{"class":207},"range",[162,36493,36494],{"class":168},"(num_epochs),\n",[162,36496,36498,36501],{"class":164,"line":36497},174,[162,36499,36500],{"class":179},"        \"train_loss_all\"",[162,36502,36503],{"class":168},":train_loss_all,\n",[162,36505,36507,36510],{"class":164,"line":36506},175,[162,36508,36509],{"class":179},"        \"val_loss_all\"",[162,36511,36512],{"class":168},":val_loss_all,\n",[162,36514,36516,36519],{"class":164,"line":36515},176,[162,36517,36518],{"class":179},"        \"train_acc_all\"",[162,36520,36521],{"class":168},":train_acc_all,\n",[162,36523,36525,36528],{"class":164,"line":36524},177,[162,36526,36527],{"class":179},"        \"val_acc_all\"",[162,36529,36530],{"class":168},":val_acc_all\n",[162,36532,36534],{"class":164,"line":36533},178,[162,36535,36536],{"class":168},"    })\n",[162,36538,36540],{"class":164,"line":36539},179,[162,36541,36542],{"class":361},"    # 返回训练保存的过程\n",[162,36544,36546,36548],{"class":164,"line":36545},180,[162,36547,7203],{"class":172},[162,36549,36550],{"class":168}," train_process\n",[162,36552,36554],{"class":164,"line":36553},181,[162,36555,301],{"emptyLinePlaceholder":300},[162,36557,36559],{"class":164,"line":36558},182,[162,36560,36561],{"class":361},"# 将loss值和精度按照图片的形式展示出来\n",[162,36563,36565,36567,36570],{"class":164,"line":36564},183,[162,36566,35026],{"class":172},[162,36568,36569],{"class":5082}," matplot_acc_loss",[162,36571,36572],{"class":168},"(train_process):\n",[162,36574,36576],{"class":164,"line":36575},184,[162,36577,36578],{"class":361},"    # 设置图的大小\n",[162,36580,36582,36585,36587,36589,36591,36593,36595,36597],{"class":164,"line":36581},185,[162,36583,36584],{"class":168},"    plt.figure(",[162,36586,34772],{"class":671},[162,36588,173],{"class":172},[162,36590,604],{"class":168},[162,36592,3788],{"class":207},[162,36594,3670],{"class":168},[162,36596,223],{"class":207},[162,36598,586],{"class":168},[162,36600,36602],{"class":164,"line":36601},186,[162,36603,36604],{"class":361},"    # 设置图中有几张图\n",[162,36606,36608],{"class":164,"line":36607},187,[162,36609,36610],{"class":361},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[162,36612,36614],{"class":164,"line":36613},188,[162,36615,36616],{"class":361},"    # ①loss图\n",[162,36618,36620,36622,36624,36626,36628,36630,36632],{"class":164,"line":36619},189,[162,36621,34806],{"class":168},[162,36623,208],{"class":207},[162,36625,3670],{"class":168},[162,36627,213],{"class":207},[162,36629,3670],{"class":168},[162,36631,208],{"class":207},[162,36633,434],{"class":168},[162,36635,36637],{"class":164,"line":36636},190,[162,36638,36639],{"class":361},"    # 补充:\n",[162,36641,36643],{"class":164,"line":36642},191,[162,36644,36645],{"class":361},"    # plt.subplot(nrows, ncols, index)\n",[162,36647,36649],{"class":164,"line":36648},192,[162,36650,36651],{"class":361},"    # nrows：行数\n",[162,36653,36655],{"class":164,"line":36654},193,[162,36656,36657],{"class":361},"    # ncols：列数\n",[162,36659,36661],{"class":164,"line":36660},194,[162,36662,36663],{"class":361},"    # index：目前选中第几个子图（从1开始）\n",[162,36665,36667,36670,36673,36676,36679,36681,36684,36686,36689],{"class":164,"line":36666},195,[162,36668,36669],{"class":168},"    plt.plot(train_process[",[162,36671,36672],{"class":179},"\"epoch\"",[162,36674,36675],{"class":168},"],train_process.train_loss_all,",[162,36677,36678],{"class":179},"'ro-'",[162,36680,3670],{"class":168},[162,36682,36683],{"class":671},"label",[162,36685,173],{"class":172},[162,36687,36688],{"class":179},"'train loss'",[162,36690,434],{"class":168},[162,36692,36694,36696,36698,36701,36704,36706,36708,36710,36713],{"class":164,"line":36693},196,[162,36695,36669],{"class":168},[162,36697,36672],{"class":179},[162,36699,36700],{"class":168},"],train_process.val_loss_all,",[162,36702,36703],{"class":179},"'bs--'",[162,36705,3670],{"class":168},[162,36707,36683],{"class":671},[162,36709,173],{"class":172},[162,36711,36712],{"class":179},"'val loss'",[162,36714,434],{"class":168},[162,36716,36718],{"class":164,"line":36717},197,[162,36719,36720],{"class":361},"    # 添加一个图例\n",[162,36722,36724],{"class":164,"line":36723},198,[162,36725,36726],{"class":168},"    plt.legend()\n",[162,36728,36730],{"class":164,"line":36729},199,[162,36731,36732],{"class":361},"    # 给轴添加标签\n",[162,36734,36736,36739,36742],{"class":164,"line":36735},200,[162,36737,36738],{"class":168},"    plt.xlabel(",[162,36740,36741],{"class":179},"'epoch'",[162,36743,434],{"class":168},[162,36745,36747,36750,36753],{"class":164,"line":36746},201,[162,36748,36749],{"class":168},"    plt.ylabel(",[162,36751,36752],{"class":179},"'loss'",[162,36754,434],{"class":168},[162,36756,36758],{"class":164,"line":36757},202,[162,36759,36760],{"class":361},"    # ②准确度图\n",[162,36762,36764,36766,36768,36770,36772,36774,36776],{"class":164,"line":36763},203,[162,36765,34806],{"class":168},[162,36767,208],{"class":207},[162,36769,3670],{"class":168},[162,36771,213],{"class":207},[162,36773,3670],{"class":168},[162,36775,213],{"class":207},[162,36777,434],{"class":168},[162,36779,36781,36783,36785,36788,36790,36792,36794,36796,36799],{"class":164,"line":36780},204,[162,36782,36669],{"class":168},[162,36784,36672],{"class":179},[162,36786,36787],{"class":168},"],train_process.train_acc_all,",[162,36789,36678],{"class":179},[162,36791,3670],{"class":168},[162,36793,36683],{"class":671},[162,36795,173],{"class":172},[162,36797,36798],{"class":179},"'train acc'",[162,36800,434],{"class":168},[162,36802,36804,36806,36808,36811,36813,36815,36817,36819,36822],{"class":164,"line":36803},205,[162,36805,36669],{"class":168},[162,36807,36672],{"class":179},[162,36809,36810],{"class":168},"],train_process.val_acc_all,",[162,36812,36703],{"class":179},[162,36814,3670],{"class":168},[162,36816,36683],{"class":671},[162,36818,173],{"class":172},[162,36820,36821],{"class":179},"'val acc'",[162,36823,434],{"class":168},[162,36825,36827],{"class":164,"line":36826},206,[162,36828,36829],{"class":361},"    # 添加图例\n",[162,36831,36833],{"class":164,"line":36832},207,[162,36834,36726],{"class":168},[162,36836,36838,36840,36842],{"class":164,"line":36837},208,[162,36839,36738],{"class":168},[162,36841,36672],{"class":179},[162,36843,434],{"class":168},[162,36845,36847,36849,36852],{"class":164,"line":36846},209,[162,36848,36749],{"class":168},[162,36850,36851],{"class":179},"\"acc\"",[162,36853,434],{"class":168},[162,36855,36857],{"class":164,"line":36856},210,[162,36858,36859],{"class":168},"    plt.show()\n",[162,36861,36863],{"class":164,"line":36862},211,[162,36864,301],{"emptyLinePlaceholder":300},[162,36866,36868],{"class":164,"line":36867},212,[162,36869,36870],{"class":361},"# 正式开始训练:\n",[162,36872,36874,36876,36878,36880,36882],{"class":164,"line":36873},213,[162,36875,2703],{"class":172},[162,36877,34304],{"class":207},[162,36879,2292],{"class":172},[162,36881,34309],{"class":179},[162,36883,2316],{"class":168},[162,36885,36887],{"class":164,"line":36886},214,[162,36888,36889],{"class":361},"    # 将模型实例化\n",[162,36891,36893,36896,36898],{"class":164,"line":36892},215,[162,36894,36895],{"class":168},"    LeNet",[162,36897,173],{"class":172},[162,36899,36900],{"class":168},"LeNet()\n",[162,36902,36904,36907,36909],{"class":164,"line":36903},216,[162,36905,36906],{"class":168},"    train_dataloader,val_dataloader",[162,36908,173],{"class":172},[162,36910,36911],{"class":168},"train_val_data_process()\n",[162,36913,36915,36917,36919,36922,36925,36927,36929],{"class":164,"line":36914},217,[162,36916,36468],{"class":168},[162,36918,173],{"class":172},[162,36920,36921],{"class":168},"train_model_process(LeNet,train_dataloader,val_dataloader,",[162,36923,36924],{"class":671},"num_epochs",[162,36926,173],{"class":172},[162,36928,1011],{"class":207},[162,36930,434],{"class":168},[162,36932,36934],{"class":164,"line":36933},218,[162,36935,36936],{"class":168},"    matplot_acc_loss(train_process)\n",[19,36938,36939],{},"画图的补充点学习：",[19,36941,36942],{},[4602,36943],{"alt":158,"src":36944},"\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",[1452,36946,36947],{"start":228},[1455,36948,36949],{},"测试",[153,36951,36953],{"className":155,"code":36952,"language":157,"meta":158,"style":158},"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",[71,36954,36955,36961,36971,36983,36993,36998,37008,37018,37022,37027,37036,37053,37065,37082,37093,37109,37114,37125,37136,37147,37154,37158,37163,37173,37178,37195,37203,37207,37212,37221,37230,37234,37239,37244,37249,37256,37261,37273,37283,37293,37298,37302,37307,37316,37321,37337,37342,37347,37352,37366,37371,37385,37389,37394,37409,37414,37426,37430,37435,37447,37452,37460,37465,37470,37480,37485,37494,37499,37504,37508,37513,37518,37534,37542,37547,37552,37611,37617,37622,37633,37641,37649,37653,37658,37662,37667,37675,37680,37696,37701,37711,37721],{"__ignoreMap":158},[162,36956,36957,36959],{"class":164,"line":165},[162,36958,33478],{"class":172},[162,36960,33481],{"class":168},[162,36962,36963,36965,36967,36969],{"class":164,"line":197},[162,36964,33478],{"class":172},[162,36966,34498],{"class":168},[162,36968,34466],{"class":172},[162,36970,34503],{"class":168},[162,36972,36973,36975,36978,36980],{"class":164,"line":228},[162,36974,33821],{"class":172},[162,36976,36977],{"class":168}," jupyter_client.consoleapp ",[162,36979,33478],{"class":172},[162,36981,36982],{"class":168}," classes\n",[162,36984,36985,36987,36989,36991],{"class":164,"line":252},[162,36986,33821],{"class":172},[162,36988,34481],{"class":168},[162,36990,33478],{"class":172},[162,36992,34486],{"class":168},[162,36994,36995],{"class":164,"line":328},[162,36996,36997],{"class":361},"# 导入数据集\n",[162,36999,37000,37002,37004,37006],{"class":164,"line":466},[162,37001,33821],{"class":172},[162,37003,34451],{"class":168},[162,37005,33478],{"class":172},[162,37007,34456],{"class":168},[162,37009,37010,37012,37014,37016],{"class":164,"line":471},[162,37011,33821],{"class":172},[162,37013,34993],{"class":168},[162,37015,33478],{"class":172},[162,37017,34998],{"class":168},[162,37019,37020],{"class":164,"line":687},[162,37021,301],{"emptyLinePlaceholder":300},[162,37023,37024],{"class":164,"line":692},[162,37025,37026],{"class":361},"# 测试数据处理\n",[162,37028,37029,37031,37034],{"class":164,"line":698},[162,37030,35026],{"class":172},[162,37032,37033],{"class":5082}," test_data_process",[162,37035,35032],{"class":168},[162,37037,37038,37041,37043,37045,37047,37049,37051],{"class":164,"line":2955},[162,37039,37040],{"class":168},"    test_data",[162,37042,173],{"class":172},[162,37044,34538],{"class":168},[162,37046,34541],{"class":671},[162,37048,173],{"class":172},[162,37050,34546],{"class":179},[162,37052,1735],{"class":168},[162,37054,37055,37058,37060,37063],{"class":164,"line":2960},[162,37056,37057],{"class":671},"                           train",[162,37059,173],{"class":172},[162,37061,37062],{"class":207},"False",[162,37064,1735],{"class":168},[162,37066,37067,37070,37072,37074,37076,37078,37080],{"class":164,"line":2971},[162,37068,37069],{"class":671},"                           transform",[162,37071,173],{"class":172},[162,37073,34574],{"class":168},[162,37075,34577],{"class":671},[162,37077,173],{"class":172},[162,37079,4178],{"class":207},[162,37081,34585],{"class":168},[162,37083,37084,37087,37089,37091],{"class":164,"line":2984},[162,37085,37086],{"class":671},"                           download",[162,37088,173],{"class":172},[162,37090,247],{"class":207},[162,37092,434],{"class":168},[162,37094,37095,37098,37100,37102,37104,37106],{"class":164,"line":2989},[162,37096,37097],{"class":168},"    test_dataloader",[162,37099,173],{"class":172},[162,37101,34615],{"class":168},[162,37103,34618],{"class":671},[162,37105,173],{"class":172},[162,37107,37108],{"class":168},"test_data,\n",[162,37110,37111],{"class":164,"line":3011},[162,37112,37113],{"class":361},"                                    # 这里是一张一张进行测试\n",[162,37115,37116,37119,37121,37123],{"class":164,"line":3022},[162,37117,37118],{"class":671},"                                    batch_size",[162,37120,173],{"class":172},[162,37122,208],{"class":207},[162,37124,1735],{"class":168},[162,37126,37127,37130,37132,37134],{"class":164,"line":3027},[162,37128,37129],{"class":671},"                                    shuffle",[162,37131,173],{"class":172},[162,37133,247],{"class":207},[162,37135,1735],{"class":168},[162,37137,37138,37141,37143,37145],{"class":164,"line":3046},[162,37139,37140],{"class":671},"                                    num_workers",[162,37142,173],{"class":172},[162,37144,312],{"class":207},[162,37146,434],{"class":168},[162,37148,37149,37151],{"class":164,"line":3052},[162,37150,7203],{"class":172},[162,37152,37153],{"class":168}," test_dataloader\n",[162,37155,37156],{"class":164,"line":3057},[162,37157,301],{"emptyLinePlaceholder":300},[162,37159,37160],{"class":164,"line":3072},[162,37161,37162],{"class":361},"# 定义模型测试函数\n",[162,37164,37165,37167,37170],{"class":164,"line":3077},[162,37166,35026],{"class":172},[162,37168,37169],{"class":5082}," test_model_process",[162,37171,37172],{"class":168},"(model,test_dataloader):\n",[162,37174,37175],{"class":164,"line":3100},[162,37176,37177],{"class":361},"    # 将模型放到设备当中，先进行判断\n",[162,37179,37180,37182,37184,37186,37188,37190,37192],{"class":164,"line":3140},[162,37181,34321],{"class":168},[162,37183,173],{"class":172},[162,37185,34328],{"class":179},[162,37187,4828],{"class":172},[162,37189,34333],{"class":168},[162,37191,2313],{"class":172},[162,37193,37194],{"class":179}," \"cpu\"\n",[162,37196,37197,37199,37201],{"class":164,"line":4878},[162,37198,34373],{"class":168},[162,37200,173],{"class":172},[162,37202,35368],{"class":168},[162,37204,37205],{"class":164,"line":4883},[162,37206,301],{"emptyLinePlaceholder":300},[162,37208,37209],{"class":164,"line":4897},[162,37210,37211],{"class":361},"    # 设置初始化参数\n",[162,37213,37214,37217,37219],{"class":164,"line":4902},[162,37215,37216],{"class":168},"    test_corrects",[162,37218,173],{"class":172},[162,37220,35421],{"class":207},[162,37222,37223,37226,37228],{"class":164,"line":5694},[162,37224,37225],{"class":168},"    test_num",[162,37227,173],{"class":172},[162,37229,6200],{"class":207},[162,37231,37232],{"class":164,"line":5708},[162,37233,301],{"emptyLinePlaceholder":300},[162,37235,37236],{"class":164,"line":5716},[162,37237,37238],{"class":361},"    # 进行模型测试\n",[162,37240,37241],{"class":164,"line":5721},[162,37242,37243],{"class":361},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[162,37245,37246],{"class":164,"line":5727},[162,37247,37248],{"class":361},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[162,37250,37251,37254],{"class":164,"line":5733},[162,37252,37253],{"class":172},"    with",[162,37255,35960],{"class":168},[162,37257,37258],{"class":164,"line":5738},[162,37259,37260],{"class":361},"        # 从数据中进行\n",[162,37262,37263,37265,37268,37270],{"class":164,"line":11052},[162,37264,6517],{"class":172},[162,37266,37267],{"class":168}," test_data_x,test_data_y ",[162,37269,814],{"class":172},[162,37271,37272],{"class":168}," test_dataloader:\n",[162,37274,37275,37278,37280],{"class":164,"line":11076},[162,37276,37277],{"class":168},"            test_data_x",[162,37279,173],{"class":172},[162,37281,37282],{"class":168},"test_data_x.to(device)\n",[162,37284,37285,37288,37290],{"class":164,"line":11081},[162,37286,37287],{"class":168},"            test_data_y",[162,37289,173],{"class":172},[162,37291,37292],{"class":168},"test_data_y.to(device)\n",[162,37294,37295],{"class":164,"line":11087},[162,37296,37297],{"class":361},"            # 设置为验证模式\n",[162,37299,37300],{"class":164,"line":11114},[162,37301,35951],{"class":168},[162,37303,37304],{"class":164,"line":11119},[162,37305,37306],{"class":361},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[162,37308,37309,37311,37313],{"class":164,"line":11125},[162,37310,35736],{"class":168},[162,37312,173],{"class":172},[162,37314,37315],{"class":168},"model(test_data_x)\n",[162,37317,37318],{"class":164,"line":11137},[162,37319,37320],{"class":361},"            # 查找每一行中最大值对应的下标\n",[162,37322,37323,37325,37327,37329,37331,37333,37335],{"class":164,"line":11149},[162,37324,35753],{"class":168},[162,37326,173],{"class":172},[162,37328,35758],{"class":168},[162,37330,35761],{"class":671},[162,37332,173],{"class":172},[162,37334,208],{"class":207},[162,37336,434],{"class":168},[162,37338,37339],{"class":164,"line":11161},[162,37340,37341],{"class":361},"            # 计算正确率\n",[162,37343,37344],{"class":164,"line":12816},[162,37345,37346],{"class":361},"            # .data表示是一个不带梯度信息的tensor\n",[162,37348,37349],{"class":164,"line":12841},[162,37350,37351],{"class":361},"            # 如果预测正确，则准确度test_corrects加1\n",[162,37353,37354,37357,37359,37361,37363],{"class":164,"line":12864},[162,37355,37356],{"class":168},"            test_corrects",[162,37358,926],{"class":172},[162,37360,35863],{"class":168},[162,37362,2292],{"class":172},[162,37364,37365],{"class":168},"test_data_y.data)\n",[162,37367,37368],{"class":164,"line":12888},[162,37369,37370],{"class":361},"            # 将所有的测试样本进行累计\n",[162,37372,37373,37376,37378,37381,37383],{"class":164,"line":12893},[162,37374,37375],{"class":168},"            test_num",[162,37377,926],{"class":172},[162,37379,37380],{"class":168},"test_data_x.size(",[162,37382,312],{"class":207},[162,37384,434],{"class":168},[162,37386,37387],{"class":164,"line":12898},[162,37388,301],{"emptyLinePlaceholder":300},[162,37390,37391],{"class":164,"line":12903},[162,37392,37393],{"class":361},"        # 计算准确度\n",[162,37395,37396,37399,37401,37404,37406],{"class":164,"line":12912},[162,37397,37398],{"class":168},"        test_acc",[162,37400,173],{"class":172},[162,37402,37403],{"class":168},"test_corrects.double().item()",[162,37405,946],{"class":172},[162,37407,37408],{"class":168},"test_num\n",[162,37410,37411],{"class":164,"line":12917},[162,37412,37413],{"class":361},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[162,37415,37416,37418,37420,37423],{"class":164,"line":12923},[162,37417,2300],{"class":207},[162,37419,604],{"class":168},[162,37421,37422],{"class":179},"\"测试的准确率：\"",[162,37424,37425],{"class":168},",test_acc)\n",[162,37427,37428],{"class":164,"line":12944},[162,37429,301],{"emptyLinePlaceholder":300},[162,37431,37432],{"class":164,"line":12950},[162,37433,37434],{"class":361},"# 实现模型的测试功能\n",[162,37436,37437,37439,37441,37443,37445],{"class":164,"line":12964},[162,37438,2703],{"class":172},[162,37440,34304],{"class":207},[162,37442,2292],{"class":172},[162,37444,34309],{"class":179},[162,37446,2316],{"class":168},[162,37448,37449],{"class":164,"line":12970},[162,37450,37451],{"class":361},"    # 加载模型\n",[162,37453,37454,37456,37458],{"class":164,"line":12997},[162,37455,34373],{"class":168},[162,37457,173],{"class":172},[162,37459,36900],{"class":168},[162,37461,37462],{"class":164,"line":13006},[162,37463,37464],{"class":361},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[162,37466,37467],{"class":164,"line":13012},[162,37468,37469],{"class":361},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[162,37471,37472,37475,37478],{"class":164,"line":13020},[162,37473,37474],{"class":168},"    model.load_state_dict(torch.load(",[162,37476,37477],{"class":179},"'best_model.pth'",[162,37479,586],{"class":168},[162,37481,37482],{"class":164,"line":13025},[162,37483,37484],{"class":361},"    # 数据加载\n",[162,37486,37487,37489,37491],{"class":164,"line":19695},[162,37488,37097],{"class":168},[162,37490,173],{"class":172},[162,37492,37493],{"class":168},"test_data_process()\n",[162,37495,37496],{"class":164,"line":19701},[162,37497,37498],{"class":361},"    # 加载模型测试的函数\n",[162,37500,37501],{"class":164,"line":19724},[162,37502,37503],{"class":168},"    test_model_process(model,test_dataloader)\n",[162,37505,37506],{"class":164,"line":19730},[162,37507,301],{"emptyLinePlaceholder":300},[162,37509,37510],{"class":164,"line":19753},[162,37511,37512],{"class":361},"    # 验证集推理实现：\n",[162,37514,37515],{"class":164,"line":19767},[162,37516,37517],{"class":361},"    # 加载数据加载的更详细一些\n",[162,37519,37520,37522,37524,37526,37528,37530,37532],{"class":164,"line":19787},[162,37521,34321],{"class":168},[162,37523,173],{"class":172},[162,37525,34328],{"class":179},[162,37527,4828],{"class":172},[162,37529,34333],{"class":168},[162,37531,2313],{"class":172},[162,37533,37194],{"class":179},[162,37535,37536,37538,37540],{"class":164,"line":19793},[162,37537,34373],{"class":168},[162,37539,173],{"class":172},[162,37541,35368],{"class":168},[162,37543,37544],{"class":164,"line":19804},[162,37545,37546],{"class":361},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[162,37548,37549],{"class":164,"line":19827},[162,37550,37551],{"class":361},"    # 顺序不可改变\n",[162,37553,37554,37557,37559,37561,37564,37566,37569,37571,37574,37576,37579,37581,37584,37586,37589,37591,37594,37596,37599,37601,37604,37606,37609],{"class":164,"line":19849},[162,37555,37556],{"class":168},"    classes",[162,37558,173],{"class":172},[162,37560,4168],{"class":168},[162,37562,37563],{"class":179},"'T-shirt\u002Ftop'",[162,37565,3670],{"class":168},[162,37567,37568],{"class":179},"'Trouser'",[162,37570,3670],{"class":168},[162,37572,37573],{"class":179},"'Pullover'",[162,37575,3670],{"class":168},[162,37577,37578],{"class":179},"'Dress'",[162,37580,3670],{"class":168},[162,37582,37583],{"class":179},"'Coat'",[162,37585,3670],{"class":168},[162,37587,37588],{"class":179},"'Sandal'",[162,37590,3670],{"class":168},[162,37592,37593],{"class":179},"'Shirt'",[162,37595,3670],{"class":168},[162,37597,37598],{"class":179},"'Sneaker'",[162,37600,3670],{"class":168},[162,37602,37603],{"class":179},"'Bag'",[162,37605,3670],{"class":168},[162,37607,37608],{"class":179},"'Ankle boot'",[162,37610,194],{"class":168},[162,37612,37613,37615],{"class":164,"line":19854},[162,37614,37253],{"class":172},[162,37616,35960],{"class":168},[162,37618,37619],{"class":164,"line":19860},[162,37620,37621],{"class":361},"        # 将数据和标签都放到设备当中\n",[162,37623,37624,37626,37629,37631],{"class":164,"line":19874},[162,37625,6517],{"class":172},[162,37627,37628],{"class":168}," b_x,b_y ",[162,37630,814],{"class":172},[162,37632,37272],{"class":168},[162,37634,37635,37637,37639],{"class":164,"line":19887},[162,37636,35686],{"class":168},[162,37638,173],{"class":172},[162,37640,35691],{"class":168},[162,37642,37643,37645,37647],{"class":164,"line":19892},[162,37644,35701],{"class":168},[162,37646,173],{"class":172},[162,37648,35706],{"class":168},[162,37650,37651],{"class":164,"line":19906},[162,37652,301],{"emptyLinePlaceholder":300},[162,37654,37655],{"class":164,"line":19911},[162,37656,37657],{"class":361},"            # 设置模型为验证模式\n",[162,37659,37660],{"class":164,"line":19917},[162,37661,35951],{"class":168},[162,37663,37664],{"class":164,"line":19922},[162,37665,37666],{"class":361},"            # 模型推理结果\n",[162,37668,37669,37671,37673],{"class":164,"line":19936},[162,37670,35736],{"class":168},[162,37672,173],{"class":172},[162,37674,35741],{"class":168},[162,37676,37677],{"class":164,"line":19941},[162,37678,37679],{"class":361},"            # 获取最大下标，最大下标就是类别号\n",[162,37681,37682,37684,37686,37688,37690,37692,37694],{"class":164,"line":19946},[162,37683,35753],{"class":168},[162,37685,173],{"class":172},[162,37687,35758],{"class":168},[162,37689,35761],{"class":671},[162,37691,173],{"class":172},[162,37693,208],{"class":207},[162,37695,434],{"class":168},[162,37697,37698],{"class":164,"line":19960},[162,37699,37700],{"class":361},"            # 取出张量中的数值\n",[162,37702,37703,37706,37708],{"class":164,"line":19972},[162,37704,37705],{"class":168},"            result",[162,37707,173],{"class":172},[162,37709,37710],{"class":168},"pre_lab.item()\n",[162,37712,37713,37716,37718],{"class":164,"line":19977},[162,37714,37715],{"class":168},"            label",[162,37717,173],{"class":172},[162,37719,37720],{"class":168},"b_y.item()\n",[162,37722,37723,37726,37728,37731,37734,37737,37739,37742],{"class":164,"line":19990},[162,37724,37725],{"class":207},"            print",[162,37727,604],{"class":168},[162,37729,37730],{"class":179},"\"预测值：\"",[162,37732,37733],{"class":168},",classes[result],",[162,37735,37736],{"class":179},"\"------\"",[162,37738,3670],{"class":168},[162,37740,37741],{"class":179},"\"真实值：\"",[162,37743,37744],{"class":168},",classes[label])\n",[19,37746,37747],{},"（2）AlexNet",[1452,37749,37750],{},[1455,37751,37752],{},"神经网络构建",[153,37754,37756],{"className":155,"code":37755,"language":157,"meta":158,"style":158},"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",[71,37757,37758,37764,37774,37784,37796,37800,37817,37825,37840,37852,37894,37921,37964,37990,38034,38077,38120,38147,38151,38161,38166,38194,38213,38232,38236,38241,38249,38264,38274,38288,38298,38313,38328,38343,38354,38358,38363,38373,38388,38393,38407,38422,38434,38439,38450,38455,38461,38466,38478,38498,38503,38512],{"__ignoreMap":158},[162,37759,37760,37762],{"class":164,"line":165},[162,37761,33478],{"class":172},[162,37763,33481],{"class":168},[162,37765,37766,37768,37770,37772],{"class":164,"line":197},[162,37767,33821],{"class":172},[162,37769,33824],{"class":168},[162,37771,33478],{"class":172},[162,37773,33829],{"class":168},[162,37775,37776,37778,37780,37782],{"class":164,"line":228},[162,37777,33821],{"class":172},[162,37779,33841],{"class":168},[162,37781,33478],{"class":172},[162,37783,33846],{"class":168},[162,37785,37786,37788,37791,37793],{"class":164,"line":252},[162,37787,33478],{"class":172},[162,37789,37790],{"class":168}," torch.nn.functional ",[162,37792,34466],{"class":172},[162,37794,37795],{"class":168}," F\n",[162,37797,37798],{"class":164,"line":328},[162,37799,301],{"emptyLinePlaceholder":300},[162,37801,37802,37804,37807,37809,37811,37813,37815],{"class":164,"line":466},[162,37803,17788],{"class":172},[162,37805,37806],{"class":5082}," AlexNet",[162,37808,604],{"class":168},[162,37810,33862],{"class":5082},[162,37812,3847],{"class":168},[162,37814,33867],{"class":5082},[162,37816,33870],{"class":168},[162,37818,37819,37821,37823],{"class":164,"line":471},[162,37820,33885],{"class":172},[162,37822,33888],{"class":207},[162,37824,33891],{"class":168},[162,37826,37827,37829,37832,37834,37836,37838],{"class":164,"line":687},[162,37828,33901],{"class":207},[162,37830,37831],{"class":168},"(AlexNet,",[162,37833,33907],{"class":207},[162,37835,33910],{"class":168},[162,37837,33913],{"class":207},[162,37839,1526],{"class":168},[162,37841,37842,37844,37847,37849],{"class":164,"line":692},[162,37843,33929],{"class":207},[162,37845,37846],{"class":168},".ReLu",[162,37848,173],{"class":172},[162,37850,37851],{"class":168},"nn.ReLU()\n",[162,37853,37854,37856,37858,37860,37862,37864,37866,37868,37870,37872,37874,37876,37878,37880,37882,37884,37886,37888,37890,37892],{"class":164,"line":698},[162,37855,33929],{"class":207},[162,37857,33932],{"class":168},[162,37859,173],{"class":172},[162,37861,33937],{"class":168},[162,37863,33940],{"class":671},[162,37865,173],{"class":172},[162,37867,208],{"class":207},[162,37869,3670],{"class":168},[162,37871,33949],{"class":671},[162,37873,173],{"class":172},[162,37875,3510],{"class":207},[162,37877,3670],{"class":168},[162,37879,33958],{"class":671},[162,37881,173],{"class":172},[162,37883,3762],{"class":207},[162,37885,3670],{"class":168},[162,37887,34013],{"class":671},[162,37889,173],{"class":172},[162,37891,223],{"class":207},[162,37893,434],{"class":168},[162,37895,37896,37898,37900,37902,37905,37907,37909,37911,37913,37915,37917,37919],{"class":164,"line":2955},[162,37897,33929],{"class":207},[162,37899,33997],{"class":168},[162,37901,173],{"class":172},[162,37903,37904],{"class":168},"nn.MaxPool2d(",[162,37906,33958],{"class":671},[162,37908,173],{"class":172},[162,37910,218],{"class":207},[162,37912,3670],{"class":168},[162,37914,34013],{"class":671},[162,37916,173],{"class":172},[162,37918,213],{"class":207},[162,37920,434],{"class":168},[162,37922,37923,37925,37927,37929,37931,37933,37935,37937,37939,37941,37943,37946,37948,37950,37952,37954,37956,37958,37960,37962],{"class":164,"line":2960},[162,37924,33929],{"class":207},[162,37926,34026],{"class":168},[162,37928,173],{"class":172},[162,37930,33937],{"class":168},[162,37932,33940],{"class":671},[162,37934,173],{"class":172},[162,37936,3510],{"class":207},[162,37938,3670],{"class":168},[162,37940,33949],{"class":671},[162,37942,173],{"class":172},[162,37944,37945],{"class":207},"256",[162,37947,3670],{"class":168},[162,37949,33958],{"class":671},[162,37951,173],{"class":172},[162,37953,637],{"class":207},[162,37955,3670],{"class":168},[162,37957,33967],{"class":671},[162,37959,173],{"class":172},[162,37961,213],{"class":207},[162,37963,434],{"class":168},[162,37965,37966,37968,37970,37972,37974,37976,37978,37980,37982,37984,37986,37988],{"class":164,"line":2971},[162,37967,33929],{"class":207},[162,37969,34061],{"class":168},[162,37971,173],{"class":172},[162,37973,37904],{"class":168},[162,37975,33958],{"class":671},[162,37977,173],{"class":172},[162,37979,218],{"class":207},[162,37981,3670],{"class":168},[162,37983,34013],{"class":671},[162,37985,173],{"class":172},[162,37987,213],{"class":207},[162,37989,434],{"class":168},[162,37991,37992,37994,37997,37999,38001,38003,38005,38007,38009,38011,38013,38016,38018,38020,38022,38024,38026,38028,38030,38032],{"class":164,"line":2984},[162,37993,33929],{"class":207},[162,37995,37996],{"class":168},".c5",[162,37998,173],{"class":172},[162,38000,33937],{"class":168},[162,38002,33940],{"class":671},[162,38004,173],{"class":172},[162,38006,37945],{"class":207},[162,38008,3670],{"class":168},[162,38010,33949],{"class":671},[162,38012,173],{"class":172},[162,38014,38015],{"class":207},"384",[162,38017,3670],{"class":168},[162,38019,33958],{"class":671},[162,38021,173],{"class":172},[162,38023,218],{"class":207},[162,38025,3670],{"class":168},[162,38027,33967],{"class":671},[162,38029,173],{"class":172},[162,38031,208],{"class":207},[162,38033,434],{"class":168},[162,38035,38036,38038,38041,38043,38045,38047,38049,38051,38053,38055,38057,38059,38061,38063,38065,38067,38069,38071,38073,38075],{"class":164,"line":2989},[162,38037,33929],{"class":207},[162,38039,38040],{"class":168},".c6",[162,38042,173],{"class":172},[162,38044,33937],{"class":168},[162,38046,33940],{"class":671},[162,38048,173],{"class":172},[162,38050,38015],{"class":207},[162,38052,3670],{"class":168},[162,38054,33949],{"class":671},[162,38056,173],{"class":172},[162,38058,38015],{"class":207},[162,38060,3670],{"class":168},[162,38062,33958],{"class":671},[162,38064,173],{"class":172},[162,38066,218],{"class":207},[162,38068,3670],{"class":168},[162,38070,33967],{"class":671},[162,38072,173],{"class":172},[162,38074,208],{"class":207},[162,38076,434],{"class":168},[162,38078,38079,38081,38084,38086,38088,38090,38092,38094,38096,38098,38100,38102,38104,38106,38108,38110,38112,38114,38116,38118],{"class":164,"line":3011},[162,38080,33929],{"class":207},[162,38082,38083],{"class":168},".c7",[162,38085,173],{"class":172},[162,38087,33937],{"class":168},[162,38089,33940],{"class":671},[162,38091,173],{"class":172},[162,38093,38015],{"class":207},[162,38095,3670],{"class":168},[162,38097,33949],{"class":671},[162,38099,173],{"class":172},[162,38101,37945],{"class":207},[162,38103,3670],{"class":168},[162,38105,33958],{"class":671},[162,38107,173],{"class":172},[162,38109,218],{"class":207},[162,38111,3670],{"class":168},[162,38113,33967],{"class":671},[162,38115,173],{"class":172},[162,38117,208],{"class":207},[162,38119,434],{"class":168},[162,38121,38122,38124,38127,38129,38131,38133,38135,38137,38139,38141,38143,38145],{"class":164,"line":3022},[162,38123,33929],{"class":207},[162,38125,38126],{"class":168},".s8",[162,38128,173],{"class":172},[162,38130,37904],{"class":168},[162,38132,33958],{"class":671},[162,38134,173],{"class":172},[162,38136,218],{"class":207},[162,38138,3670],{"class":168},[162,38140,34013],{"class":671},[162,38142,173],{"class":172},[162,38144,213],{"class":207},[162,38146,434],{"class":168},[162,38148,38149],{"class":164,"line":3027},[162,38150,34086],{"class":361},[162,38152,38153,38155,38157,38159],{"class":164,"line":3046},[162,38154,33929],{"class":207},[162,38156,34093],{"class":168},[162,38158,173],{"class":172},[162,38160,34098],{"class":168},[162,38162,38163],{"class":164,"line":3052},[162,38164,38165],{"class":361},"       # 定义全连接层\n",[162,38167,38168,38170,38173,38175,38177,38179,38181,38183,38185,38187,38189,38192],{"class":164,"line":3057},[162,38169,33929],{"class":207},[162,38171,38172],{"class":168},".f1",[162,38174,173],{"class":172},[162,38176,34115],{"class":168},[162,38178,1314],{"class":207},[162,38180,3745],{"class":172},[162,38182,1314],{"class":207},[162,38184,3745],{"class":172},[162,38186,37945],{"class":207},[162,38188,3670],{"class":168},[162,38190,38191],{"class":207},"4096",[162,38193,434],{"class":168},[162,38195,38196,38198,38201,38203,38205,38207,38209,38211],{"class":164,"line":3072},[162,38197,33929],{"class":207},[162,38199,38200],{"class":168},".f2",[162,38202,173],{"class":172},[162,38204,34115],{"class":168},[162,38206,38191],{"class":207},[162,38208,3670],{"class":168},[162,38210,38191],{"class":207},[162,38212,434],{"class":168},[162,38214,38215,38217,38220,38222,38224,38226,38228,38230],{"class":164,"line":3077},[162,38216,33929],{"class":207},[162,38218,38219],{"class":168},".f3",[162,38221,173],{"class":172},[162,38223,34115],{"class":168},[162,38225,38191],{"class":207},[162,38227,3670],{"class":168},[162,38229,1006],{"class":207},[162,38231,434],{"class":168},[162,38233,38234],{"class":164,"line":3100},[162,38235,301],{"emptyLinePlaceholder":300},[162,38237,38238],{"class":164,"line":3140},[162,38239,38240],{"class":361},"    # 定义前向传播\n",[162,38242,38243,38245,38247],{"class":164,"line":4878},[162,38244,33885],{"class":172},[162,38246,34177],{"class":5082},[162,38248,34180],{"class":168},[162,38250,38251,38253,38255,38257,38260,38262],{"class":164,"line":4883},[162,38252,34185],{"class":168},[162,38254,173],{"class":172},[162,38256,33907],{"class":207},[162,38258,38259],{"class":168},".ReLu(",[162,38261,33907],{"class":207},[162,38263,34197],{"class":168},[162,38265,38266,38268,38270,38272],{"class":164,"line":4897},[162,38267,34185],{"class":168},[162,38269,173],{"class":172},[162,38271,33907],{"class":207},[162,38273,34208],{"class":168},[162,38275,38276,38278,38280,38282,38284,38286],{"class":164,"line":4902},[162,38277,34185],{"class":168},[162,38279,173],{"class":172},[162,38281,33907],{"class":207},[162,38283,38259],{"class":168},[162,38285,33907],{"class":207},[162,38287,34223],{"class":168},[162,38289,38290,38292,38294,38296],{"class":164,"line":5694},[162,38291,34185],{"class":168},[162,38293,173],{"class":172},[162,38295,33907],{"class":207},[162,38297,34234],{"class":168},[162,38299,38300,38302,38304,38306,38308,38310],{"class":164,"line":5708},[162,38301,34185],{"class":168},[162,38303,173],{"class":172},[162,38305,33907],{"class":207},[162,38307,38259],{"class":168},[162,38309,33907],{"class":207},[162,38311,38312],{"class":168},".c5(x))\n",[162,38314,38315,38317,38319,38321,38323,38325],{"class":164,"line":5716},[162,38316,34185],{"class":168},[162,38318,173],{"class":172},[162,38320,33907],{"class":207},[162,38322,38259],{"class":168},[162,38324,33907],{"class":207},[162,38326,38327],{"class":168},".c6(x))\n",[162,38329,38330,38332,38334,38336,38338,38340],{"class":164,"line":5721},[162,38331,34185],{"class":168},[162,38333,173],{"class":172},[162,38335,33907],{"class":207},[162,38337,38259],{"class":168},[162,38339,33907],{"class":207},[162,38341,38342],{"class":168},".c7(x))\n",[162,38344,38345,38347,38349,38351],{"class":164,"line":5727},[162,38346,34185],{"class":168},[162,38348,173],{"class":172},[162,38350,33907],{"class":207},[162,38352,38353],{"class":168},".s8(x)\n",[162,38355,38356],{"class":164,"line":5733},[162,38357,301],{"emptyLinePlaceholder":300},[162,38359,38360],{"class":164,"line":5738},[162,38361,38362],{"class":361},"        # 展平加线性全连接层\n",[162,38364,38365,38367,38369,38371],{"class":164,"line":11052},[162,38366,34185],{"class":168},[162,38368,173],{"class":172},[162,38370,33907],{"class":207},[162,38372,34245],{"class":168},[162,38374,38375,38377,38379,38381,38383,38385],{"class":164,"line":11076},[162,38376,34185],{"class":168},[162,38378,173],{"class":172},[162,38380,33907],{"class":207},[162,38382,38259],{"class":168},[162,38384,33907],{"class":207},[162,38386,38387],{"class":168},".f1(x))\n",[162,38389,38390],{"class":164,"line":11081},[162,38391,38392],{"class":361},"        # 还需要dropout对神经元随机进行失活\n",[162,38394,38395,38397,38399,38402,38405],{"class":164,"line":11087},[162,38396,34185],{"class":168},[162,38398,173],{"class":172},[162,38400,38401],{"class":168},"F.dropout(x,",[162,38403,38404],{"class":207},"0.5",[162,38406,434],{"class":168},[162,38408,38409,38411,38413,38415,38417,38419],{"class":164,"line":11114},[162,38410,34185],{"class":168},[162,38412,173],{"class":172},[162,38414,33907],{"class":207},[162,38416,38259],{"class":168},[162,38418,33907],{"class":207},[162,38420,38421],{"class":168},".f2(x))\n",[162,38423,38424,38426,38428,38430,38432],{"class":164,"line":11119},[162,38425,34185],{"class":168},[162,38427,173],{"class":172},[162,38429,38401],{"class":168},[162,38431,38404],{"class":207},[162,38433,434],{"class":168},[162,38435,38436],{"class":164,"line":11125},[162,38437,38438],{"class":361},"        # 直接输出\n",[162,38440,38441,38443,38445,38447],{"class":164,"line":11137},[162,38442,34185],{"class":168},[162,38444,173],{"class":172},[162,38446,33907],{"class":207},[162,38448,38449],{"class":168},".f3(x)\n",[162,38451,38452],{"class":164,"line":11149},[162,38453,38454],{"class":361},"        # 前向传播输出\n",[162,38456,38457,38459],{"class":164,"line":11161},[162,38458,17846],{"class":172},[162,38460,34293],{"class":168},[162,38462,38463],{"class":164,"line":12816},[162,38464,38465],{"class":361},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[162,38467,38468,38470,38472,38474,38476],{"class":164,"line":12841},[162,38469,2703],{"class":172},[162,38471,34304],{"class":207},[162,38473,2292],{"class":172},[162,38475,34309],{"class":179},[162,38477,2316],{"class":168},[162,38479,38480,38482,38484,38486,38488,38490,38492,38494,38496],{"class":164,"line":12864},[162,38481,34321],{"class":168},[162,38483,173],{"class":172},[162,38485,33536],{"class":168},[162,38487,34328],{"class":179},[162,38489,4828],{"class":172},[162,38491,34333],{"class":168},[162,38493,2313],{"class":172},[162,38495,33561],{"class":179},[162,38497,434],{"class":168},[162,38499,38500],{"class":164,"line":12888},[162,38501,38502],{"class":361},"    # 模型实例化，然后将实例化的模型放到设备中\n",[162,38504,38505,38507,38509],{"class":164,"line":12893},[162,38506,34373],{"class":168},[162,38508,173],{"class":172},[162,38510,38511],{"class":168},"AlexNet().to(device)\n",[162,38513,38514,38516,38518,38520,38522,38525,38527,38529],{"class":164,"line":12898},[162,38515,822],{"class":207},[162,38517,34385],{"class":168},[162,38519,208],{"class":207},[162,38521,3670],{"class":168},[162,38523,38524],{"class":207},"227",[162,38526,3670],{"class":168},[162,38528,38524],{"class":207},[162,38530,34398],{"class":168},[1452,38532,38533],{"start":197},[1455,38534,34411],{},[153,38536,38538],{"className":155,"code":38537,"language":157,"meta":158,"style":158},"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",[71,38539,38540,38546,38552,38562,38568,38578,38588,38598,38608,38618,38622,38633,38643,38647,38651,38655,38663,38675,38685,38701,38711,38743,38757,38767,38777,38781,38791,38805,38815,38825,38835,38841,38845,38849,38853,38857,38861,38869,38889,38893,38897,38901,38905,38909,38925,38929,38933,38941,38945,38949,38957,38961,38965,38969,38977,38981,38985,38989,38993,39001,39005,39013,39017,39025,39029,39037,39041,39049,39053,39057,39065,39069,39073,39077,39089,39113,39127,39131,39135,39139,39147,39151,39159,39163,39171,39175,39183,39187,39195,39199,39207,39211,39223,39227,39235,39239,39247,39251,39255,39259,39263,39271,39275,39291,39295,39303,39307,39311,39315,39319,39323,39327,39331,39347,39351,39363,39367,39379,39383,39395,39399,39407,39411,39419,39423,39427,39432,39438,39442,39451,39455,39472,39476,39485,39489,39507,39520,39525,39538,39542,39546,39554,39558,39562,39570,39574,39582,39586,39594,39598,39602,39644,39686,39690,39694,39710,39714,39730,39734,39738,39746,39750,39754,39766,39804,39809,39814,39823,39827,39841,39851,39857,39863,39869,39875,39879,39883,39889,39893,39897,39905,39909,39927,39931,39935,39939,39955,39959,39963,39967,39971,39975,39995,40015,40019,40023,40027,40035,40043,40047,40063,40083,40103,40107,40111,40119,40127,40131,40135,40139,40151,40155,40165,40173,40190],{"__ignoreMap":158},[162,38541,38542,38544],{"class":164,"line":165},[162,38543,33478],{"class":172},[162,38545,34901],{"class":168},[162,38547,38548,38550],{"class":164,"line":197},[162,38549,33478],{"class":172},[162,38551,34908],{"class":168},[162,38553,38554,38556,38558,38560],{"class":164,"line":228},[162,38555,33478],{"class":172},[162,38557,34919],{"class":168},[162,38559,34466],{"class":172},[162,38561,34924],{"class":168},[162,38563,38564,38566],{"class":164,"line":252},[162,38565,33478],{"class":172},[162,38567,33481],{"class":168},[162,38569,38570,38572,38574,38576],{"class":164,"line":328},[162,38571,33821],{"class":172},[162,38573,34498],{"class":168},[162,38575,33478],{"class":172},[162,38577,34941],{"class":168},[162,38579,38580,38582,38584,38586],{"class":164,"line":466},[162,38581,33821],{"class":172},[162,38583,34451],{"class":168},[162,38585,33478],{"class":172},[162,38587,34456],{"class":168},[162,38589,38590,38592,38594,38596],{"class":164,"line":471},[162,38591,33821],{"class":172},[162,38593,34481],{"class":168},[162,38595,33478],{"class":172},[162,38597,34486],{"class":168},[162,38599,38600,38602,38604,38606],{"class":164,"line":687},[162,38601,33478],{"class":172},[162,38603,34498],{"class":168},[162,38605,34466],{"class":172},[162,38607,34503],{"class":168},[162,38609,38610,38612,38614,38616],{"class":164,"line":692},[162,38611,33478],{"class":172},[162,38613,34515],{"class":168},[162,38615,34466],{"class":172},[162,38617,34520],{"class":168},[162,38619,38620],{"class":164,"line":698},[162,38621,34986],{"class":361},[162,38623,38624,38626,38628,38630],{"class":164,"line":2955},[162,38625,33821],{"class":172},[162,38627,34993],{"class":168},[162,38629,33478],{"class":172},[162,38631,38632],{"class":168}," AlexNet\n",[162,38634,38635,38637,38639,38641],{"class":164,"line":2960},[162,38636,33821],{"class":172},[162,38638,33824],{"class":168},[162,38640,33478],{"class":172},[162,38642,33829],{"class":168},[162,38644,38645],{"class":164,"line":2971},[162,38646,301],{"emptyLinePlaceholder":300},[162,38648,38649],{"class":164,"line":2984},[162,38650,301],{"emptyLinePlaceholder":300},[162,38652,38653],{"class":164,"line":2989},[162,38654,35021],{"class":361},[162,38656,38657,38659,38661],{"class":164,"line":3011},[162,38658,35026],{"class":172},[162,38660,35029],{"class":5082},[162,38662,35032],{"class":168},[162,38664,38665,38667,38669,38671,38673],{"class":164,"line":3022},[162,38666,35037],{"class":168},[162,38668,173],{"class":172},[162,38670,34538],{"class":168},[162,38672,34546],{"class":179},[162,38674,1735],{"class":168},[162,38676,38677,38679,38681,38683],{"class":164,"line":3027},[162,38678,35050],{"class":671},[162,38680,173],{"class":172},[162,38682,247],{"class":207},[162,38684,1735],{"class":168},[162,38686,38687,38689,38691,38693,38695,38697,38699],{"class":164,"line":3046},[162,38688,35061],{"class":671},[162,38690,173],{"class":172},[162,38692,34574],{"class":168},[162,38694,34577],{"class":671},[162,38696,173],{"class":172},[162,38698,38524],{"class":207},[162,38700,34585],{"class":168},[162,38702,38703,38705,38707,38709],{"class":164,"line":3052},[162,38704,35078],{"class":671},[162,38706,173],{"class":172},[162,38708,247],{"class":207},[162,38710,434],{"class":168},[162,38712,38713,38715,38717,38719,38721,38723,38725,38727,38729,38731,38733,38735,38737,38739,38741],{"class":164,"line":3057},[162,38714,35089],{"class":168},[162,38716,173],{"class":172},[162,38718,35094],{"class":168},[162,38720,35097],{"class":207},[162,38722,604],{"class":168},[162,38724,35102],{"class":207},[162,38726,3745],{"class":172},[162,38728,607],{"class":207},[162,38730,35109],{"class":168},[162,38732,35097],{"class":207},[162,38734,604],{"class":168},[162,38736,35116],{"class":207},[162,38738,3745],{"class":172},[162,38740,607],{"class":207},[162,38742,35123],{"class":168},[162,38744,38745,38747,38749,38751,38753,38755],{"class":164,"line":3072},[162,38746,35128],{"class":168},[162,38748,173],{"class":172},[162,38750,35133],{"class":168},[162,38752,34618],{"class":671},[162,38754,173],{"class":172},[162,38756,34623],{"class":168},[162,38758,38759,38761,38763,38765],{"class":164,"line":3077},[162,38760,35144],{"class":671},[162,38762,173],{"class":172},[162,38764,35149],{"class":207},[162,38766,1735],{"class":168},[162,38768,38769,38771,38773,38775],{"class":164,"line":3100},[162,38770,35156],{"class":671},[162,38772,173],{"class":172},[162,38774,247],{"class":207},[162,38776,1735],{"class":168},[162,38778,38779],{"class":164,"line":3140},[162,38780,35167],{"class":361},[162,38782,38783,38785,38787,38789],{"class":164,"line":4878},[162,38784,35172],{"class":671},[162,38786,173],{"class":172},[162,38788,3687],{"class":207},[162,38790,434],{"class":168},[162,38792,38793,38795,38797,38799,38801,38803],{"class":164,"line":4883},[162,38794,35183],{"class":168},[162,38796,173],{"class":172},[162,38798,34615],{"class":168},[162,38800,34618],{"class":671},[162,38802,173],{"class":172},[162,38804,35194],{"class":168},[162,38806,38807,38809,38811,38813],{"class":164,"line":4897},[162,38808,35199],{"class":671},[162,38810,173],{"class":172},[162,38812,35149],{"class":207},[162,38814,1735],{"class":168},[162,38816,38817,38819,38821,38823],{"class":164,"line":4902},[162,38818,35210],{"class":671},[162,38820,173],{"class":172},[162,38822,247],{"class":207},[162,38824,1735],{"class":168},[162,38826,38827,38829,38831,38833],{"class":164,"line":5694},[162,38828,35221],{"class":671},[162,38830,173],{"class":172},[162,38832,3687],{"class":207},[162,38834,434],{"class":168},[162,38836,38837,38839],{"class":164,"line":5708},[162,38838,7203],{"class":172},[162,38840,35234],{"class":168},[162,38842,38843],{"class":164,"line":5716},[162,38844,301],{"emptyLinePlaceholder":300},[162,38846,38847],{"class":164,"line":5721},[162,38848,35243],{"class":361},[162,38850,38851],{"class":164,"line":5727},[162,38852,35248],{"class":361},[162,38854,38855],{"class":164,"line":5733},[162,38856,301],{"emptyLinePlaceholder":300},[162,38858,38859],{"class":164,"line":5738},[162,38860,35257],{"class":361},[162,38862,38863,38865,38867],{"class":164,"line":11052},[162,38864,35026],{"class":172},[162,38866,35264],{"class":5082},[162,38868,35267],{"class":168},[162,38870,38871,38873,38875,38877,38879,38881,38883,38885,38887],{"class":164,"line":11076},[162,38872,34321],{"class":168},[162,38874,173],{"class":172},[162,38876,33536],{"class":168},[162,38878,34328],{"class":179},[162,38880,4828],{"class":172},[162,38882,34333],{"class":168},[162,38884,2313],{"class":172},[162,38886,35286],{"class":179},[162,38888,434],{"class":168},[162,38890,38891],{"class":164,"line":11081},[162,38892,301],{"emptyLinePlaceholder":300},[162,38894,38895],{"class":164,"line":11087},[162,38896,301],{"emptyLinePlaceholder":300},[162,38898,38899],{"class":164,"line":11114},[162,38900,35301],{"class":361},[162,38902,38903],{"class":164,"line":11119},[162,38904,35306],{"class":361},[162,38906,38907],{"class":164,"line":11125},[162,38908,35311],{"class":361},[162,38910,38911,38913,38915,38917,38919,38921,38923],{"class":164,"line":11137},[162,38912,35316],{"class":168},[162,38914,173],{"class":172},[162,38916,35321],{"class":168},[162,38918,35324],{"class":671},[162,38920,173],{"class":172},[162,38922,35329],{"class":207},[162,38924,434],{"class":168},[162,38926,38927],{"class":164,"line":11149},[162,38928,301],{"emptyLinePlaceholder":300},[162,38930,38931],{"class":164,"line":11161},[162,38932,35340],{"class":361},[162,38934,38935,38937,38939],{"class":164,"line":12816},[162,38936,35345],{"class":168},[162,38938,173],{"class":172},[162,38940,35350],{"class":168},[162,38942,38943],{"class":164,"line":12841},[162,38944,301],{"emptyLinePlaceholder":300},[162,38946,38947],{"class":164,"line":12864},[162,38948,35359],{"class":361},[162,38950,38951,38953,38955],{"class":164,"line":12888},[162,38952,34373],{"class":168},[162,38954,173],{"class":172},[162,38956,35368],{"class":168},[162,38958,38959],{"class":164,"line":12893},[162,38960,35373],{"class":361},[162,38962,38963],{"class":164,"line":12898},[162,38964,35378],{"class":361},[162,38966,38967],{"class":164,"line":12903},[162,38968,35383],{"class":361},[162,38970,38971,38973,38975],{"class":164,"line":12912},[162,38972,35388],{"class":168},[162,38974,173],{"class":172},[162,38976,35393],{"class":168},[162,38978,38979],{"class":164,"line":12917},[162,38980,301],{"emptyLinePlaceholder":300},[162,38982,38983],{"class":164,"line":12923},[162,38984,301],{"emptyLinePlaceholder":300},[162,38986,38987],{"class":164,"line":12944},[162,38988,35406],{"class":361},[162,38990,38991],{"class":164,"line":12950},[162,38992,35411],{"class":361},[162,38994,38995,38997,38999],{"class":164,"line":12964},[162,38996,35416],{"class":168},[162,38998,173],{"class":172},[162,39000,35421],{"class":207},[162,39002,39003],{"class":164,"line":12970},[162,39004,35426],{"class":361},[162,39006,39007,39009,39011],{"class":164,"line":12997},[162,39008,35431],{"class":168},[162,39010,173],{"class":172},[162,39012,35436],{"class":168},[162,39014,39015],{"class":164,"line":13006},[162,39016,35441],{"class":361},[162,39018,39019,39021,39023],{"class":164,"line":13012},[162,39020,35446],{"class":168},[162,39022,173],{"class":172},[162,39024,35436],{"class":168},[162,39026,39027],{"class":164,"line":13020},[162,39028,35455],{"class":361},[162,39030,39031,39033,39035],{"class":164,"line":13025},[162,39032,35460],{"class":168},[162,39034,173],{"class":172},[162,39036,35436],{"class":168},[162,39038,39039],{"class":164,"line":19695},[162,39040,35469],{"class":361},[162,39042,39043,39045,39047],{"class":164,"line":19701},[162,39044,35474],{"class":168},[162,39046,173],{"class":172},[162,39048,35436],{"class":168},[162,39050,39051],{"class":164,"line":19724},[162,39052,301],{"emptyLinePlaceholder":300},[162,39054,39055],{"class":164,"line":19730},[162,39056,35487],{"class":361},[162,39058,39059,39061,39063],{"class":164,"line":19753},[162,39060,35492],{"class":168},[162,39062,173],{"class":172},[162,39064,35497],{"class":168},[162,39066,39067],{"class":164,"line":19767},[162,39068,301],{"emptyLinePlaceholder":300},[162,39070,39071],{"class":164,"line":19787},[162,39072,301],{"emptyLinePlaceholder":300},[162,39074,39075],{"class":164,"line":19793},[162,39076,35510],{"class":361},[162,39078,39079,39081,39083,39085,39087],{"class":164,"line":19804},[162,39080,6315],{"class":172},[162,39082,35517],{"class":168},[162,39084,814],{"class":172},[162,39086,2647],{"class":207},[162,39088,35524],{"class":168},[162,39090,39091,39093,39095,39097,39099,39101,39103,39105,39107,39109,39111],{"class":164,"line":19827},[162,39092,2300],{"class":207},[162,39094,604],{"class":168},[162,39096,35533],{"class":179},[162,39098,1532],{"class":207},[162,39100,946],{"class":179},[162,39102,1532],{"class":207},[162,39104,979],{"class":179},[162,39106,35544],{"class":168},[162,39108,353],{"class":172},[162,39110,208],{"class":207},[162,39112,586],{"class":168},[162,39114,39115,39117,39119,39121,39123,39125],{"class":164,"line":19849},[162,39116,2300],{"class":207},[162,39118,604],{"class":168},[162,39120,35559],{"class":179},[162,39122,3745],{"class":172},[162,39124,1006],{"class":207},[162,39126,434],{"class":168},[162,39128,39129],{"class":164,"line":19854},[162,39130,301],{"emptyLinePlaceholder":300},[162,39132,39133],{"class":164,"line":19860},[162,39134,35574],{"class":361},[162,39136,39137],{"class":164,"line":19874},[162,39138,35579],{"class":361},[162,39140,39141,39143,39145],{"class":164,"line":19887},[162,39142,35584],{"class":168},[162,39144,173],{"class":172},[162,39146,35421],{"class":207},[162,39148,39149],{"class":164,"line":19892},[162,39150,35593],{"class":361},[162,39152,39153,39155,39157],{"class":164,"line":19906},[162,39154,35598],{"class":168},[162,39156,173],{"class":172},[162,39158,6200],{"class":207},[162,39160,39161],{"class":164,"line":19911},[162,39162,35607],{"class":361},[162,39164,39165,39167,39169],{"class":164,"line":19917},[162,39166,35612],{"class":168},[162,39168,173],{"class":172},[162,39170,35421],{"class":207},[162,39172,39173],{"class":164,"line":19922},[162,39174,35621],{"class":361},[162,39176,39177,39179,39181],{"class":164,"line":19936},[162,39178,35626],{"class":168},[162,39180,173],{"class":172},[162,39182,6200],{"class":207},[162,39184,39185],{"class":164,"line":19941},[162,39186,35635],{"class":361},[162,39188,39189,39191,39193],{"class":164,"line":19946},[162,39190,35640],{"class":168},[162,39192,173],{"class":172},[162,39194,6200],{"class":207},[162,39196,39197],{"class":164,"line":19960},[162,39198,35649],{"class":361},[162,39200,39201,39203,39205],{"class":164,"line":19972},[162,39202,35654],{"class":168},[162,39204,173],{"class":172},[162,39206,6200],{"class":207},[162,39208,39209],{"class":164,"line":19977},[162,39210,35663],{"class":361},[162,39212,39213,39215,39217,39219,39221],{"class":164,"line":19990},[162,39214,6517],{"class":172},[162,39216,34682],{"class":168},[162,39218,814],{"class":172},[162,39220,845],{"class":207},[162,39222,35676],{"class":168},[162,39224,39225],{"class":164,"line":19995},[162,39226,35681],{"class":361},[162,39228,39229,39231,39233],{"class":164,"line":20000},[162,39230,35686],{"class":168},[162,39232,173],{"class":172},[162,39234,35691],{"class":168},[162,39236,39237],{"class":164,"line":20005},[162,39238,35696],{"class":361},[162,39240,39241,39243,39245],{"class":164,"line":20018},[162,39242,35701],{"class":168},[162,39244,173],{"class":172},[162,39246,35706],{"class":168},[162,39248,39249],{"class":164,"line":20023},[162,39250,35712],{"class":361},[162,39252,39253],{"class":164,"line":35709},[162,39254,35718],{"class":168},[162,39256,39257],{"class":164,"line":35715},[162,39258,35724],{"class":361},[162,39260,39261],{"class":164,"line":35721},[162,39262,35730],{"class":361},[162,39264,39265,39267,39269],{"class":164,"line":35727},[162,39266,35736],{"class":168},[162,39268,173],{"class":172},[162,39270,35741],{"class":168},[162,39272,39273],{"class":164,"line":35733},[162,39274,35747],{"class":361},[162,39276,39277,39279,39281,39283,39285,39287,39289],{"class":164,"line":35744},[162,39278,35753],{"class":168},[162,39280,173],{"class":172},[162,39282,35758],{"class":168},[162,39284,35761],{"class":671},[162,39286,173],{"class":172},[162,39288,208],{"class":207},[162,39290,434],{"class":168},[162,39292,39293],{"class":164,"line":35750},[162,39294,35773],{"class":361},[162,39296,39297,39299,39301],{"class":164,"line":35770},[162,39298,35779],{"class":168},[162,39300,173],{"class":172},[162,39302,35784],{"class":168},[162,39304,39305],{"class":164,"line":35776},[162,39306,35790],{"class":361},[162,39308,39309],{"class":164,"line":35787},[162,39310,35796],{"class":168},[162,39312,39313],{"class":164,"line":35793},[162,39314,35802],{"class":361},[162,39316,39317],{"class":164,"line":35799},[162,39318,35808],{"class":168},[162,39320,39321],{"class":164,"line":35805},[162,39322,35814],{"class":361},[162,39324,39325],{"class":164,"line":35811},[162,39326,35820],{"class":168},[162,39328,39329],{"class":164,"line":35817},[162,39330,35826],{"class":361},[162,39332,39333,39335,39337,39339,39341,39343,39345],{"class":164,"line":35823},[162,39334,35832],{"class":168},[162,39336,926],{"class":172},[162,39338,35837],{"class":168},[162,39340,3745],{"class":172},[162,39342,35842],{"class":168},[162,39344,312],{"class":207},[162,39346,434],{"class":168},[162,39348,39349],{"class":164,"line":35829},[162,39350,35852],{"class":361},[162,39352,39353,39355,39357,39359,39361],{"class":164,"line":35849},[162,39354,35858],{"class":168},[162,39356,926],{"class":172},[162,39358,35863],{"class":168},[162,39360,2292],{"class":172},[162,39362,35868],{"class":168},[162,39364,39365],{"class":164,"line":35855},[162,39366,35874],{"class":361},[162,39368,39369,39371,39373,39375,39377],{"class":164,"line":35871},[162,39370,35880],{"class":168},[162,39372,926],{"class":172},[162,39374,35842],{"class":168},[162,39376,312],{"class":207},[162,39378,434],{"class":168},[162,39380,39381],{"class":164,"line":35877},[162,39382,35894],{"class":361},[162,39384,39385,39387,39389,39391,39393],{"class":164,"line":35891},[162,39386,6517],{"class":172},[162,39388,35902],{"class":168},[162,39390,814],{"class":172},[162,39392,845],{"class":207},[162,39394,35909],{"class":168},[162,39396,39397],{"class":164,"line":35897},[162,39398,35915],{"class":361},[162,39400,39401,39403,39405],{"class":164,"line":35912},[162,39402,35686],{"class":168},[162,39404,173],{"class":172},[162,39406,35691],{"class":168},[162,39408,39409],{"class":164,"line":35918},[162,39410,35930],{"class":361},[162,39412,39413,39415,39417],{"class":164,"line":35927},[162,39414,35701],{"class":168},[162,39416,173],{"class":172},[162,39418,35706],{"class":168},[162,39420,39421],{"class":164,"line":35933},[162,39422,35945],{"class":361},[162,39424,39425],{"class":164,"line":35942},[162,39426,35951],{"class":168},[162,39428,39429],{"class":164,"line":35948},[162,39430,39431],{"class":361},"            # 验证时不计算梯度以节省内存\u002F计算\n",[162,39433,39434,39436],{"class":164,"line":35954},[162,39435,35957],{"class":172},[162,39437,35960],{"class":168},[162,39439,39440],{"class":164,"line":35963},[162,39441,35966],{"class":361},[162,39443,39444,39447,39449],{"class":164,"line":35969},[162,39445,39446],{"class":168},"                output",[162,39448,173],{"class":172},[162,39450,35741],{"class":168},[162,39452,39453],{"class":164,"line":35980},[162,39454,35983],{"class":361},[162,39456,39457,39460,39462,39464,39466,39468,39470],{"class":164,"line":35986},[162,39458,39459],{"class":168},"                pre_lab",[162,39461,173],{"class":172},[162,39463,35758],{"class":168},[162,39465,35761],{"class":671},[162,39467,173],{"class":172},[162,39469,208],{"class":207},[162,39471,434],{"class":168},[162,39473,39474],{"class":164,"line":36005},[162,39475,36008],{"class":361},[162,39477,39478,39481,39483],{"class":164,"line":36011},[162,39479,39480],{"class":168},"                val_batch_loss",[162,39482,173],{"class":172},[162,39484,35784],{"class":168},[162,39486,39487],{"class":164,"line":36022},[162,39488,36025],{"class":361},[162,39490,39491,39494,39496,39499,39501,39503,39505],{"class":164,"line":36028},[162,39492,39493],{"class":168},"                val_loss",[162,39495,926],{"class":172},[162,39497,39498],{"class":168},"val_batch_loss.item()",[162,39500,3745],{"class":172},[162,39502,35842],{"class":168},[162,39504,312],{"class":207},[162,39506,434],{"class":168},[162,39508,39509,39512,39514,39516,39518],{"class":164,"line":36048},[162,39510,39511],{"class":168},"                val_corrects",[162,39513,926],{"class":172},[162,39515,35863],{"class":168},[162,39517,2292],{"class":172},[162,39519,35868],{"class":168},[162,39521,39522],{"class":164,"line":36064},[162,39523,39524],{"class":361},"            # 当前用于验证的样本数量\n",[162,39526,39527,39530,39532,39534,39536],{"class":164,"line":36070},[162,39528,39529],{"class":168},"            val_num",[162,39531,926],{"class":172},[162,39533,35842],{"class":168},[162,39535,312],{"class":207},[162,39537,434],{"class":168},[162,39539,39540],{"class":164,"line":36084},[162,39541,36087],{"class":361},[162,39543,39544],{"class":164,"line":36090},[162,39545,36093],{"class":361},[162,39547,39548,39550,39552],{"class":164,"line":36096},[162,39549,36099],{"class":168},[162,39551,946],{"class":172},[162,39553,36104],{"class":168},[162,39555,39556],{"class":164,"line":36107},[162,39557,36110],{"class":361},[162,39559,39560],{"class":164,"line":36113},[162,39561,36116],{"class":361},[162,39563,39564,39566,39568],{"class":164,"line":36119},[162,39565,36122],{"class":168},[162,39567,946],{"class":172},[162,39569,36104],{"class":168},[162,39571,39572],{"class":164,"line":36129},[162,39573,36132],{"class":361},[162,39575,39576,39578,39580],{"class":164,"line":36135},[162,39577,36138],{"class":168},[162,39579,946],{"class":172},[162,39581,36143],{"class":168},[162,39583,39584],{"class":164,"line":36146},[162,39585,36149],{"class":361},[162,39587,39588,39590,39592],{"class":164,"line":36152},[162,39589,36155],{"class":168},[162,39591,946],{"class":172},[162,39593,36143],{"class":168},[162,39595,39596],{"class":164,"line":36162},[162,39597,301],{"emptyLinePlaceholder":300},[162,39599,39600],{"class":164,"line":36167},[162,39601,36170],{"class":361},[162,39603,39604,39606,39608,39610,39612,39614,39616,39618,39620,39622,39624,39626,39628,39630,39632,39634,39636,39638,39640,39642],{"class":164,"line":36173},[162,39605,2300],{"class":207},[162,39607,604],{"class":168},[162,39609,6706],{"class":179},[162,39611,1532],{"class":207},[162,39613,36184],{"class":179},[162,39615,967],{"class":207},[162,39617,36189],{"class":172},[162,39619,976],{"class":207},[162,39621,36194],{"class":179},[162,39623,967],{"class":207},[162,39625,36189],{"class":172},[162,39627,976],{"class":207},[162,39629,6706],{"class":179},[162,39631,36205],{"class":168},[162,39633,353],{"class":172},[162,39635,208],{"class":207},[162,39637,36212],{"class":168},[162,39639,353],{"class":172},[162,39641,208],{"class":207},[162,39643,36219],{"class":168},[162,39645,39646,39648,39650,39652,39654,39656,39658,39660,39662,39664,39666,39668,39670,39672,39674,39676,39678,39680,39682,39684],{"class":164,"line":36222},[162,39647,2300],{"class":207},[162,39649,604],{"class":168},[162,39651,6706],{"class":179},[162,39653,1532],{"class":207},[162,39655,36233],{"class":179},[162,39657,967],{"class":207},[162,39659,36189],{"class":172},[162,39661,976],{"class":207},[162,39663,36242],{"class":179},[162,39665,967],{"class":207},[162,39667,36189],{"class":172},[162,39669,976],{"class":207},[162,39671,6706],{"class":179},[162,39673,36253],{"class":168},[162,39675,353],{"class":172},[162,39677,208],{"class":207},[162,39679,36260],{"class":168},[162,39681,353],{"class":172},[162,39683,208],{"class":207},[162,39685,36219],{"class":168},[162,39687,39688],{"class":164,"line":36269},[162,39689,301],{"emptyLinePlaceholder":300},[162,39691,39692],{"class":164,"line":36274},[162,39693,36277],{"class":361},[162,39695,39696,39698,39700,39702,39704,39706,39708],{"class":164,"line":36280},[162,39697,5614],{"class":172},[162,39699,36285],{"class":168},[162,39701,353],{"class":172},[162,39703,208],{"class":207},[162,39705,3120],{"class":168},[162,39707,3000],{"class":172},[162,39709,36296],{"class":168},[162,39711,39712],{"class":164,"line":36299},[162,39713,36302],{"class":361},[162,39715,39716,39718,39720,39722,39724,39726,39728],{"class":164,"line":36305},[162,39717,36308],{"class":168},[162,39719,3354],{"class":207},[162,39721,173],{"class":172},[162,39723,36315],{"class":168},[162,39725,353],{"class":172},[162,39727,208],{"class":207},[162,39729,194],{"class":168},[162,39731,39732],{"class":164,"line":36324},[162,39733,36327],{"class":361},[162,39735,39736],{"class":164,"line":36330},[162,39737,36333],{"class":361},[162,39739,39740,39742,39744],{"class":164,"line":36336},[162,39741,36339],{"class":168},[162,39743,173],{"class":172},[162,39745,35393],{"class":168},[162,39747,39748],{"class":164,"line":36346},[162,39749,301],{"emptyLinePlaceholder":300},[162,39751,39752],{"class":164,"line":36351},[162,39753,36354],{"class":361},[162,39755,39756,39758,39760,39762,39764],{"class":164,"line":36357},[162,39757,36360],{"class":168},[162,39759,173],{"class":172},[162,39761,36365],{"class":168},[162,39763,353],{"class":172},[162,39765,36370],{"class":168},[162,39767,39768,39770,39772,39774,39776,39778,39780,39782,39784,39786,39788,39790,39792,39794,39796,39798,39800,39802],{"class":164,"line":36373},[162,39769,2300],{"class":207},[162,39771,604],{"class":168},[162,39773,36380],{"class":179},[162,39775,967],{"class":207},[162,39777,36385],{"class":172},[162,39779,976],{"class":207},[162,39781,3833],{"class":179},[162,39783,967],{"class":207},[162,39785,36385],{"class":172},[162,39787,976],{"class":207},[162,39789,36398],{"class":179},[162,39791,36401],{"class":168},[162,39793,36404],{"class":172},[162,39795,4184],{"class":207},[162,39797,36409],{"class":168},[162,39799,2708],{"class":172},[162,39801,4184],{"class":207},[162,39803,586],{"class":168},[162,39805,39806],{"class":164,"line":36418},[162,39807,39808],{"class":361},"    # 选择最优参数并保存\n",[162,39810,39811],{"class":164,"line":36424},[162,39812,39813],{"class":361},"    # 保存最佳模型权重字典\n",[162,39815,39816,39819,39821],{"class":164,"line":36430},[162,39817,39818],{"class":168},"    torch.save(best_model_wts,",[162,39820,36442],{"class":179},[162,39822,434],{"class":168},[162,39824,39825],{"class":164,"line":36436},[162,39826,36462],{"class":361},[162,39828,39829,39831,39833,39835,39837,39839],{"class":164,"line":36447},[162,39830,36468],{"class":168},[162,39832,173],{"class":172},[162,39834,36473],{"class":168},[162,39836,36476],{"class":671},[162,39838,173],{"class":172},[162,39840,4685],{"class":168},[162,39842,39843,39845,39847,39849],{"class":164,"line":36453},[162,39844,36486],{"class":179},[162,39846,1332],{"class":168},[162,39848,36491],{"class":207},[162,39850,36494],{"class":168},[162,39852,39853,39855],{"class":164,"line":36459},[162,39854,36500],{"class":179},[162,39856,36503],{"class":168},[162,39858,39859,39861],{"class":164,"line":36465},[162,39860,36509],{"class":179},[162,39862,36512],{"class":168},[162,39864,39865,39867],{"class":164,"line":36483},[162,39866,36518],{"class":179},[162,39868,36521],{"class":168},[162,39870,39871,39873],{"class":164,"line":36497},[162,39872,36527],{"class":179},[162,39874,36530],{"class":168},[162,39876,39877],{"class":164,"line":36506},[162,39878,36536],{"class":168},[162,39880,39881],{"class":164,"line":36515},[162,39882,36542],{"class":361},[162,39884,39885,39887],{"class":164,"line":36524},[162,39886,7203],{"class":172},[162,39888,36550],{"class":168},[162,39890,39891],{"class":164,"line":36533},[162,39892,301],{"emptyLinePlaceholder":300},[162,39894,39895],{"class":164,"line":36539},[162,39896,36561],{"class":361},[162,39898,39899,39901,39903],{"class":164,"line":36545},[162,39900,35026],{"class":172},[162,39902,36569],{"class":5082},[162,39904,36572],{"class":168},[162,39906,39907],{"class":164,"line":36553},[162,39908,36578],{"class":361},[162,39910,39911,39913,39915,39917,39919,39921,39923,39925],{"class":164,"line":36558},[162,39912,36584],{"class":168},[162,39914,34772],{"class":671},[162,39916,173],{"class":172},[162,39918,604],{"class":168},[162,39920,3788],{"class":207},[162,39922,3670],{"class":168},[162,39924,223],{"class":207},[162,39926,586],{"class":168},[162,39928,39929],{"class":164,"line":36564},[162,39930,36604],{"class":361},[162,39932,39933],{"class":164,"line":36575},[162,39934,36610],{"class":361},[162,39936,39937],{"class":164,"line":36581},[162,39938,36616],{"class":361},[162,39940,39941,39943,39945,39947,39949,39951,39953],{"class":164,"line":36601},[162,39942,34806],{"class":168},[162,39944,208],{"class":207},[162,39946,3670],{"class":168},[162,39948,213],{"class":207},[162,39950,3670],{"class":168},[162,39952,208],{"class":207},[162,39954,434],{"class":168},[162,39956,39957],{"class":164,"line":36607},[162,39958,36639],{"class":361},[162,39960,39961],{"class":164,"line":36613},[162,39962,36645],{"class":361},[162,39964,39965],{"class":164,"line":36619},[162,39966,36651],{"class":361},[162,39968,39969],{"class":164,"line":36636},[162,39970,36657],{"class":361},[162,39972,39973],{"class":164,"line":36642},[162,39974,36663],{"class":361},[162,39976,39977,39979,39981,39983,39985,39987,39989,39991,39993],{"class":164,"line":36648},[162,39978,36669],{"class":168},[162,39980,36672],{"class":179},[162,39982,36675],{"class":168},[162,39984,36678],{"class":179},[162,39986,3670],{"class":168},[162,39988,36683],{"class":671},[162,39990,173],{"class":172},[162,39992,36688],{"class":179},[162,39994,434],{"class":168},[162,39996,39997,39999,40001,40003,40005,40007,40009,40011,40013],{"class":164,"line":36654},[162,39998,36669],{"class":168},[162,40000,36672],{"class":179},[162,40002,36700],{"class":168},[162,40004,36703],{"class":179},[162,40006,3670],{"class":168},[162,40008,36683],{"class":671},[162,40010,173],{"class":172},[162,40012,36712],{"class":179},[162,40014,434],{"class":168},[162,40016,40017],{"class":164,"line":36660},[162,40018,36720],{"class":361},[162,40020,40021],{"class":164,"line":36666},[162,40022,36726],{"class":168},[162,40024,40025],{"class":164,"line":36693},[162,40026,36732],{"class":361},[162,40028,40029,40031,40033],{"class":164,"line":36717},[162,40030,36738],{"class":168},[162,40032,36741],{"class":179},[162,40034,434],{"class":168},[162,40036,40037,40039,40041],{"class":164,"line":36723},[162,40038,36749],{"class":168},[162,40040,36752],{"class":179},[162,40042,434],{"class":168},[162,40044,40045],{"class":164,"line":36729},[162,40046,36760],{"class":361},[162,40048,40049,40051,40053,40055,40057,40059,40061],{"class":164,"line":36735},[162,40050,34806],{"class":168},[162,40052,208],{"class":207},[162,40054,3670],{"class":168},[162,40056,213],{"class":207},[162,40058,3670],{"class":168},[162,40060,213],{"class":207},[162,40062,434],{"class":168},[162,40064,40065,40067,40069,40071,40073,40075,40077,40079,40081],{"class":164,"line":36746},[162,40066,36669],{"class":168},[162,40068,36672],{"class":179},[162,40070,36787],{"class":168},[162,40072,36678],{"class":179},[162,40074,3670],{"class":168},[162,40076,36683],{"class":671},[162,40078,173],{"class":172},[162,40080,36798],{"class":179},[162,40082,434],{"class":168},[162,40084,40085,40087,40089,40091,40093,40095,40097,40099,40101],{"class":164,"line":36757},[162,40086,36669],{"class":168},[162,40088,36672],{"class":179},[162,40090,36810],{"class":168},[162,40092,36703],{"class":179},[162,40094,3670],{"class":168},[162,40096,36683],{"class":671},[162,40098,173],{"class":172},[162,40100,36821],{"class":179},[162,40102,434],{"class":168},[162,40104,40105],{"class":164,"line":36763},[162,40106,36829],{"class":361},[162,40108,40109],{"class":164,"line":36780},[162,40110,36726],{"class":168},[162,40112,40113,40115,40117],{"class":164,"line":36803},[162,40114,36738],{"class":168},[162,40116,36672],{"class":179},[162,40118,434],{"class":168},[162,40120,40121,40123,40125],{"class":164,"line":36826},[162,40122,36749],{"class":168},[162,40124,36851],{"class":179},[162,40126,434],{"class":168},[162,40128,40129],{"class":164,"line":36832},[162,40130,36859],{"class":168},[162,40132,40133],{"class":164,"line":36837},[162,40134,301],{"emptyLinePlaceholder":300},[162,40136,40137],{"class":164,"line":36846},[162,40138,36870],{"class":361},[162,40140,40141,40143,40145,40147,40149],{"class":164,"line":36856},[162,40142,2703],{"class":172},[162,40144,34304],{"class":207},[162,40146,2292],{"class":172},[162,40148,34309],{"class":179},[162,40150,2316],{"class":168},[162,40152,40153],{"class":164,"line":36862},[162,40154,36889],{"class":361},[162,40156,40157,40160,40162],{"class":164,"line":36867},[162,40158,40159],{"class":168},"    AlexNet",[162,40161,173],{"class":172},[162,40163,40164],{"class":168},"AlexNet()\n",[162,40166,40167,40169,40171],{"class":164,"line":36873},[162,40168,36906],{"class":168},[162,40170,173],{"class":172},[162,40172,36911],{"class":168},[162,40174,40175,40177,40179,40182,40184,40186,40188],{"class":164,"line":36886},[162,40176,36468],{"class":168},[162,40178,173],{"class":172},[162,40180,40181],{"class":168},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[162,40183,36924],{"class":671},[162,40185,173],{"class":172},[162,40187,1011],{"class":207},[162,40189,434],{"class":168},[162,40191,40192],{"class":164,"line":36892},[162,40193,36936],{"class":168},[1452,40195,40196],{"start":228},[1455,40197,36949],{},[153,40199,40201],{"className":155,"code":40200,"language":157,"meta":158,"style":158},"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",[71,40202,40203,40209,40219,40229,40239,40243,40253,40263,40274,40278,40282,40286,40294,40310,40320,40336,40346,40360,40364,40374,40384,40394,40400,40404,40408,40416,40420,40436,40444,40448,40452,40460,40468,40472,40476,40480,40484,40490,40494,40504,40512,40520,40524,40528,40532,40540,40544,40560,40564,40568,40572,40584,40588,40600,40604,40608,40620,40624,40634,40638,40642,40654,40658,40666,40670,40674,40682,40686,40694,40698,40702,40706,40710,40714,40730,40738,40742,40746,40794,40800,40804,40814,40822,40830,40834,40838,40842,40846,40854,40858,40874,40878,40886,40894],{"__ignoreMap":158},[162,40204,40205,40207],{"class":164,"line":165},[162,40206,33478],{"class":172},[162,40208,33481],{"class":168},[162,40210,40211,40213,40215,40217],{"class":164,"line":197},[162,40212,33478],{"class":172},[162,40214,34498],{"class":168},[162,40216,34466],{"class":172},[162,40218,34503],{"class":168},[162,40220,40221,40223,40225,40227],{"class":164,"line":228},[162,40222,33821],{"class":172},[162,40224,36977],{"class":168},[162,40226,33478],{"class":172},[162,40228,36982],{"class":168},[162,40230,40231,40233,40235,40237],{"class":164,"line":252},[162,40232,33821],{"class":172},[162,40234,34481],{"class":168},[162,40236,33478],{"class":172},[162,40238,34486],{"class":168},[162,40240,40241],{"class":164,"line":328},[162,40242,36997],{"class":361},[162,40244,40245,40247,40249,40251],{"class":164,"line":466},[162,40246,33821],{"class":172},[162,40248,34451],{"class":168},[162,40250,33478],{"class":172},[162,40252,34456],{"class":168},[162,40254,40255,40257,40259,40261],{"class":164,"line":471},[162,40256,33821],{"class":172},[162,40258,34993],{"class":168},[162,40260,33478],{"class":172},[162,40262,38632],{"class":168},[162,40264,40265,40267,40270,40272],{"class":164,"line":687},[162,40266,33821],{"class":172},[162,40268,40269],{"class":168}," 练习.AlexNet.model ",[162,40271,33478],{"class":172},[162,40273,38632],{"class":168},[162,40275,40276],{"class":164,"line":692},[162,40277,301],{"emptyLinePlaceholder":300},[162,40279,40280],{"class":164,"line":698},[162,40281,301],{"emptyLinePlaceholder":300},[162,40283,40284],{"class":164,"line":2955},[162,40285,37026],{"class":361},[162,40287,40288,40290,40292],{"class":164,"line":2960},[162,40289,35026],{"class":172},[162,40291,37033],{"class":5082},[162,40293,35032],{"class":168},[162,40295,40296,40298,40300,40302,40304,40306,40308],{"class":164,"line":2971},[162,40297,37040],{"class":168},[162,40299,173],{"class":172},[162,40301,34538],{"class":168},[162,40303,34541],{"class":671},[162,40305,173],{"class":172},[162,40307,34546],{"class":179},[162,40309,1735],{"class":168},[162,40311,40312,40314,40316,40318],{"class":164,"line":2984},[162,40313,37057],{"class":671},[162,40315,173],{"class":172},[162,40317,37062],{"class":207},[162,40319,1735],{"class":168},[162,40321,40322,40324,40326,40328,40330,40332,40334],{"class":164,"line":2989},[162,40323,37069],{"class":671},[162,40325,173],{"class":172},[162,40327,34574],{"class":168},[162,40329,34577],{"class":671},[162,40331,173],{"class":172},[162,40333,38524],{"class":207},[162,40335,34585],{"class":168},[162,40337,40338,40340,40342,40344],{"class":164,"line":3011},[162,40339,37086],{"class":671},[162,40341,173],{"class":172},[162,40343,247],{"class":207},[162,40345,434],{"class":168},[162,40347,40348,40350,40352,40354,40356,40358],{"class":164,"line":3022},[162,40349,37097],{"class":168},[162,40351,173],{"class":172},[162,40353,34615],{"class":168},[162,40355,34618],{"class":671},[162,40357,173],{"class":172},[162,40359,37108],{"class":168},[162,40361,40362],{"class":164,"line":3027},[162,40363,37113],{"class":361},[162,40365,40366,40368,40370,40372],{"class":164,"line":3046},[162,40367,37118],{"class":671},[162,40369,173],{"class":172},[162,40371,208],{"class":207},[162,40373,1735],{"class":168},[162,40375,40376,40378,40380,40382],{"class":164,"line":3052},[162,40377,37129],{"class":671},[162,40379,173],{"class":172},[162,40381,247],{"class":207},[162,40383,1735],{"class":168},[162,40385,40386,40388,40390,40392],{"class":164,"line":3057},[162,40387,37140],{"class":671},[162,40389,173],{"class":172},[162,40391,312],{"class":207},[162,40393,434],{"class":168},[162,40395,40396,40398],{"class":164,"line":3072},[162,40397,7203],{"class":172},[162,40399,37153],{"class":168},[162,40401,40402],{"class":164,"line":3077},[162,40403,301],{"emptyLinePlaceholder":300},[162,40405,40406],{"class":164,"line":3100},[162,40407,37162],{"class":361},[162,40409,40410,40412,40414],{"class":164,"line":3140},[162,40411,35026],{"class":172},[162,40413,37169],{"class":5082},[162,40415,37172],{"class":168},[162,40417,40418],{"class":164,"line":4878},[162,40419,37177],{"class":361},[162,40421,40422,40424,40426,40428,40430,40432,40434],{"class":164,"line":4883},[162,40423,34321],{"class":168},[162,40425,173],{"class":172},[162,40427,34328],{"class":179},[162,40429,4828],{"class":172},[162,40431,34333],{"class":168},[162,40433,2313],{"class":172},[162,40435,37194],{"class":179},[162,40437,40438,40440,40442],{"class":164,"line":4897},[162,40439,34373],{"class":168},[162,40441,173],{"class":172},[162,40443,35368],{"class":168},[162,40445,40446],{"class":164,"line":4902},[162,40447,301],{"emptyLinePlaceholder":300},[162,40449,40450],{"class":164,"line":5694},[162,40451,37211],{"class":361},[162,40453,40454,40456,40458],{"class":164,"line":5708},[162,40455,37216],{"class":168},[162,40457,173],{"class":172},[162,40459,35421],{"class":207},[162,40461,40462,40464,40466],{"class":164,"line":5716},[162,40463,37225],{"class":168},[162,40465,173],{"class":172},[162,40467,6200],{"class":207},[162,40469,40470],{"class":164,"line":5721},[162,40471,301],{"emptyLinePlaceholder":300},[162,40473,40474],{"class":164,"line":5727},[162,40475,37238],{"class":361},[162,40477,40478],{"class":164,"line":5733},[162,40479,37243],{"class":361},[162,40481,40482],{"class":164,"line":5738},[162,40483,37248],{"class":361},[162,40485,40486,40488],{"class":164,"line":11052},[162,40487,37253],{"class":172},[162,40489,35960],{"class":168},[162,40491,40492],{"class":164,"line":11076},[162,40493,37260],{"class":361},[162,40495,40496,40498,40500,40502],{"class":164,"line":11081},[162,40497,6517],{"class":172},[162,40499,37267],{"class":168},[162,40501,814],{"class":172},[162,40503,37272],{"class":168},[162,40505,40506,40508,40510],{"class":164,"line":11087},[162,40507,37277],{"class":168},[162,40509,173],{"class":172},[162,40511,37282],{"class":168},[162,40513,40514,40516,40518],{"class":164,"line":11114},[162,40515,37287],{"class":168},[162,40517,173],{"class":172},[162,40519,37292],{"class":168},[162,40521,40522],{"class":164,"line":11119},[162,40523,37297],{"class":361},[162,40525,40526],{"class":164,"line":11125},[162,40527,35951],{"class":168},[162,40529,40530],{"class":164,"line":11137},[162,40531,37306],{"class":361},[162,40533,40534,40536,40538],{"class":164,"line":11149},[162,40535,35736],{"class":168},[162,40537,173],{"class":172},[162,40539,37315],{"class":168},[162,40541,40542],{"class":164,"line":11161},[162,40543,37320],{"class":361},[162,40545,40546,40548,40550,40552,40554,40556,40558],{"class":164,"line":12816},[162,40547,35753],{"class":168},[162,40549,173],{"class":172},[162,40551,35758],{"class":168},[162,40553,35761],{"class":671},[162,40555,173],{"class":172},[162,40557,208],{"class":207},[162,40559,434],{"class":168},[162,40561,40562],{"class":164,"line":12841},[162,40563,37341],{"class":361},[162,40565,40566],{"class":164,"line":12864},[162,40567,37346],{"class":361},[162,40569,40570],{"class":164,"line":12888},[162,40571,37351],{"class":361},[162,40573,40574,40576,40578,40580,40582],{"class":164,"line":12893},[162,40575,37356],{"class":168},[162,40577,926],{"class":172},[162,40579,35863],{"class":168},[162,40581,2292],{"class":172},[162,40583,37365],{"class":168},[162,40585,40586],{"class":164,"line":12898},[162,40587,37370],{"class":361},[162,40589,40590,40592,40594,40596,40598],{"class":164,"line":12903},[162,40591,37375],{"class":168},[162,40593,926],{"class":172},[162,40595,37380],{"class":168},[162,40597,312],{"class":207},[162,40599,434],{"class":168},[162,40601,40602],{"class":164,"line":12912},[162,40603,301],{"emptyLinePlaceholder":300},[162,40605,40606],{"class":164,"line":12917},[162,40607,37393],{"class":361},[162,40609,40610,40612,40614,40616,40618],{"class":164,"line":12923},[162,40611,37398],{"class":168},[162,40613,173],{"class":172},[162,40615,37403],{"class":168},[162,40617,946],{"class":172},[162,40619,37408],{"class":168},[162,40621,40622],{"class":164,"line":12944},[162,40623,37413],{"class":361},[162,40625,40626,40628,40630,40632],{"class":164,"line":12950},[162,40627,2300],{"class":207},[162,40629,604],{"class":168},[162,40631,37422],{"class":179},[162,40633,37425],{"class":168},[162,40635,40636],{"class":164,"line":12964},[162,40637,301],{"emptyLinePlaceholder":300},[162,40639,40640],{"class":164,"line":12970},[162,40641,37434],{"class":361},[162,40643,40644,40646,40648,40650,40652],{"class":164,"line":12997},[162,40645,2703],{"class":172},[162,40647,34304],{"class":207},[162,40649,2292],{"class":172},[162,40651,34309],{"class":179},[162,40653,2316],{"class":168},[162,40655,40656],{"class":164,"line":13006},[162,40657,37451],{"class":361},[162,40659,40660,40662,40664],{"class":164,"line":13012},[162,40661,34373],{"class":168},[162,40663,173],{"class":172},[162,40665,40164],{"class":168},[162,40667,40668],{"class":164,"line":13020},[162,40669,37464],{"class":361},[162,40671,40672],{"class":164,"line":13025},[162,40673,37469],{"class":361},[162,40675,40676,40678,40680],{"class":164,"line":19695},[162,40677,37474],{"class":168},[162,40679,37477],{"class":179},[162,40681,586],{"class":168},[162,40683,40684],{"class":164,"line":19701},[162,40685,37484],{"class":361},[162,40687,40688,40690,40692],{"class":164,"line":19724},[162,40689,37097],{"class":168},[162,40691,173],{"class":172},[162,40693,37493],{"class":168},[162,40695,40696],{"class":164,"line":19730},[162,40697,37498],{"class":361},[162,40699,40700],{"class":164,"line":19753},[162,40701,37503],{"class":168},[162,40703,40704],{"class":164,"line":19767},[162,40705,301],{"emptyLinePlaceholder":300},[162,40707,40708],{"class":164,"line":19787},[162,40709,37512],{"class":361},[162,40711,40712],{"class":164,"line":19793},[162,40713,37517],{"class":361},[162,40715,40716,40718,40720,40722,40724,40726,40728],{"class":164,"line":19804},[162,40717,34321],{"class":168},[162,40719,173],{"class":172},[162,40721,34328],{"class":179},[162,40723,4828],{"class":172},[162,40725,34333],{"class":168},[162,40727,2313],{"class":172},[162,40729,37194],{"class":179},[162,40731,40732,40734,40736],{"class":164,"line":19827},[162,40733,34373],{"class":168},[162,40735,173],{"class":172},[162,40737,35368],{"class":168},[162,40739,40740],{"class":164,"line":19849},[162,40741,37546],{"class":361},[162,40743,40744],{"class":164,"line":19854},[162,40745,37551],{"class":361},[162,40747,40748,40750,40752,40754,40756,40758,40760,40762,40764,40766,40768,40770,40772,40774,40776,40778,40780,40782,40784,40786,40788,40790,40792],{"class":164,"line":19860},[162,40749,37556],{"class":168},[162,40751,173],{"class":172},[162,40753,4168],{"class":168},[162,40755,37563],{"class":179},[162,40757,3670],{"class":168},[162,40759,37568],{"class":179},[162,40761,3670],{"class":168},[162,40763,37573],{"class":179},[162,40765,3670],{"class":168},[162,40767,37578],{"class":179},[162,40769,3670],{"class":168},[162,40771,37583],{"class":179},[162,40773,3670],{"class":168},[162,40775,37588],{"class":179},[162,40777,3670],{"class":168},[162,40779,37593],{"class":179},[162,40781,3670],{"class":168},[162,40783,37598],{"class":179},[162,40785,3670],{"class":168},[162,40787,37603],{"class":179},[162,40789,3670],{"class":168},[162,40791,37608],{"class":179},[162,40793,194],{"class":168},[162,40795,40796,40798],{"class":164,"line":19874},[162,40797,37253],{"class":172},[162,40799,35960],{"class":168},[162,40801,40802],{"class":164,"line":19887},[162,40803,37621],{"class":361},[162,40805,40806,40808,40810,40812],{"class":164,"line":19892},[162,40807,6517],{"class":172},[162,40809,37628],{"class":168},[162,40811,814],{"class":172},[162,40813,37272],{"class":168},[162,40815,40816,40818,40820],{"class":164,"line":19906},[162,40817,35686],{"class":168},[162,40819,173],{"class":172},[162,40821,35691],{"class":168},[162,40823,40824,40826,40828],{"class":164,"line":19911},[162,40825,35701],{"class":168},[162,40827,173],{"class":172},[162,40829,35706],{"class":168},[162,40831,40832],{"class":164,"line":19917},[162,40833,301],{"emptyLinePlaceholder":300},[162,40835,40836],{"class":164,"line":19922},[162,40837,37657],{"class":361},[162,40839,40840],{"class":164,"line":19936},[162,40841,35951],{"class":168},[162,40843,40844],{"class":164,"line":19941},[162,40845,37666],{"class":361},[162,40847,40848,40850,40852],{"class":164,"line":19946},[162,40849,35736],{"class":168},[162,40851,173],{"class":172},[162,40853,35741],{"class":168},[162,40855,40856],{"class":164,"line":19960},[162,40857,37679],{"class":361},[162,40859,40860,40862,40864,40866,40868,40870,40872],{"class":164,"line":19972},[162,40861,35753],{"class":168},[162,40863,173],{"class":172},[162,40865,35758],{"class":168},[162,40867,35761],{"class":671},[162,40869,173],{"class":172},[162,40871,208],{"class":207},[162,40873,434],{"class":168},[162,40875,40876],{"class":164,"line":19977},[162,40877,37700],{"class":361},[162,40879,40880,40882,40884],{"class":164,"line":19990},[162,40881,37705],{"class":168},[162,40883,173],{"class":172},[162,40885,37710],{"class":168},[162,40887,40888,40890,40892],{"class":164,"line":19995},[162,40889,37715],{"class":168},[162,40891,173],{"class":172},[162,40893,37720],{"class":168},[162,40895,40896,40898,40900,40902,40904,40906,40908,40910],{"class":164,"line":20000},[162,40897,37725],{"class":207},[162,40899,604],{"class":168},[162,40901,37730],{"class":179},[162,40903,37733],{"class":168},[162,40905,37736],{"class":179},[162,40907,3670],{"class":168},[162,40909,37741],{"class":179},[162,40911,37744],{"class":168},[3284,40913,40915],{"id":40914},"_22vgg","2.2.VGG",[25089,40917,40919],{"id":40918},"_221原理","2.2.1.原理",[19,40921,40922],{},[4602,40923],{"alt":158,"src":40924},"\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,40926,40927],{},[4602,40928],{"alt":158,"src":40929},"\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,40931,40932],{},[4602,40933],{"alt":158,"src":40934},"\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,40936,40937],{},"参数详细描述：",[19,40939,40940],{},[4602,40941],{"alt":158,"src":40942},"\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,40944,40945],{},[4602,40946],{"alt":158,"src":40947},"\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,40949,40950],{},[4602,40951],{"alt":158,"src":40952},"\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,40954,40955],{},[4602,40956],{"alt":158,"src":40957},"\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,40959,40960],{},[4602,40961],{"alt":158,"src":40962},"\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",[25089,40964,40966],{"id":40965},"_222代码实现","2.2.2.代码实现",[1452,40968,40969],{},[1455,40970,40971],{},"网络搭建",[153,40973,40975],{"className":155,"code":40974,"language":157,"meta":158,"style":158},"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",[71,40976,40977,40983,40995,41005,41015,41019,41036,41044,41063,41068,41073,41085,41123,41128,41164,41168,41197,41202,41207,41218,41254,41258,41294,41298,41326,41330,41335,41346,41382,41386,41422,41426,41462,41466,41494,41498,41503,41514,41551,41555,41591,41595,41631,41635,41663,41667,41672,41683,41719,41723,41759,41763,41799,41803,41831,41835,41840,41851,41856,41861,41866,41887,41891,41903,41907,41919,41923,41927,41932,41937,41952,41957,41967,41972,41987,41992,42011,42016,42025,42030,42040,42045,42050,42064,42069,42083,42091,42095,42099,42107,42118,42129,42140,42151,42162,42173,42179,42183,42188,42201,42221,42227,42236],{"__ignoreMap":158},[162,40978,40979,40981],{"class":164,"line":165},[162,40980,33478],{"class":172},[162,40982,33481],{"class":168},[162,40984,40985,40987,40990,40992],{"class":164,"line":197},[162,40986,33821],{"class":172},[162,40988,40989],{"class":168}," sympy.core.sympify ",[162,40991,33478],{"class":172},[162,40993,40994],{"class":168}," kernS\n",[162,40996,40997,40999,41001,41003],{"class":164,"line":228},[162,40998,33821],{"class":172},[162,41000,33824],{"class":168},[162,41002,33478],{"class":172},[162,41004,33829],{"class":168},[162,41006,41007,41009,41011,41013],{"class":164,"line":252},[162,41008,33821],{"class":172},[162,41010,33841],{"class":168},[162,41012,33478],{"class":172},[162,41014,33846],{"class":168},[162,41016,41017],{"class":164,"line":328},[162,41018,301],{"emptyLinePlaceholder":300},[162,41020,41021,41023,41026,41028,41030,41032,41034],{"class":164,"line":466},[162,41022,17788],{"class":172},[162,41024,41025],{"class":5082}," VGG16",[162,41027,604],{"class":168},[162,41029,33862],{"class":5082},[162,41031,3847],{"class":168},[162,41033,33867],{"class":5082},[162,41035,33870],{"class":168},[162,41037,41038,41040,41042],{"class":164,"line":471},[162,41039,33885],{"class":172},[162,41041,33888],{"class":207},[162,41043,33891],{"class":168},[162,41045,41046,41048,41050,41053,41055,41057,41059,41061],{"class":164,"line":687},[162,41047,33901],{"class":207},[162,41049,604],{"class":168},[162,41051,41052],{"class":207},"VGG16",[162,41054,183],{"class":168},[162,41056,33907],{"class":207},[162,41058,33910],{"class":168},[162,41060,33913],{"class":207},[162,41062,1526],{"class":168},[162,41064,41065],{"class":164,"line":692},[162,41066,41067],{"class":361},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[162,41069,41070],{"class":164,"line":698},[162,41071,41072],{"class":361},"        # 这里用的是灰度图\n",[162,41074,41075,41077,41080,41082],{"class":164,"line":2955},[162,41076,33929],{"class":207},[162,41078,41079],{"class":168},".block1",[162,41081,173],{"class":172},[162,41083,41084],{"class":168},"nn.Sequential(\n",[162,41086,41087,41090,41092,41094,41096,41098,41100,41102,41104,41106,41108,41110,41112,41114,41116,41118,41120],{"class":164,"line":2960},[162,41088,41089],{"class":168},"            nn.Conv2d(",[162,41091,33940],{"class":671},[162,41093,173],{"class":172},[162,41095,208],{"class":207},[162,41097,3670],{"class":168},[162,41099,33949],{"class":671},[162,41101,173],{"class":172},[162,41103,3504],{"class":207},[162,41105,3670],{"class":168},[162,41107,33958],{"class":671},[162,41109,173],{"class":172},[162,41111,218],{"class":207},[162,41113,3670],{"class":168},[162,41115,33967],{"class":671},[162,41117,173],{"class":172},[162,41119,208],{"class":207},[162,41121,41122],{"class":168},"),\n",[162,41124,41125],{"class":164,"line":2971},[162,41126,41127],{"class":168},"            nn.ReLU(),\n",[162,41129,41130,41132,41134,41136,41138,41140,41142,41144,41146,41148,41150,41152,41154,41156,41158,41160,41162],{"class":164,"line":2984},[162,41131,41089],{"class":168},[162,41133,33940],{"class":671},[162,41135,173],{"class":172},[162,41137,3504],{"class":207},[162,41139,3670],{"class":168},[162,41141,33949],{"class":671},[162,41143,173],{"class":172},[162,41145,3504],{"class":207},[162,41147,3670],{"class":168},[162,41149,33958],{"class":671},[162,41151,173],{"class":172},[162,41153,218],{"class":207},[162,41155,3670],{"class":168},[162,41157,33967],{"class":671},[162,41159,173],{"class":172},[162,41161,208],{"class":207},[162,41163,41122],{"class":168},[162,41165,41166],{"class":164,"line":2989},[162,41167,41127],{"class":168},[162,41169,41170,41173,41175,41177,41179,41181,41183,41185,41187,41189,41191,41193,41195],{"class":164,"line":3011},[162,41171,41172],{"class":168},"            nn.MaxPool2d(",[162,41174,33958],{"class":671},[162,41176,173],{"class":172},[162,41178,213],{"class":207},[162,41180,3670],{"class":168},[162,41182,34013],{"class":671},[162,41184,173],{"class":172},[162,41186,213],{"class":207},[162,41188,3670],{"class":168},[162,41190,33967],{"class":671},[162,41192,173],{"class":172},[162,41194,312],{"class":207},[162,41196,434],{"class":168},[162,41198,41199],{"class":164,"line":3022},[162,41200,41201],{"class":168},"        )\n",[162,41203,41204],{"class":164,"line":3027},[162,41205,41206],{"class":361},"        # 第二层\n",[162,41208,41209,41211,41214,41216],{"class":164,"line":3046},[162,41210,33929],{"class":207},[162,41212,41213],{"class":168},".block2",[162,41215,173],{"class":172},[162,41217,41084],{"class":168},[162,41219,41220,41222,41224,41226,41228,41230,41232,41234,41236,41238,41240,41242,41244,41246,41248,41250,41252],{"class":164,"line":3052},[162,41221,41089],{"class":168},[162,41223,33940],{"class":671},[162,41225,173],{"class":172},[162,41227,3504],{"class":207},[162,41229,3670],{"class":168},[162,41231,33949],{"class":671},[162,41233,173],{"class":172},[162,41235,35149],{"class":207},[162,41237,3670],{"class":168},[162,41239,33958],{"class":671},[162,41241,173],{"class":172},[162,41243,218],{"class":207},[162,41245,3670],{"class":168},[162,41247,33967],{"class":671},[162,41249,173],{"class":172},[162,41251,208],{"class":207},[162,41253,41122],{"class":168},[162,41255,41256],{"class":164,"line":3057},[162,41257,41127],{"class":168},[162,41259,41260,41262,41264,41266,41268,41270,41272,41274,41276,41278,41280,41282,41284,41286,41288,41290,41292],{"class":164,"line":3072},[162,41261,41089],{"class":168},[162,41263,33940],{"class":671},[162,41265,173],{"class":172},[162,41267,35149],{"class":207},[162,41269,3670],{"class":168},[162,41271,33949],{"class":671},[162,41273,173],{"class":172},[162,41275,35149],{"class":207},[162,41277,3670],{"class":168},[162,41279,33958],{"class":671},[162,41281,173],{"class":172},[162,41283,218],{"class":207},[162,41285,3670],{"class":168},[162,41287,33967],{"class":671},[162,41289,173],{"class":172},[162,41291,208],{"class":207},[162,41293,41122],{"class":168},[162,41295,41296],{"class":164,"line":3077},[162,41297,41127],{"class":168},[162,41299,41300,41302,41304,41306,41308,41310,41312,41314,41316,41318,41320,41322,41324],{"class":164,"line":3100},[162,41301,41172],{"class":168},[162,41303,33958],{"class":671},[162,41305,173],{"class":172},[162,41307,213],{"class":207},[162,41309,3670],{"class":168},[162,41311,34013],{"class":671},[162,41313,173],{"class":172},[162,41315,213],{"class":207},[162,41317,3670],{"class":168},[162,41319,33967],{"class":671},[162,41321,173],{"class":172},[162,41323,312],{"class":207},[162,41325,434],{"class":168},[162,41327,41328],{"class":164,"line":3140},[162,41329,41201],{"class":168},[162,41331,41332],{"class":164,"line":4878},[162,41333,41334],{"class":361},"        # 第三层\n",[162,41336,41337,41339,41342,41344],{"class":164,"line":4883},[162,41338,33929],{"class":207},[162,41340,41341],{"class":168},".block3",[162,41343,173],{"class":172},[162,41345,41084],{"class":168},[162,41347,41348,41350,41352,41354,41356,41358,41360,41362,41364,41366,41368,41370,41372,41374,41376,41378,41380],{"class":164,"line":4897},[162,41349,41089],{"class":168},[162,41351,33940],{"class":671},[162,41353,173],{"class":172},[162,41355,35149],{"class":207},[162,41357,3670],{"class":168},[162,41359,33949],{"class":671},[162,41361,173],{"class":172},[162,41363,37945],{"class":207},[162,41365,3670],{"class":168},[162,41367,33958],{"class":671},[162,41369,173],{"class":172},[162,41371,218],{"class":207},[162,41373,3670],{"class":168},[162,41375,33967],{"class":671},[162,41377,173],{"class":172},[162,41379,208],{"class":207},[162,41381,41122],{"class":168},[162,41383,41384],{"class":164,"line":4902},[162,41385,41127],{"class":168},[162,41387,41388,41390,41392,41394,41396,41398,41400,41402,41404,41406,41408,41410,41412,41414,41416,41418,41420],{"class":164,"line":5694},[162,41389,41089],{"class":168},[162,41391,33940],{"class":671},[162,41393,173],{"class":172},[162,41395,37945],{"class":207},[162,41397,3670],{"class":168},[162,41399,33949],{"class":671},[162,41401,173],{"class":172},[162,41403,37945],{"class":207},[162,41405,3670],{"class":168},[162,41407,33958],{"class":671},[162,41409,173],{"class":172},[162,41411,218],{"class":207},[162,41413,3670],{"class":168},[162,41415,33967],{"class":671},[162,41417,173],{"class":172},[162,41419,208],{"class":207},[162,41421,41122],{"class":168},[162,41423,41424],{"class":164,"line":5708},[162,41425,41127],{"class":168},[162,41427,41428,41430,41432,41434,41436,41438,41440,41442,41444,41446,41448,41450,41452,41454,41456,41458,41460],{"class":164,"line":5716},[162,41429,41089],{"class":168},[162,41431,33940],{"class":671},[162,41433,173],{"class":172},[162,41435,37945],{"class":207},[162,41437,3670],{"class":168},[162,41439,33949],{"class":671},[162,41441,173],{"class":172},[162,41443,37945],{"class":207},[162,41445,3670],{"class":168},[162,41447,33958],{"class":671},[162,41449,173],{"class":172},[162,41451,218],{"class":207},[162,41453,3670],{"class":168},[162,41455,33967],{"class":671},[162,41457,173],{"class":172},[162,41459,208],{"class":207},[162,41461,41122],{"class":168},[162,41463,41464],{"class":164,"line":5721},[162,41465,41127],{"class":168},[162,41467,41468,41470,41472,41474,41476,41478,41480,41482,41484,41486,41488,41490,41492],{"class":164,"line":5727},[162,41469,41172],{"class":168},[162,41471,33958],{"class":671},[162,41473,173],{"class":172},[162,41475,213],{"class":207},[162,41477,3670],{"class":168},[162,41479,34013],{"class":671},[162,41481,173],{"class":172},[162,41483,213],{"class":207},[162,41485,3670],{"class":168},[162,41487,33967],{"class":671},[162,41489,173],{"class":172},[162,41491,312],{"class":207},[162,41493,434],{"class":168},[162,41495,41496],{"class":164,"line":5733},[162,41497,41201],{"class":168},[162,41499,41500],{"class":164,"line":5738},[162,41501,41502],{"class":361},"        # 第四层\n",[162,41504,41505,41507,41510,41512],{"class":164,"line":11052},[162,41506,33929],{"class":207},[162,41508,41509],{"class":168},".block4",[162,41511,173],{"class":172},[162,41513,41084],{"class":168},[162,41515,41516,41518,41520,41522,41524,41526,41528,41530,41533,41535,41537,41539,41541,41543,41545,41547,41549],{"class":164,"line":11076},[162,41517,41089],{"class":168},[162,41519,33940],{"class":671},[162,41521,173],{"class":172},[162,41523,37945],{"class":207},[162,41525,3670],{"class":168},[162,41527,33949],{"class":671},[162,41529,173],{"class":172},[162,41531,41532],{"class":207},"512",[162,41534,3670],{"class":168},[162,41536,33958],{"class":671},[162,41538,173],{"class":172},[162,41540,218],{"class":207},[162,41542,3670],{"class":168},[162,41544,33967],{"class":671},[162,41546,173],{"class":172},[162,41548,208],{"class":207},[162,41550,41122],{"class":168},[162,41552,41553],{"class":164,"line":11081},[162,41554,41127],{"class":168},[162,41556,41557,41559,41561,41563,41565,41567,41569,41571,41573,41575,41577,41579,41581,41583,41585,41587,41589],{"class":164,"line":11087},[162,41558,41089],{"class":168},[162,41560,33940],{"class":671},[162,41562,173],{"class":172},[162,41564,41532],{"class":207},[162,41566,3670],{"class":168},[162,41568,33949],{"class":671},[162,41570,173],{"class":172},[162,41572,41532],{"class":207},[162,41574,3670],{"class":168},[162,41576,33958],{"class":671},[162,41578,173],{"class":172},[162,41580,218],{"class":207},[162,41582,3670],{"class":168},[162,41584,33967],{"class":671},[162,41586,173],{"class":172},[162,41588,208],{"class":207},[162,41590,41122],{"class":168},[162,41592,41593],{"class":164,"line":11114},[162,41594,41127],{"class":168},[162,41596,41597,41599,41601,41603,41605,41607,41609,41611,41613,41615,41617,41619,41621,41623,41625,41627,41629],{"class":164,"line":11119},[162,41598,41089],{"class":168},[162,41600,33940],{"class":671},[162,41602,173],{"class":172},[162,41604,41532],{"class":207},[162,41606,3670],{"class":168},[162,41608,33949],{"class":671},[162,41610,173],{"class":172},[162,41612,41532],{"class":207},[162,41614,3670],{"class":168},[162,41616,33958],{"class":671},[162,41618,173],{"class":172},[162,41620,218],{"class":207},[162,41622,3670],{"class":168},[162,41624,33967],{"class":671},[162,41626,173],{"class":172},[162,41628,208],{"class":207},[162,41630,41122],{"class":168},[162,41632,41633],{"class":164,"line":11125},[162,41634,41127],{"class":168},[162,41636,41637,41639,41641,41643,41645,41647,41649,41651,41653,41655,41657,41659,41661],{"class":164,"line":11137},[162,41638,41172],{"class":168},[162,41640,33958],{"class":671},[162,41642,173],{"class":172},[162,41644,213],{"class":207},[162,41646,3670],{"class":168},[162,41648,34013],{"class":671},[162,41650,173],{"class":172},[162,41652,213],{"class":207},[162,41654,3670],{"class":168},[162,41656,33967],{"class":671},[162,41658,173],{"class":172},[162,41660,312],{"class":207},[162,41662,434],{"class":168},[162,41664,41665],{"class":164,"line":11149},[162,41666,41201],{"class":168},[162,41668,41669],{"class":164,"line":11161},[162,41670,41671],{"class":361},"        # 第五层\n",[162,41673,41674,41676,41679,41681],{"class":164,"line":12816},[162,41675,33929],{"class":207},[162,41677,41678],{"class":168},".block5",[162,41680,173],{"class":172},[162,41682,41084],{"class":168},[162,41684,41685,41687,41689,41691,41693,41695,41697,41699,41701,41703,41705,41707,41709,41711,41713,41715,41717],{"class":164,"line":12841},[162,41686,41089],{"class":168},[162,41688,33940],{"class":671},[162,41690,173],{"class":172},[162,41692,41532],{"class":207},[162,41694,3670],{"class":168},[162,41696,33949],{"class":671},[162,41698,173],{"class":172},[162,41700,41532],{"class":207},[162,41702,3670],{"class":168},[162,41704,33958],{"class":671},[162,41706,173],{"class":172},[162,41708,218],{"class":207},[162,41710,3670],{"class":168},[162,41712,33967],{"class":671},[162,41714,173],{"class":172},[162,41716,208],{"class":207},[162,41718,41122],{"class":168},[162,41720,41721],{"class":164,"line":12864},[162,41722,41127],{"class":168},[162,41724,41725,41727,41729,41731,41733,41735,41737,41739,41741,41743,41745,41747,41749,41751,41753,41755,41757],{"class":164,"line":12888},[162,41726,41089],{"class":168},[162,41728,33940],{"class":671},[162,41730,173],{"class":172},[162,41732,41532],{"class":207},[162,41734,3670],{"class":168},[162,41736,33949],{"class":671},[162,41738,173],{"class":172},[162,41740,41532],{"class":207},[162,41742,3670],{"class":168},[162,41744,33958],{"class":671},[162,41746,173],{"class":172},[162,41748,218],{"class":207},[162,41750,3670],{"class":168},[162,41752,33967],{"class":671},[162,41754,173],{"class":172},[162,41756,208],{"class":207},[162,41758,41122],{"class":168},[162,41760,41761],{"class":164,"line":12893},[162,41762,41127],{"class":168},[162,41764,41765,41767,41769,41771,41773,41775,41777,41779,41781,41783,41785,41787,41789,41791,41793,41795,41797],{"class":164,"line":12898},[162,41766,41089],{"class":168},[162,41768,33940],{"class":671},[162,41770,173],{"class":172},[162,41772,41532],{"class":207},[162,41774,3670],{"class":168},[162,41776,33949],{"class":671},[162,41778,173],{"class":172},[162,41780,41532],{"class":207},[162,41782,3670],{"class":168},[162,41784,33958],{"class":671},[162,41786,173],{"class":172},[162,41788,218],{"class":207},[162,41790,3670],{"class":168},[162,41792,33967],{"class":671},[162,41794,173],{"class":172},[162,41796,208],{"class":207},[162,41798,41122],{"class":168},[162,41800,41801],{"class":164,"line":12903},[162,41802,41127],{"class":168},[162,41804,41805,41807,41809,41811,41813,41815,41817,41819,41821,41823,41825,41827,41829],{"class":164,"line":12912},[162,41806,41172],{"class":168},[162,41808,33958],{"class":671},[162,41810,173],{"class":172},[162,41812,213],{"class":207},[162,41814,3670],{"class":168},[162,41816,34013],{"class":671},[162,41818,173],{"class":172},[162,41820,213],{"class":207},[162,41822,3670],{"class":168},[162,41824,33967],{"class":671},[162,41826,173],{"class":172},[162,41828,312],{"class":207},[162,41830,434],{"class":168},[162,41832,41833],{"class":164,"line":12917},[162,41834,41201],{"class":168},[162,41836,41837],{"class":164,"line":12923},[162,41838,41839],{"class":361},"        # 全连接层\n",[162,41841,41842,41844,41847,41849],{"class":164,"line":12944},[162,41843,33929],{"class":207},[162,41845,41846],{"class":168},".block6",[162,41848,173],{"class":172},[162,41850,41084],{"class":168},[162,41852,41853],{"class":164,"line":12950},[162,41854,41855],{"class":361},"            # 平展操作\n",[162,41857,41858],{"class":164,"line":12964},[162,41859,41860],{"class":361},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[162,41862,41863],{"class":164,"line":12970},[162,41864,41865],{"class":168},"            nn.Flatten(),\n",[162,41867,41868,41871,41873,41875,41877,41879,41881,41883,41885],{"class":164,"line":12997},[162,41869,41870],{"class":168},"            nn.Linear(",[162,41872,3661],{"class":207},[162,41874,3745],{"class":172},[162,41876,3661],{"class":207},[162,41878,3745],{"class":172},[162,41880,41532],{"class":207},[162,41882,3670],{"class":168},[162,41884,37945],{"class":207},[162,41886,41122],{"class":168},[162,41888,41889],{"class":164,"line":13006},[162,41890,41127],{"class":168},[162,41892,41893,41895,41897,41899,41901],{"class":164,"line":13012},[162,41894,41870],{"class":168},[162,41896,37945],{"class":207},[162,41898,3670],{"class":168},[162,41900,35149],{"class":207},[162,41902,41122],{"class":168},[162,41904,41905],{"class":164,"line":13020},[162,41906,41127],{"class":168},[162,41908,41909,41911,41913,41915,41917],{"class":164,"line":13025},[162,41910,41870],{"class":168},[162,41912,35149],{"class":207},[162,41914,3670],{"class":168},[162,41916,1006],{"class":207},[162,41918,434],{"class":168},[162,41920,41921],{"class":164,"line":19695},[162,41922,41201],{"class":168},[162,41924,41925],{"class":164,"line":19701},[162,41926,301],{"emptyLinePlaceholder":300},[162,41928,41929],{"class":164,"line":19724},[162,41930,41931],{"class":361},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[162,41933,41934],{"class":164,"line":19730},[162,41935,41936],{"class":361},"        # 循环遍历模型\n",[162,41938,41939,41941,41944,41946,41949],{"class":164,"line":19753},[162,41940,6517],{"class":172},[162,41942,41943],{"class":168}," m ",[162,41945,814],{"class":172},[162,41947,41948],{"class":207}," self",[162,41950,41951],{"class":168},".modules():\n",[162,41953,41954],{"class":164,"line":19767},[162,41955,41956],{"class":361},"            # print(m)\n",[162,41958,41959,41961,41964],{"class":164,"line":19787},[162,41960,7752],{"class":172},[162,41962,41963],{"class":207}," isinstance",[162,41965,41966],{"class":168},"(m,nn.Conv2d):\n",[162,41968,41969],{"class":164,"line":19793},[162,41970,41971],{"class":361},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[162,41973,41974,41977,41980,41982,41985],{"class":164,"line":19804},[162,41975,41976],{"class":168},"                nn.init.kaiming_normal_(m.weight,",[162,41978,41979],{"class":671},"nonlinearity",[162,41981,173],{"class":172},[162,41983,41984],{"class":179},"'relu'",[162,41986,434],{"class":168},[162,41988,41989],{"class":164,"line":19827},[162,41990,41991],{"class":361},"                # 判断b参数是否存在\n",[162,41993,41994,41997,42000,42003,42006,42009],{"class":164,"line":19849},[162,41995,41996],{"class":172},"                if",[162,41998,41999],{"class":168}," m.bias ",[162,42001,42002],{"class":172},"is",[162,42004,42005],{"class":172}," not",[162,42007,42008],{"class":207}," None",[162,42010,2316],{"class":168},[162,42012,42013],{"class":164,"line":19854},[162,42014,42015],{"class":361},"                    # 如果参数不存在的化初始化b=0\n",[162,42017,42018,42021,42023],{"class":164,"line":19860},[162,42019,42020],{"class":168},"                    nn.init.constant_(m.bias,",[162,42022,312],{"class":207},[162,42024,434],{"class":168},[162,42026,42027],{"class":164,"line":19874},[162,42028,42029],{"class":361},"            # 全连接层初始化\n",[162,42031,42032,42035,42037],{"class":164,"line":19887},[162,42033,42034],{"class":172},"            elif",[162,42036,41963],{"class":207},[162,42038,42039],{"class":168},"(m,nn.Linear):\n",[162,42041,42042],{"class":164,"line":19892},[162,42043,42044],{"class":361},"                # 这个初始化方法是利用的是正太分布的方式\n",[162,42046,42047],{"class":164,"line":19906},[162,42048,42049],{"class":361},"                # 均值为0，方差为0.01\n",[162,42051,42052,42055,42057,42059,42062],{"class":164,"line":19911},[162,42053,42054],{"class":168},"                nn.init.normal_(m.weight,",[162,42056,312],{"class":207},[162,42058,3670],{"class":168},[162,42060,42061],{"class":207},"0.01",[162,42063,434],{"class":168},[162,42065,42066],{"class":164,"line":19917},[162,42067,42068],{"class":361},"                # 初始化b参数\n",[162,42070,42071,42073,42075,42077,42079,42081],{"class":164,"line":19922},[162,42072,41996],{"class":172},[162,42074,41999],{"class":168},[162,42076,42002],{"class":172},[162,42078,42005],{"class":172},[162,42080,42008],{"class":207},[162,42082,2316],{"class":168},[162,42084,42085,42087,42089],{"class":164,"line":19936},[162,42086,42020],{"class":168},[162,42088,312],{"class":207},[162,42090,434],{"class":168},[162,42092,42093],{"class":164,"line":19941},[162,42094,301],{"emptyLinePlaceholder":300},[162,42096,42097],{"class":164,"line":19946},[162,42098,38240],{"class":361},[162,42100,42101,42103,42105],{"class":164,"line":19960},[162,42102,33885],{"class":172},[162,42104,34177],{"class":5082},[162,42106,34180],{"class":168},[162,42108,42109,42111,42113,42115],{"class":164,"line":19972},[162,42110,34185],{"class":168},[162,42112,173],{"class":172},[162,42114,33907],{"class":207},[162,42116,42117],{"class":168},".block1(x)\n",[162,42119,42120,42122,42124,42126],{"class":164,"line":19977},[162,42121,34185],{"class":168},[162,42123,173],{"class":172},[162,42125,33907],{"class":207},[162,42127,42128],{"class":168},".block2(x)\n",[162,42130,42131,42133,42135,42137],{"class":164,"line":19990},[162,42132,34185],{"class":168},[162,42134,173],{"class":172},[162,42136,33907],{"class":207},[162,42138,42139],{"class":168},".block3(x)\n",[162,42141,42142,42144,42146,42148],{"class":164,"line":19995},[162,42143,34185],{"class":168},[162,42145,173],{"class":172},[162,42147,33907],{"class":207},[162,42149,42150],{"class":168},".block4(x)\n",[162,42152,42153,42155,42157,42159],{"class":164,"line":20000},[162,42154,34185],{"class":168},[162,42156,173],{"class":172},[162,42158,33907],{"class":207},[162,42160,42161],{"class":168},".block5(x)\n",[162,42163,42164,42166,42168,42170],{"class":164,"line":20005},[162,42165,34185],{"class":168},[162,42167,173],{"class":172},[162,42169,33907],{"class":207},[162,42171,42172],{"class":168},".block6(x)\n",[162,42174,42175,42177],{"class":164,"line":20018},[162,42176,17846],{"class":172},[162,42178,34293],{"class":168},[162,42180,42181],{"class":164,"line":20023},[162,42182,301],{"emptyLinePlaceholder":300},[162,42184,42185],{"class":164,"line":35709},[162,42186,42187],{"class":361},"# 验证模型\n",[162,42189,42190,42192,42194,42196,42199],{"class":164,"line":35715},[162,42191,2703],{"class":172},[162,42193,34304],{"class":207},[162,42195,2292],{"class":172},[162,42197,42198],{"class":179},"'__main__'",[162,42200,2316],{"class":168},[162,42202,42203,42205,42207,42209,42211,42213,42215,42217,42219],{"class":164,"line":35721},[162,42204,34321],{"class":168},[162,42206,173],{"class":172},[162,42208,33536],{"class":168},[162,42210,34328],{"class":179},[162,42212,4828],{"class":172},[162,42214,34333],{"class":168},[162,42216,2313],{"class":172},[162,42218,33561],{"class":179},[162,42220,434],{"class":168},[162,42222,42223,42225],{"class":164,"line":35727},[162,42224,822],{"class":207},[162,42226,33570],{"class":168},[162,42228,42229,42231,42233],{"class":164,"line":35733},[162,42230,34373],{"class":168},[162,42232,173],{"class":172},[162,42234,42235],{"class":168},"VGG16().to(device)\n",[162,42237,42238,42240,42242,42244,42246,42248,42250,42252],{"class":164,"line":35744},[162,42239,822],{"class":207},[162,42241,34385],{"class":168},[162,42243,208],{"class":207},[162,42245,3670],{"class":168},[162,42247,34582],{"class":207},[162,42249,3670],{"class":168},[162,42251,34582],{"class":207},[162,42253,34398],{"class":168},[1452,42255,42256],{"start":197},[1455,42257,42258],{},"训练代码",[19,42260,42261],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,42263,42264],{},"解决方式:",[19,42266,42267],{},"①权重初始化",[153,42269,42271],{"className":155,"code":42270,"language":157,"meta":158,"style":158},"# 权重初始化,保证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",[71,42272,42273,42278,42283,42295,42300,42308,42313,42326,42331,42345,42350,42359,42364,42373,42378,42383,42396,42401,42415],{"__ignoreMap":158},[162,42274,42275],{"class":164,"line":165},[162,42276,42277],{"class":361},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[162,42279,42280],{"class":164,"line":197},[162,42281,42282],{"class":361},"# 循环遍历模型\n",[162,42284,42285,42287,42289,42291,42293],{"class":164,"line":228},[162,42286,808],{"class":172},[162,42288,41943],{"class":168},[162,42290,814],{"class":172},[162,42292,41948],{"class":207},[162,42294,41951],{"class":168},[162,42296,42297],{"class":164,"line":252},[162,42298,42299],{"class":361},"    # print(m)\n",[162,42301,42302,42304,42306],{"class":164,"line":328},[162,42303,2283],{"class":172},[162,42305,41963],{"class":207},[162,42307,41966],{"class":168},[162,42309,42310],{"class":164,"line":466},[162,42311,42312],{"class":361},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[162,42314,42315,42318,42320,42322,42324],{"class":164,"line":471},[162,42316,42317],{"class":168},"        nn.init.kaiming_normal_(m.weight,",[162,42319,41979],{"class":671},[162,42321,173],{"class":172},[162,42323,41984],{"class":179},[162,42325,434],{"class":168},[162,42327,42328],{"class":164,"line":687},[162,42329,42330],{"class":361},"        # 判断b参数是否存在\n",[162,42332,42333,42335,42337,42339,42341,42343],{"class":164,"line":692},[162,42334,5614],{"class":172},[162,42336,41999],{"class":168},[162,42338,42002],{"class":172},[162,42340,42005],{"class":172},[162,42342,42008],{"class":207},[162,42344,2316],{"class":168},[162,42346,42347],{"class":164,"line":698},[162,42348,42349],{"class":361},"            # 如果参数不存在的化初始化b=0\n",[162,42351,42352,42355,42357],{"class":164,"line":2955},[162,42353,42354],{"class":168},"            nn.init.constant_(m.bias,",[162,42356,312],{"class":207},[162,42358,434],{"class":168},[162,42360,42361],{"class":164,"line":2960},[162,42362,42363],{"class":361},"    # 全连接层初始化\n",[162,42365,42366,42369,42371],{"class":164,"line":2971},[162,42367,42368],{"class":172},"    elif",[162,42370,41963],{"class":207},[162,42372,42039],{"class":168},[162,42374,42375],{"class":164,"line":2984},[162,42376,42377],{"class":361},"        # 这个初始化方法是利用的是正太分布的方式\n",[162,42379,42380],{"class":164,"line":2989},[162,42381,42382],{"class":361},"        # 均值为0，方差为0.01\n",[162,42384,42385,42388,42390,42392,42394],{"class":164,"line":3011},[162,42386,42387],{"class":168},"        nn.init.normal_(m.weight,",[162,42389,312],{"class":207},[162,42391,3670],{"class":168},[162,42393,42061],{"class":207},[162,42395,434],{"class":168},[162,42397,42398],{"class":164,"line":3022},[162,42399,42400],{"class":361},"        # 初始化b参数\n",[162,42402,42403,42405,42407,42409,42411,42413],{"class":164,"line":3027},[162,42404,5614],{"class":172},[162,42406,41999],{"class":168},[162,42408,42002],{"class":172},[162,42410,42005],{"class":172},[162,42412,42008],{"class":207},[162,42414,2316],{"class":168},[162,42416,42417,42419,42421],{"class":164,"line":3046},[162,42418,42354],{"class":168},[162,42420,312],{"class":207},[162,42422,434],{"class":168},[19,42424,42425],{},"②尽可能地增加批次",[19,42427,42428],{},"训练完整代码：",[153,42430,42431],{"className":155,"code":40974,"language":157,"meta":158,"style":158},[71,42432,42433,42439,42449,42459,42469,42473,42489,42497,42515,42519,42523,42533,42569,42573,42609,42613,42641,42645,42649,42659,42695,42699,42735,42739,42767,42771,42775,42785,42821,42825,42861,42865,42901,42905,42933,42937,42941,42951,42987,42991,43027,43031,43067,43071,43099,43103,43107,43117,43153,43157,43193,43197,43233,43237,43265,43269,43273,43283,43287,43291,43295,43315,43319,43331,43335,43347,43351,43355,43359,43363,43375,43379,43387,43391,43403,43407,43421,43425,43433,43437,43445,43449,43453,43465,43469,43483,43491,43495,43499,43507,43517,43527,43537,43547,43557,43567,43573,43577,43581,43593,43613,43619,43627],{"__ignoreMap":158},[162,42434,42435,42437],{"class":164,"line":165},[162,42436,33478],{"class":172},[162,42438,33481],{"class":168},[162,42440,42441,42443,42445,42447],{"class":164,"line":197},[162,42442,33821],{"class":172},[162,42444,40989],{"class":168},[162,42446,33478],{"class":172},[162,42448,40994],{"class":168},[162,42450,42451,42453,42455,42457],{"class":164,"line":228},[162,42452,33821],{"class":172},[162,42454,33824],{"class":168},[162,42456,33478],{"class":172},[162,42458,33829],{"class":168},[162,42460,42461,42463,42465,42467],{"class":164,"line":252},[162,42462,33821],{"class":172},[162,42464,33841],{"class":168},[162,42466,33478],{"class":172},[162,42468,33846],{"class":168},[162,42470,42471],{"class":164,"line":328},[162,42472,301],{"emptyLinePlaceholder":300},[162,42474,42475,42477,42479,42481,42483,42485,42487],{"class":164,"line":466},[162,42476,17788],{"class":172},[162,42478,41025],{"class":5082},[162,42480,604],{"class":168},[162,42482,33862],{"class":5082},[162,42484,3847],{"class":168},[162,42486,33867],{"class":5082},[162,42488,33870],{"class":168},[162,42490,42491,42493,42495],{"class":164,"line":471},[162,42492,33885],{"class":172},[162,42494,33888],{"class":207},[162,42496,33891],{"class":168},[162,42498,42499,42501,42503,42505,42507,42509,42511,42513],{"class":164,"line":687},[162,42500,33901],{"class":207},[162,42502,604],{"class":168},[162,42504,41052],{"class":207},[162,42506,183],{"class":168},[162,42508,33907],{"class":207},[162,42510,33910],{"class":168},[162,42512,33913],{"class":207},[162,42514,1526],{"class":168},[162,42516,42517],{"class":164,"line":692},[162,42518,41067],{"class":361},[162,42520,42521],{"class":164,"line":698},[162,42522,41072],{"class":361},[162,42524,42525,42527,42529,42531],{"class":164,"line":2955},[162,42526,33929],{"class":207},[162,42528,41079],{"class":168},[162,42530,173],{"class":172},[162,42532,41084],{"class":168},[162,42534,42535,42537,42539,42541,42543,42545,42547,42549,42551,42553,42555,42557,42559,42561,42563,42565,42567],{"class":164,"line":2960},[162,42536,41089],{"class":168},[162,42538,33940],{"class":671},[162,42540,173],{"class":172},[162,42542,208],{"class":207},[162,42544,3670],{"class":168},[162,42546,33949],{"class":671},[162,42548,173],{"class":172},[162,42550,3504],{"class":207},[162,42552,3670],{"class":168},[162,42554,33958],{"class":671},[162,42556,173],{"class":172},[162,42558,218],{"class":207},[162,42560,3670],{"class":168},[162,42562,33967],{"class":671},[162,42564,173],{"class":172},[162,42566,208],{"class":207},[162,42568,41122],{"class":168},[162,42570,42571],{"class":164,"line":2971},[162,42572,41127],{"class":168},[162,42574,42575,42577,42579,42581,42583,42585,42587,42589,42591,42593,42595,42597,42599,42601,42603,42605,42607],{"class":164,"line":2984},[162,42576,41089],{"class":168},[162,42578,33940],{"class":671},[162,42580,173],{"class":172},[162,42582,3504],{"class":207},[162,42584,3670],{"class":168},[162,42586,33949],{"class":671},[162,42588,173],{"class":172},[162,42590,3504],{"class":207},[162,42592,3670],{"class":168},[162,42594,33958],{"class":671},[162,42596,173],{"class":172},[162,42598,218],{"class":207},[162,42600,3670],{"class":168},[162,42602,33967],{"class":671},[162,42604,173],{"class":172},[162,42606,208],{"class":207},[162,42608,41122],{"class":168},[162,42610,42611],{"class":164,"line":2989},[162,42612,41127],{"class":168},[162,42614,42615,42617,42619,42621,42623,42625,42627,42629,42631,42633,42635,42637,42639],{"class":164,"line":3011},[162,42616,41172],{"class":168},[162,42618,33958],{"class":671},[162,42620,173],{"class":172},[162,42622,213],{"class":207},[162,42624,3670],{"class":168},[162,42626,34013],{"class":671},[162,42628,173],{"class":172},[162,42630,213],{"class":207},[162,42632,3670],{"class":168},[162,42634,33967],{"class":671},[162,42636,173],{"class":172},[162,42638,312],{"class":207},[162,42640,434],{"class":168},[162,42642,42643],{"class":164,"line":3022},[162,42644,41201],{"class":168},[162,42646,42647],{"class":164,"line":3027},[162,42648,41206],{"class":361},[162,42650,42651,42653,42655,42657],{"class":164,"line":3046},[162,42652,33929],{"class":207},[162,42654,41213],{"class":168},[162,42656,173],{"class":172},[162,42658,41084],{"class":168},[162,42660,42661,42663,42665,42667,42669,42671,42673,42675,42677,42679,42681,42683,42685,42687,42689,42691,42693],{"class":164,"line":3052},[162,42662,41089],{"class":168},[162,42664,33940],{"class":671},[162,42666,173],{"class":172},[162,42668,3504],{"class":207},[162,42670,3670],{"class":168},[162,42672,33949],{"class":671},[162,42674,173],{"class":172},[162,42676,35149],{"class":207},[162,42678,3670],{"class":168},[162,42680,33958],{"class":671},[162,42682,173],{"class":172},[162,42684,218],{"class":207},[162,42686,3670],{"class":168},[162,42688,33967],{"class":671},[162,42690,173],{"class":172},[162,42692,208],{"class":207},[162,42694,41122],{"class":168},[162,42696,42697],{"class":164,"line":3057},[162,42698,41127],{"class":168},[162,42700,42701,42703,42705,42707,42709,42711,42713,42715,42717,42719,42721,42723,42725,42727,42729,42731,42733],{"class":164,"line":3072},[162,42702,41089],{"class":168},[162,42704,33940],{"class":671},[162,42706,173],{"class":172},[162,42708,35149],{"class":207},[162,42710,3670],{"class":168},[162,42712,33949],{"class":671},[162,42714,173],{"class":172},[162,42716,35149],{"class":207},[162,42718,3670],{"class":168},[162,42720,33958],{"class":671},[162,42722,173],{"class":172},[162,42724,218],{"class":207},[162,42726,3670],{"class":168},[162,42728,33967],{"class":671},[162,42730,173],{"class":172},[162,42732,208],{"class":207},[162,42734,41122],{"class":168},[162,42736,42737],{"class":164,"line":3077},[162,42738,41127],{"class":168},[162,42740,42741,42743,42745,42747,42749,42751,42753,42755,42757,42759,42761,42763,42765],{"class":164,"line":3100},[162,42742,41172],{"class":168},[162,42744,33958],{"class":671},[162,42746,173],{"class":172},[162,42748,213],{"class":207},[162,42750,3670],{"class":168},[162,42752,34013],{"class":671},[162,42754,173],{"class":172},[162,42756,213],{"class":207},[162,42758,3670],{"class":168},[162,42760,33967],{"class":671},[162,42762,173],{"class":172},[162,42764,312],{"class":207},[162,42766,434],{"class":168},[162,42768,42769],{"class":164,"line":3140},[162,42770,41201],{"class":168},[162,42772,42773],{"class":164,"line":4878},[162,42774,41334],{"class":361},[162,42776,42777,42779,42781,42783],{"class":164,"line":4883},[162,42778,33929],{"class":207},[162,42780,41341],{"class":168},[162,42782,173],{"class":172},[162,42784,41084],{"class":168},[162,42786,42787,42789,42791,42793,42795,42797,42799,42801,42803,42805,42807,42809,42811,42813,42815,42817,42819],{"class":164,"line":4897},[162,42788,41089],{"class":168},[162,42790,33940],{"class":671},[162,42792,173],{"class":172},[162,42794,35149],{"class":207},[162,42796,3670],{"class":168},[162,42798,33949],{"class":671},[162,42800,173],{"class":172},[162,42802,37945],{"class":207},[162,42804,3670],{"class":168},[162,42806,33958],{"class":671},[162,42808,173],{"class":172},[162,42810,218],{"class":207},[162,42812,3670],{"class":168},[162,42814,33967],{"class":671},[162,42816,173],{"class":172},[162,42818,208],{"class":207},[162,42820,41122],{"class":168},[162,42822,42823],{"class":164,"line":4902},[162,42824,41127],{"class":168},[162,42826,42827,42829,42831,42833,42835,42837,42839,42841,42843,42845,42847,42849,42851,42853,42855,42857,42859],{"class":164,"line":5694},[162,42828,41089],{"class":168},[162,42830,33940],{"class":671},[162,42832,173],{"class":172},[162,42834,37945],{"class":207},[162,42836,3670],{"class":168},[162,42838,33949],{"class":671},[162,42840,173],{"class":172},[162,42842,37945],{"class":207},[162,42844,3670],{"class":168},[162,42846,33958],{"class":671},[162,42848,173],{"class":172},[162,42850,218],{"class":207},[162,42852,3670],{"class":168},[162,42854,33967],{"class":671},[162,42856,173],{"class":172},[162,42858,208],{"class":207},[162,42860,41122],{"class":168},[162,42862,42863],{"class":164,"line":5708},[162,42864,41127],{"class":168},[162,42866,42867,42869,42871,42873,42875,42877,42879,42881,42883,42885,42887,42889,42891,42893,42895,42897,42899],{"class":164,"line":5716},[162,42868,41089],{"class":168},[162,42870,33940],{"class":671},[162,42872,173],{"class":172},[162,42874,37945],{"class":207},[162,42876,3670],{"class":168},[162,42878,33949],{"class":671},[162,42880,173],{"class":172},[162,42882,37945],{"class":207},[162,42884,3670],{"class":168},[162,42886,33958],{"class":671},[162,42888,173],{"class":172},[162,42890,218],{"class":207},[162,42892,3670],{"class":168},[162,42894,33967],{"class":671},[162,42896,173],{"class":172},[162,42898,208],{"class":207},[162,42900,41122],{"class":168},[162,42902,42903],{"class":164,"line":5721},[162,42904,41127],{"class":168},[162,42906,42907,42909,42911,42913,42915,42917,42919,42921,42923,42925,42927,42929,42931],{"class":164,"line":5727},[162,42908,41172],{"class":168},[162,42910,33958],{"class":671},[162,42912,173],{"class":172},[162,42914,213],{"class":207},[162,42916,3670],{"class":168},[162,42918,34013],{"class":671},[162,42920,173],{"class":172},[162,42922,213],{"class":207},[162,42924,3670],{"class":168},[162,42926,33967],{"class":671},[162,42928,173],{"class":172},[162,42930,312],{"class":207},[162,42932,434],{"class":168},[162,42934,42935],{"class":164,"line":5733},[162,42936,41201],{"class":168},[162,42938,42939],{"class":164,"line":5738},[162,42940,41502],{"class":361},[162,42942,42943,42945,42947,42949],{"class":164,"line":11052},[162,42944,33929],{"class":207},[162,42946,41509],{"class":168},[162,42948,173],{"class":172},[162,42950,41084],{"class":168},[162,42952,42953,42955,42957,42959,42961,42963,42965,42967,42969,42971,42973,42975,42977,42979,42981,42983,42985],{"class":164,"line":11076},[162,42954,41089],{"class":168},[162,42956,33940],{"class":671},[162,42958,173],{"class":172},[162,42960,37945],{"class":207},[162,42962,3670],{"class":168},[162,42964,33949],{"class":671},[162,42966,173],{"class":172},[162,42968,41532],{"class":207},[162,42970,3670],{"class":168},[162,42972,33958],{"class":671},[162,42974,173],{"class":172},[162,42976,218],{"class":207},[162,42978,3670],{"class":168},[162,42980,33967],{"class":671},[162,42982,173],{"class":172},[162,42984,208],{"class":207},[162,42986,41122],{"class":168},[162,42988,42989],{"class":164,"line":11081},[162,42990,41127],{"class":168},[162,42992,42993,42995,42997,42999,43001,43003,43005,43007,43009,43011,43013,43015,43017,43019,43021,43023,43025],{"class":164,"line":11087},[162,42994,41089],{"class":168},[162,42996,33940],{"class":671},[162,42998,173],{"class":172},[162,43000,41532],{"class":207},[162,43002,3670],{"class":168},[162,43004,33949],{"class":671},[162,43006,173],{"class":172},[162,43008,41532],{"class":207},[162,43010,3670],{"class":168},[162,43012,33958],{"class":671},[162,43014,173],{"class":172},[162,43016,218],{"class":207},[162,43018,3670],{"class":168},[162,43020,33967],{"class":671},[162,43022,173],{"class":172},[162,43024,208],{"class":207},[162,43026,41122],{"class":168},[162,43028,43029],{"class":164,"line":11114},[162,43030,41127],{"class":168},[162,43032,43033,43035,43037,43039,43041,43043,43045,43047,43049,43051,43053,43055,43057,43059,43061,43063,43065],{"class":164,"line":11119},[162,43034,41089],{"class":168},[162,43036,33940],{"class":671},[162,43038,173],{"class":172},[162,43040,41532],{"class":207},[162,43042,3670],{"class":168},[162,43044,33949],{"class":671},[162,43046,173],{"class":172},[162,43048,41532],{"class":207},[162,43050,3670],{"class":168},[162,43052,33958],{"class":671},[162,43054,173],{"class":172},[162,43056,218],{"class":207},[162,43058,3670],{"class":168},[162,43060,33967],{"class":671},[162,43062,173],{"class":172},[162,43064,208],{"class":207},[162,43066,41122],{"class":168},[162,43068,43069],{"class":164,"line":11125},[162,43070,41127],{"class":168},[162,43072,43073,43075,43077,43079,43081,43083,43085,43087,43089,43091,43093,43095,43097],{"class":164,"line":11137},[162,43074,41172],{"class":168},[162,43076,33958],{"class":671},[162,43078,173],{"class":172},[162,43080,213],{"class":207},[162,43082,3670],{"class":168},[162,43084,34013],{"class":671},[162,43086,173],{"class":172},[162,43088,213],{"class":207},[162,43090,3670],{"class":168},[162,43092,33967],{"class":671},[162,43094,173],{"class":172},[162,43096,312],{"class":207},[162,43098,434],{"class":168},[162,43100,43101],{"class":164,"line":11149},[162,43102,41201],{"class":168},[162,43104,43105],{"class":164,"line":11161},[162,43106,41671],{"class":361},[162,43108,43109,43111,43113,43115],{"class":164,"line":12816},[162,43110,33929],{"class":207},[162,43112,41678],{"class":168},[162,43114,173],{"class":172},[162,43116,41084],{"class":168},[162,43118,43119,43121,43123,43125,43127,43129,43131,43133,43135,43137,43139,43141,43143,43145,43147,43149,43151],{"class":164,"line":12841},[162,43120,41089],{"class":168},[162,43122,33940],{"class":671},[162,43124,173],{"class":172},[162,43126,41532],{"class":207},[162,43128,3670],{"class":168},[162,43130,33949],{"class":671},[162,43132,173],{"class":172},[162,43134,41532],{"class":207},[162,43136,3670],{"class":168},[162,43138,33958],{"class":671},[162,43140,173],{"class":172},[162,43142,218],{"class":207},[162,43144,3670],{"class":168},[162,43146,33967],{"class":671},[162,43148,173],{"class":172},[162,43150,208],{"class":207},[162,43152,41122],{"class":168},[162,43154,43155],{"class":164,"line":12864},[162,43156,41127],{"class":168},[162,43158,43159,43161,43163,43165,43167,43169,43171,43173,43175,43177,43179,43181,43183,43185,43187,43189,43191],{"class":164,"line":12888},[162,43160,41089],{"class":168},[162,43162,33940],{"class":671},[162,43164,173],{"class":172},[162,43166,41532],{"class":207},[162,43168,3670],{"class":168},[162,43170,33949],{"class":671},[162,43172,173],{"class":172},[162,43174,41532],{"class":207},[162,43176,3670],{"class":168},[162,43178,33958],{"class":671},[162,43180,173],{"class":172},[162,43182,218],{"class":207},[162,43184,3670],{"class":168},[162,43186,33967],{"class":671},[162,43188,173],{"class":172},[162,43190,208],{"class":207},[162,43192,41122],{"class":168},[162,43194,43195],{"class":164,"line":12893},[162,43196,41127],{"class":168},[162,43198,43199,43201,43203,43205,43207,43209,43211,43213,43215,43217,43219,43221,43223,43225,43227,43229,43231],{"class":164,"line":12898},[162,43200,41089],{"class":168},[162,43202,33940],{"class":671},[162,43204,173],{"class":172},[162,43206,41532],{"class":207},[162,43208,3670],{"class":168},[162,43210,33949],{"class":671},[162,43212,173],{"class":172},[162,43214,41532],{"class":207},[162,43216,3670],{"class":168},[162,43218,33958],{"class":671},[162,43220,173],{"class":172},[162,43222,218],{"class":207},[162,43224,3670],{"class":168},[162,43226,33967],{"class":671},[162,43228,173],{"class":172},[162,43230,208],{"class":207},[162,43232,41122],{"class":168},[162,43234,43235],{"class":164,"line":12903},[162,43236,41127],{"class":168},[162,43238,43239,43241,43243,43245,43247,43249,43251,43253,43255,43257,43259,43261,43263],{"class":164,"line":12912},[162,43240,41172],{"class":168},[162,43242,33958],{"class":671},[162,43244,173],{"class":172},[162,43246,213],{"class":207},[162,43248,3670],{"class":168},[162,43250,34013],{"class":671},[162,43252,173],{"class":172},[162,43254,213],{"class":207},[162,43256,3670],{"class":168},[162,43258,33967],{"class":671},[162,43260,173],{"class":172},[162,43262,312],{"class":207},[162,43264,434],{"class":168},[162,43266,43267],{"class":164,"line":12917},[162,43268,41201],{"class":168},[162,43270,43271],{"class":164,"line":12923},[162,43272,41839],{"class":361},[162,43274,43275,43277,43279,43281],{"class":164,"line":12944},[162,43276,33929],{"class":207},[162,43278,41846],{"class":168},[162,43280,173],{"class":172},[162,43282,41084],{"class":168},[162,43284,43285],{"class":164,"line":12950},[162,43286,41855],{"class":361},[162,43288,43289],{"class":164,"line":12964},[162,43290,41860],{"class":361},[162,43292,43293],{"class":164,"line":12970},[162,43294,41865],{"class":168},[162,43296,43297,43299,43301,43303,43305,43307,43309,43311,43313],{"class":164,"line":12997},[162,43298,41870],{"class":168},[162,43300,3661],{"class":207},[162,43302,3745],{"class":172},[162,43304,3661],{"class":207},[162,43306,3745],{"class":172},[162,43308,41532],{"class":207},[162,43310,3670],{"class":168},[162,43312,37945],{"class":207},[162,43314,41122],{"class":168},[162,43316,43317],{"class":164,"line":13006},[162,43318,41127],{"class":168},[162,43320,43321,43323,43325,43327,43329],{"class":164,"line":13012},[162,43322,41870],{"class":168},[162,43324,37945],{"class":207},[162,43326,3670],{"class":168},[162,43328,35149],{"class":207},[162,43330,41122],{"class":168},[162,43332,43333],{"class":164,"line":13020},[162,43334,41127],{"class":168},[162,43336,43337,43339,43341,43343,43345],{"class":164,"line":13025},[162,43338,41870],{"class":168},[162,43340,35149],{"class":207},[162,43342,3670],{"class":168},[162,43344,1006],{"class":207},[162,43346,434],{"class":168},[162,43348,43349],{"class":164,"line":19695},[162,43350,41201],{"class":168},[162,43352,43353],{"class":164,"line":19701},[162,43354,301],{"emptyLinePlaceholder":300},[162,43356,43357],{"class":164,"line":19724},[162,43358,41931],{"class":361},[162,43360,43361],{"class":164,"line":19730},[162,43362,41936],{"class":361},[162,43364,43365,43367,43369,43371,43373],{"class":164,"line":19753},[162,43366,6517],{"class":172},[162,43368,41943],{"class":168},[162,43370,814],{"class":172},[162,43372,41948],{"class":207},[162,43374,41951],{"class":168},[162,43376,43377],{"class":164,"line":19767},[162,43378,41956],{"class":361},[162,43380,43381,43383,43385],{"class":164,"line":19787},[162,43382,7752],{"class":172},[162,43384,41963],{"class":207},[162,43386,41966],{"class":168},[162,43388,43389],{"class":164,"line":19793},[162,43390,41971],{"class":361},[162,43392,43393,43395,43397,43399,43401],{"class":164,"line":19804},[162,43394,41976],{"class":168},[162,43396,41979],{"class":671},[162,43398,173],{"class":172},[162,43400,41984],{"class":179},[162,43402,434],{"class":168},[162,43404,43405],{"class":164,"line":19827},[162,43406,41991],{"class":361},[162,43408,43409,43411,43413,43415,43417,43419],{"class":164,"line":19849},[162,43410,41996],{"class":172},[162,43412,41999],{"class":168},[162,43414,42002],{"class":172},[162,43416,42005],{"class":172},[162,43418,42008],{"class":207},[162,43420,2316],{"class":168},[162,43422,43423],{"class":164,"line":19854},[162,43424,42015],{"class":361},[162,43426,43427,43429,43431],{"class":164,"line":19860},[162,43428,42020],{"class":168},[162,43430,312],{"class":207},[162,43432,434],{"class":168},[162,43434,43435],{"class":164,"line":19874},[162,43436,42029],{"class":361},[162,43438,43439,43441,43443],{"class":164,"line":19887},[162,43440,42034],{"class":172},[162,43442,41963],{"class":207},[162,43444,42039],{"class":168},[162,43446,43447],{"class":164,"line":19892},[162,43448,42044],{"class":361},[162,43450,43451],{"class":164,"line":19906},[162,43452,42049],{"class":361},[162,43454,43455,43457,43459,43461,43463],{"class":164,"line":19911},[162,43456,42054],{"class":168},[162,43458,312],{"class":207},[162,43460,3670],{"class":168},[162,43462,42061],{"class":207},[162,43464,434],{"class":168},[162,43466,43467],{"class":164,"line":19917},[162,43468,42068],{"class":361},[162,43470,43471,43473,43475,43477,43479,43481],{"class":164,"line":19922},[162,43472,41996],{"class":172},[162,43474,41999],{"class":168},[162,43476,42002],{"class":172},[162,43478,42005],{"class":172},[162,43480,42008],{"class":207},[162,43482,2316],{"class":168},[162,43484,43485,43487,43489],{"class":164,"line":19936},[162,43486,42020],{"class":168},[162,43488,312],{"class":207},[162,43490,434],{"class":168},[162,43492,43493],{"class":164,"line":19941},[162,43494,301],{"emptyLinePlaceholder":300},[162,43496,43497],{"class":164,"line":19946},[162,43498,38240],{"class":361},[162,43500,43501,43503,43505],{"class":164,"line":19960},[162,43502,33885],{"class":172},[162,43504,34177],{"class":5082},[162,43506,34180],{"class":168},[162,43508,43509,43511,43513,43515],{"class":164,"line":19972},[162,43510,34185],{"class":168},[162,43512,173],{"class":172},[162,43514,33907],{"class":207},[162,43516,42117],{"class":168},[162,43518,43519,43521,43523,43525],{"class":164,"line":19977},[162,43520,34185],{"class":168},[162,43522,173],{"class":172},[162,43524,33907],{"class":207},[162,43526,42128],{"class":168},[162,43528,43529,43531,43533,43535],{"class":164,"line":19990},[162,43530,34185],{"class":168},[162,43532,173],{"class":172},[162,43534,33907],{"class":207},[162,43536,42139],{"class":168},[162,43538,43539,43541,43543,43545],{"class":164,"line":19995},[162,43540,34185],{"class":168},[162,43542,173],{"class":172},[162,43544,33907],{"class":207},[162,43546,42150],{"class":168},[162,43548,43549,43551,43553,43555],{"class":164,"line":20000},[162,43550,34185],{"class":168},[162,43552,173],{"class":172},[162,43554,33907],{"class":207},[162,43556,42161],{"class":168},[162,43558,43559,43561,43563,43565],{"class":164,"line":20005},[162,43560,34185],{"class":168},[162,43562,173],{"class":172},[162,43564,33907],{"class":207},[162,43566,42172],{"class":168},[162,43568,43569,43571],{"class":164,"line":20018},[162,43570,17846],{"class":172},[162,43572,34293],{"class":168},[162,43574,43575],{"class":164,"line":20023},[162,43576,301],{"emptyLinePlaceholder":300},[162,43578,43579],{"class":164,"line":35709},[162,43580,42187],{"class":361},[162,43582,43583,43585,43587,43589,43591],{"class":164,"line":35715},[162,43584,2703],{"class":172},[162,43586,34304],{"class":207},[162,43588,2292],{"class":172},[162,43590,42198],{"class":179},[162,43592,2316],{"class":168},[162,43594,43595,43597,43599,43601,43603,43605,43607,43609,43611],{"class":164,"line":35721},[162,43596,34321],{"class":168},[162,43598,173],{"class":172},[162,43600,33536],{"class":168},[162,43602,34328],{"class":179},[162,43604,4828],{"class":172},[162,43606,34333],{"class":168},[162,43608,2313],{"class":172},[162,43610,33561],{"class":179},[162,43612,434],{"class":168},[162,43614,43615,43617],{"class":164,"line":35727},[162,43616,822],{"class":207},[162,43618,33570],{"class":168},[162,43620,43621,43623,43625],{"class":164,"line":35733},[162,43622,34373],{"class":168},[162,43624,173],{"class":172},[162,43626,42235],{"class":168},[162,43628,43629,43631,43633,43635,43637,43639,43641,43643],{"class":164,"line":35744},[162,43630,822],{"class":207},[162,43632,34385],{"class":168},[162,43634,208],{"class":207},[162,43636,3670],{"class":168},[162,43638,34582],{"class":207},[162,43640,3670],{"class":168},[162,43642,34582],{"class":207},[162,43644,34398],{"class":168},[1452,43646,43647],{"start":228},[1455,43648,43649],{},"测试代码",[153,43651,43653],{"className":155,"code":43652,"language":157,"meta":158,"style":158},"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",[71,43654,43655,43661,43671,43681,43685,43695,43706,43710,43714,43718,43726,43742,43752,43768,43778,43792,43796,43806,43816,43826,43832,43836,43840,43848,43852,43868,43876,43880,43884,43892,43900,43904,43908,43912,43916,43922,43926,43936,43944,43952,43956,43960,43964,43972,43976,43992,43996,44000,44004,44016,44020,44032,44036,44040,44052,44056,44066,44070,44074,44086,44090,44099,44103,44107,44115,44119,44127,44131,44135,44139,44143,44147,44163,44171,44175,44179,44227,44233,44237,44247,44255,44263,44267,44271,44275,44279,44287,44291,44307,44311,44319,44327],{"__ignoreMap":158},[162,43656,43657,43659],{"class":164,"line":165},[162,43658,33478],{"class":172},[162,43660,33481],{"class":168},[162,43662,43663,43665,43667,43669],{"class":164,"line":197},[162,43664,33478],{"class":172},[162,43666,34498],{"class":168},[162,43668,34466],{"class":172},[162,43670,34503],{"class":168},[162,43672,43673,43675,43677,43679],{"class":164,"line":228},[162,43674,33821],{"class":172},[162,43676,34481],{"class":168},[162,43678,33478],{"class":172},[162,43680,34486],{"class":168},[162,43682,43683],{"class":164,"line":252},[162,43684,36997],{"class":361},[162,43686,43687,43689,43691,43693],{"class":164,"line":328},[162,43688,33821],{"class":172},[162,43690,34451],{"class":168},[162,43692,33478],{"class":172},[162,43694,34456],{"class":168},[162,43696,43697,43699,43701,43703],{"class":164,"line":466},[162,43698,33821],{"class":172},[162,43700,34993],{"class":168},[162,43702,33478],{"class":172},[162,43704,43705],{"class":207}," VGG16\n",[162,43707,43708],{"class":164,"line":471},[162,43709,301],{"emptyLinePlaceholder":300},[162,43711,43712],{"class":164,"line":687},[162,43713,301],{"emptyLinePlaceholder":300},[162,43715,43716],{"class":164,"line":692},[162,43717,37026],{"class":361},[162,43719,43720,43722,43724],{"class":164,"line":698},[162,43721,35026],{"class":172},[162,43723,37033],{"class":5082},[162,43725,35032],{"class":168},[162,43727,43728,43730,43732,43734,43736,43738,43740],{"class":164,"line":2955},[162,43729,37040],{"class":168},[162,43731,173],{"class":172},[162,43733,34538],{"class":168},[162,43735,34541],{"class":671},[162,43737,173],{"class":172},[162,43739,34546],{"class":179},[162,43741,1735],{"class":168},[162,43743,43744,43746,43748,43750],{"class":164,"line":2960},[162,43745,37057],{"class":671},[162,43747,173],{"class":172},[162,43749,37062],{"class":207},[162,43751,1735],{"class":168},[162,43753,43754,43756,43758,43760,43762,43764,43766],{"class":164,"line":2971},[162,43755,37069],{"class":671},[162,43757,173],{"class":172},[162,43759,34574],{"class":168},[162,43761,34577],{"class":671},[162,43763,173],{"class":172},[162,43765,34582],{"class":207},[162,43767,34585],{"class":168},[162,43769,43770,43772,43774,43776],{"class":164,"line":2984},[162,43771,37086],{"class":671},[162,43773,173],{"class":172},[162,43775,247],{"class":207},[162,43777,434],{"class":168},[162,43779,43780,43782,43784,43786,43788,43790],{"class":164,"line":2989},[162,43781,37097],{"class":168},[162,43783,173],{"class":172},[162,43785,34615],{"class":168},[162,43787,34618],{"class":671},[162,43789,173],{"class":172},[162,43791,37108],{"class":168},[162,43793,43794],{"class":164,"line":3011},[162,43795,37113],{"class":361},[162,43797,43798,43800,43802,43804],{"class":164,"line":3022},[162,43799,37118],{"class":671},[162,43801,173],{"class":172},[162,43803,208],{"class":207},[162,43805,1735],{"class":168},[162,43807,43808,43810,43812,43814],{"class":164,"line":3027},[162,43809,37129],{"class":671},[162,43811,173],{"class":172},[162,43813,247],{"class":207},[162,43815,1735],{"class":168},[162,43817,43818,43820,43822,43824],{"class":164,"line":3046},[162,43819,37140],{"class":671},[162,43821,173],{"class":172},[162,43823,312],{"class":207},[162,43825,434],{"class":168},[162,43827,43828,43830],{"class":164,"line":3052},[162,43829,7203],{"class":172},[162,43831,37153],{"class":168},[162,43833,43834],{"class":164,"line":3057},[162,43835,301],{"emptyLinePlaceholder":300},[162,43837,43838],{"class":164,"line":3072},[162,43839,37162],{"class":361},[162,43841,43842,43844,43846],{"class":164,"line":3077},[162,43843,35026],{"class":172},[162,43845,37169],{"class":5082},[162,43847,37172],{"class":168},[162,43849,43850],{"class":164,"line":3100},[162,43851,37177],{"class":361},[162,43853,43854,43856,43858,43860,43862,43864,43866],{"class":164,"line":3140},[162,43855,34321],{"class":168},[162,43857,173],{"class":172},[162,43859,34328],{"class":179},[162,43861,4828],{"class":172},[162,43863,34333],{"class":168},[162,43865,2313],{"class":172},[162,43867,37194],{"class":179},[162,43869,43870,43872,43874],{"class":164,"line":4878},[162,43871,34373],{"class":168},[162,43873,173],{"class":172},[162,43875,35368],{"class":168},[162,43877,43878],{"class":164,"line":4883},[162,43879,301],{"emptyLinePlaceholder":300},[162,43881,43882],{"class":164,"line":4897},[162,43883,37211],{"class":361},[162,43885,43886,43888,43890],{"class":164,"line":4902},[162,43887,37216],{"class":168},[162,43889,173],{"class":172},[162,43891,35421],{"class":207},[162,43893,43894,43896,43898],{"class":164,"line":5694},[162,43895,37225],{"class":168},[162,43897,173],{"class":172},[162,43899,6200],{"class":207},[162,43901,43902],{"class":164,"line":5708},[162,43903,301],{"emptyLinePlaceholder":300},[162,43905,43906],{"class":164,"line":5716},[162,43907,37238],{"class":361},[162,43909,43910],{"class":164,"line":5721},[162,43911,37243],{"class":361},[162,43913,43914],{"class":164,"line":5727},[162,43915,37248],{"class":361},[162,43917,43918,43920],{"class":164,"line":5733},[162,43919,37253],{"class":172},[162,43921,35960],{"class":168},[162,43923,43924],{"class":164,"line":5738},[162,43925,37260],{"class":361},[162,43927,43928,43930,43932,43934],{"class":164,"line":11052},[162,43929,6517],{"class":172},[162,43931,37267],{"class":168},[162,43933,814],{"class":172},[162,43935,37272],{"class":168},[162,43937,43938,43940,43942],{"class":164,"line":11076},[162,43939,37277],{"class":168},[162,43941,173],{"class":172},[162,43943,37282],{"class":168},[162,43945,43946,43948,43950],{"class":164,"line":11081},[162,43947,37287],{"class":168},[162,43949,173],{"class":172},[162,43951,37292],{"class":168},[162,43953,43954],{"class":164,"line":11087},[162,43955,37297],{"class":361},[162,43957,43958],{"class":164,"line":11114},[162,43959,35951],{"class":168},[162,43961,43962],{"class":164,"line":11119},[162,43963,37306],{"class":361},[162,43965,43966,43968,43970],{"class":164,"line":11125},[162,43967,35736],{"class":168},[162,43969,173],{"class":172},[162,43971,37315],{"class":168},[162,43973,43974],{"class":164,"line":11137},[162,43975,37320],{"class":361},[162,43977,43978,43980,43982,43984,43986,43988,43990],{"class":164,"line":11149},[162,43979,35753],{"class":168},[162,43981,173],{"class":172},[162,43983,35758],{"class":168},[162,43985,35761],{"class":671},[162,43987,173],{"class":172},[162,43989,208],{"class":207},[162,43991,434],{"class":168},[162,43993,43994],{"class":164,"line":11161},[162,43995,37341],{"class":361},[162,43997,43998],{"class":164,"line":12816},[162,43999,37346],{"class":361},[162,44001,44002],{"class":164,"line":12841},[162,44003,37351],{"class":361},[162,44005,44006,44008,44010,44012,44014],{"class":164,"line":12864},[162,44007,37356],{"class":168},[162,44009,926],{"class":172},[162,44011,35863],{"class":168},[162,44013,2292],{"class":172},[162,44015,37365],{"class":168},[162,44017,44018],{"class":164,"line":12888},[162,44019,37370],{"class":361},[162,44021,44022,44024,44026,44028,44030],{"class":164,"line":12893},[162,44023,37375],{"class":168},[162,44025,926],{"class":172},[162,44027,37380],{"class":168},[162,44029,312],{"class":207},[162,44031,434],{"class":168},[162,44033,44034],{"class":164,"line":12898},[162,44035,301],{"emptyLinePlaceholder":300},[162,44037,44038],{"class":164,"line":12903},[162,44039,37393],{"class":361},[162,44041,44042,44044,44046,44048,44050],{"class":164,"line":12912},[162,44043,37398],{"class":168},[162,44045,173],{"class":172},[162,44047,37403],{"class":168},[162,44049,946],{"class":172},[162,44051,37408],{"class":168},[162,44053,44054],{"class":164,"line":12917},[162,44055,37413],{"class":361},[162,44057,44058,44060,44062,44064],{"class":164,"line":12923},[162,44059,2300],{"class":207},[162,44061,604],{"class":168},[162,44063,37422],{"class":179},[162,44065,37425],{"class":168},[162,44067,44068],{"class":164,"line":12944},[162,44069,301],{"emptyLinePlaceholder":300},[162,44071,44072],{"class":164,"line":12950},[162,44073,37434],{"class":361},[162,44075,44076,44078,44080,44082,44084],{"class":164,"line":12964},[162,44077,2703],{"class":172},[162,44079,34304],{"class":207},[162,44081,2292],{"class":172},[162,44083,34309],{"class":179},[162,44085,2316],{"class":168},[162,44087,44088],{"class":164,"line":12970},[162,44089,37451],{"class":361},[162,44091,44092,44094,44096],{"class":164,"line":12997},[162,44093,34373],{"class":168},[162,44095,173],{"class":172},[162,44097,44098],{"class":168},"VGG16()\n",[162,44100,44101],{"class":164,"line":13006},[162,44102,37464],{"class":361},[162,44104,44105],{"class":164,"line":13012},[162,44106,37469],{"class":361},[162,44108,44109,44111,44113],{"class":164,"line":13020},[162,44110,37474],{"class":168},[162,44112,37477],{"class":179},[162,44114,586],{"class":168},[162,44116,44117],{"class":164,"line":13025},[162,44118,37484],{"class":361},[162,44120,44121,44123,44125],{"class":164,"line":19695},[162,44122,37097],{"class":168},[162,44124,173],{"class":172},[162,44126,37493],{"class":168},[162,44128,44129],{"class":164,"line":19701},[162,44130,37498],{"class":361},[162,44132,44133],{"class":164,"line":19724},[162,44134,37503],{"class":168},[162,44136,44137],{"class":164,"line":19730},[162,44138,301],{"emptyLinePlaceholder":300},[162,44140,44141],{"class":164,"line":19753},[162,44142,37512],{"class":361},[162,44144,44145],{"class":164,"line":19767},[162,44146,37517],{"class":361},[162,44148,44149,44151,44153,44155,44157,44159,44161],{"class":164,"line":19787},[162,44150,34321],{"class":168},[162,44152,173],{"class":172},[162,44154,34328],{"class":179},[162,44156,4828],{"class":172},[162,44158,34333],{"class":168},[162,44160,2313],{"class":172},[162,44162,37194],{"class":179},[162,44164,44165,44167,44169],{"class":164,"line":19793},[162,44166,34373],{"class":168},[162,44168,173],{"class":172},[162,44170,35368],{"class":168},[162,44172,44173],{"class":164,"line":19804},[162,44174,37546],{"class":361},[162,44176,44177],{"class":164,"line":19827},[162,44178,37551],{"class":361},[162,44180,44181,44183,44185,44187,44189,44191,44193,44195,44197,44199,44201,44203,44205,44207,44209,44211,44213,44215,44217,44219,44221,44223,44225],{"class":164,"line":19849},[162,44182,37556],{"class":168},[162,44184,173],{"class":172},[162,44186,4168],{"class":168},[162,44188,37563],{"class":179},[162,44190,3670],{"class":168},[162,44192,37568],{"class":179},[162,44194,3670],{"class":168},[162,44196,37573],{"class":179},[162,44198,3670],{"class":168},[162,44200,37578],{"class":179},[162,44202,3670],{"class":168},[162,44204,37583],{"class":179},[162,44206,3670],{"class":168},[162,44208,37588],{"class":179},[162,44210,3670],{"class":168},[162,44212,37593],{"class":179},[162,44214,3670],{"class":168},[162,44216,37598],{"class":179},[162,44218,3670],{"class":168},[162,44220,37603],{"class":179},[162,44222,3670],{"class":168},[162,44224,37608],{"class":179},[162,44226,194],{"class":168},[162,44228,44229,44231],{"class":164,"line":19854},[162,44230,37253],{"class":172},[162,44232,35960],{"class":168},[162,44234,44235],{"class":164,"line":19860},[162,44236,37621],{"class":361},[162,44238,44239,44241,44243,44245],{"class":164,"line":19874},[162,44240,6517],{"class":172},[162,44242,37628],{"class":168},[162,44244,814],{"class":172},[162,44246,37272],{"class":168},[162,44248,44249,44251,44253],{"class":164,"line":19887},[162,44250,35686],{"class":168},[162,44252,173],{"class":172},[162,44254,35691],{"class":168},[162,44256,44257,44259,44261],{"class":164,"line":19892},[162,44258,35701],{"class":168},[162,44260,173],{"class":172},[162,44262,35706],{"class":168},[162,44264,44265],{"class":164,"line":19906},[162,44266,301],{"emptyLinePlaceholder":300},[162,44268,44269],{"class":164,"line":19911},[162,44270,37657],{"class":361},[162,44272,44273],{"class":164,"line":19917},[162,44274,35951],{"class":168},[162,44276,44277],{"class":164,"line":19922},[162,44278,37666],{"class":361},[162,44280,44281,44283,44285],{"class":164,"line":19936},[162,44282,35736],{"class":168},[162,44284,173],{"class":172},[162,44286,35741],{"class":168},[162,44288,44289],{"class":164,"line":19941},[162,44290,37679],{"class":361},[162,44292,44293,44295,44297,44299,44301,44303,44305],{"class":164,"line":19946},[162,44294,35753],{"class":168},[162,44296,173],{"class":172},[162,44298,35758],{"class":168},[162,44300,35761],{"class":671},[162,44302,173],{"class":172},[162,44304,208],{"class":207},[162,44306,434],{"class":168},[162,44308,44309],{"class":164,"line":19960},[162,44310,37700],{"class":361},[162,44312,44313,44315,44317],{"class":164,"line":19972},[162,44314,37705],{"class":168},[162,44316,173],{"class":172},[162,44318,37710],{"class":168},[162,44320,44321,44323,44325],{"class":164,"line":19977},[162,44322,37715],{"class":168},[162,44324,173],{"class":172},[162,44326,37720],{"class":168},[162,44328,44329,44331,44333,44335,44337,44339,44341,44343],{"class":164,"line":19990},[162,44330,37725],{"class":207},[162,44332,604],{"class":168},[162,44334,37730],{"class":179},[162,44336,37733],{"class":168},[162,44338,37736],{"class":179},[162,44340,3670],{"class":168},[162,44342,37741],{"class":179},[162,44344,37744],{"class":168},[3284,44346,44348],{"id":44347},"_23googlenet","2.3.GoogLeNet",[25089,44350,44352],{"id":44351},"_231原理","2.3.1.原理",[1452,44354,44355],{},[1455,44356,44357],{},"网络结构",[19,44359,44360],{},[4602,44361],{"alt":158,"src":44362},"\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,44364,44365],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,44367,44368],{},[4602,44369],{"alt":158,"src":44370},"\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,44372,44373],{},[4602,44374],{"alt":158,"src":44375},"\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,44377,44378],{},[4602,44379],{"alt":158,"src":44380},"\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",[1452,44382,44383],{"start":197},[1455,44384,44385],{},"1x1卷积的优点",[19,44387,44388],{},[4602,44389],{"alt":158,"src":44390},"\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",[1452,44392,44393],{"start":228},[1455,44394,44395],{},"全局平均池化层优点",[19,44397,44398],{},[4602,44399],{"alt":158,"src":44400},"\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,44402,44403],{},[4602,44404],{"alt":158,"src":44405},"\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",[1452,44407,44408],{"start":252},[1455,44409,44410],{},"参数详细描述",[19,44412,44413],{},[4602,44414],{"alt":158,"src":44415},"\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,44417,44418],{},[4602,44419],{"alt":158,"src":44420},"\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,44422,44423],{},[4602,44424],{"alt":158,"src":44425},"\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,44427,44428],{},[4602,44429],{"alt":158,"src":44430},"\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,44432,44433],{},[4602,44434],{"alt":158,"src":44435},"\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,44437,44438],{},[4602,44439],{"alt":158,"src":44440},"\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,44442,44443],{},[4602,44444],{"alt":158,"src":44445},"\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,44447,44448],{},[4602,44449],{"alt":158,"src":44450},"\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,44452,44453],{},[4602,44454],{"alt":158,"src":44455},"\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,44457,44458],{},[4602,44459],{"alt":158,"src":44460},"\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,44462,44463],{},[4602,44464],{"alt":158,"src":44465},"\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,44467,44468],{},[4602,44469],{"alt":158,"src":44470},"\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,44472,44473],{},[4602,44474],{"alt":158,"src":44475},"\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,44477,44478],{},[4602,44479],{"alt":158,"src":44480},"\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,44482,44483],{},[4602,44484],{"alt":158,"src":44485},"\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,44487,44488],{},[4602,44489],{"alt":158,"src":44490},"\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,44492,44493],{},[4602,44494],{"alt":158,"src":44495},"\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,44497,44498],{},[4602,44499],{"alt":158,"src":44500},"\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,44502,44503],{},[4602,44504],{"alt":158,"src":44505},"\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,44507,44508],{},[4602,44509],{"alt":158,"src":44510},"\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,44512,44513],{},[4602,44514],{"alt":158,"src":44515},"\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",[25089,44517,44519],{"id":44518},"_232代码实现","2.3.2.代码实现",[1452,44521,44522],{},[1455,44523,33795],{},[19,44525,44526],{},"根据原理一步一步搭建即可",[153,44528,44530],{"className":155,"code":44529,"language":157,"meta":158,"style":158},"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",[71,44531,44532,44538,44548,44558,44562,44579,44588,44603,44613,44618,44651,44656,44693,44740,44745,44781,44828,44833,44838,44873,44905,44909,44917,44933,44957,44982,45003,45008,45023,45027,45031,45036,45053,45058,45067,45082,45093,45137,45141,45169,45173,45184,45212,45216,45253,45257,45285,45289,45300,45336,45368,45396,45400,45411,45445,45477,45509,45542,45576,45604,45608,45619,45652,45684,45698,45702,45715,45719,45724,45736,45744,45766,45771,45776,45781,45786,45791,45796,45810,45818,45827,45840,45855,45864,45868,45876,45887,45898,45909,45920,45931,45937,45941,45946,45958,45978,45987],{"__ignoreMap":158},[162,44533,44534,44536],{"class":164,"line":165},[162,44535,33478],{"class":172},[162,44537,33481],{"class":168},[162,44539,44540,44542,44544,44546],{"class":164,"line":197},[162,44541,33821],{"class":172},[162,44543,33824],{"class":168},[162,44545,33478],{"class":172},[162,44547,33829],{"class":168},[162,44549,44550,44552,44554,44556],{"class":164,"line":228},[162,44551,33821],{"class":172},[162,44553,33841],{"class":168},[162,44555,33478],{"class":172},[162,44557,33846],{"class":168},[162,44559,44560],{"class":164,"line":252},[162,44561,301],{"emptyLinePlaceholder":300},[162,44563,44564,44566,44569,44571,44573,44575,44577],{"class":164,"line":328},[162,44565,17788],{"class":172},[162,44567,44568],{"class":5082}," Inception",[162,44570,604],{"class":168},[162,44572,33862],{"class":5082},[162,44574,3847],{"class":168},[162,44576,33867],{"class":5082},[162,44578,33870],{"class":168},[162,44580,44581,44583,44585],{"class":164,"line":466},[162,44582,33885],{"class":172},[162,44584,33888],{"class":207},[162,44586,44587],{"class":168},"(self,in_channels,c1,c2,c3,c4):\n",[162,44589,44590,44592,44595,44597,44599,44601],{"class":164,"line":471},[162,44591,33901],{"class":207},[162,44593,44594],{"class":168},"(Inception,",[162,44596,33907],{"class":207},[162,44598,33910],{"class":168},[162,44600,33913],{"class":207},[162,44602,1526],{"class":168},[162,44604,44605,44607,44609,44611],{"class":164,"line":687},[162,44606,33929],{"class":207},[162,44608,37846],{"class":168},[162,44610,173],{"class":172},[162,44612,37851],{"class":168},[162,44614,44615],{"class":164,"line":692},[162,44616,44617],{"class":361},"        # 路线1：定义1*1卷积\n",[162,44619,44620,44622,44625,44627,44629,44631,44633,44636,44638,44640,44643,44645,44647,44649],{"class":164,"line":698},[162,44621,33929],{"class":207},[162,44623,44624],{"class":168},".p1_1",[162,44626,173],{"class":172},[162,44628,33937],{"class":168},[162,44630,33940],{"class":671},[162,44632,173],{"class":172},[162,44634,44635],{"class":168},"in_channels,",[162,44637,33949],{"class":671},[162,44639,173],{"class":172},[162,44641,44642],{"class":168},"c1,",[162,44644,33958],{"class":671},[162,44646,173],{"class":172},[162,44648,208],{"class":207},[162,44650,434],{"class":168},[162,44652,44653],{"class":164,"line":2955},[162,44654,44655],{"class":361},"        # 路线2：定义1*1卷积和3*3\n",[162,44657,44658,44660,44663,44665,44667,44669,44671,44673,44675,44677,44680,44682,44685,44687,44689,44691],{"class":164,"line":2960},[162,44659,33929],{"class":207},[162,44661,44662],{"class":168},".p2_1",[162,44664,173],{"class":172},[162,44666,33937],{"class":168},[162,44668,33940],{"class":671},[162,44670,173],{"class":172},[162,44672,44635],{"class":168},[162,44674,33949],{"class":671},[162,44676,173],{"class":172},[162,44678,44679],{"class":168},"c2[",[162,44681,312],{"class":207},[162,44683,44684],{"class":168},"],",[162,44686,33958],{"class":671},[162,44688,173],{"class":172},[162,44690,208],{"class":207},[162,44692,434],{"class":168},[162,44694,44695,44697,44700,44702,44704,44706,44708,44710,44712,44714,44716,44718,44720,44722,44724,44726,44728,44730,44732,44734,44736,44738],{"class":164,"line":2971},[162,44696,33929],{"class":207},[162,44698,44699],{"class":168},".p2_2",[162,44701,173],{"class":172},[162,44703,33937],{"class":168},[162,44705,33940],{"class":671},[162,44707,173],{"class":172},[162,44709,44679],{"class":168},[162,44711,312],{"class":207},[162,44713,44684],{"class":168},[162,44715,33949],{"class":671},[162,44717,173],{"class":172},[162,44719,44679],{"class":168},[162,44721,208],{"class":207},[162,44723,44684],{"class":168},[162,44725,33958],{"class":671},[162,44727,173],{"class":172},[162,44729,218],{"class":207},[162,44731,3670],{"class":168},[162,44733,33967],{"class":671},[162,44735,173],{"class":172},[162,44737,208],{"class":207},[162,44739,434],{"class":168},[162,44741,44742],{"class":164,"line":2984},[162,44743,44744],{"class":361},"        # 路线3：定义1*1卷积和5*5\n",[162,44746,44747,44749,44752,44754,44756,44758,44760,44762,44764,44766,44769,44771,44773,44775,44777,44779],{"class":164,"line":2989},[162,44748,33929],{"class":207},[162,44750,44751],{"class":168},".p3_1",[162,44753,173],{"class":172},[162,44755,33937],{"class":168},[162,44757,33940],{"class":671},[162,44759,173],{"class":172},[162,44761,44635],{"class":168},[162,44763,33949],{"class":671},[162,44765,173],{"class":172},[162,44767,44768],{"class":168},"c3[",[162,44770,312],{"class":207},[162,44772,44684],{"class":168},[162,44774,33958],{"class":671},[162,44776,173],{"class":172},[162,44778,208],{"class":207},[162,44780,434],{"class":168},[162,44782,44783,44785,44788,44790,44792,44794,44796,44798,44800,44802,44804,44806,44808,44810,44812,44814,44816,44818,44820,44822,44824,44826],{"class":164,"line":3011},[162,44784,33929],{"class":207},[162,44786,44787],{"class":168},".p3_2",[162,44789,173],{"class":172},[162,44791,33937],{"class":168},[162,44793,33940],{"class":671},[162,44795,173],{"class":172},[162,44797,44768],{"class":168},[162,44799,312],{"class":207},[162,44801,44684],{"class":168},[162,44803,33949],{"class":671},[162,44805,173],{"class":172},[162,44807,44768],{"class":168},[162,44809,208],{"class":207},[162,44811,44684],{"class":168},[162,44813,33958],{"class":671},[162,44815,173],{"class":172},[162,44817,637],{"class":207},[162,44819,3670],{"class":168},[162,44821,33967],{"class":671},[162,44823,173],{"class":172},[162,44825,213],{"class":207},[162,44827,434],{"class":168},[162,44829,44830],{"class":164,"line":3022},[162,44831,44832],{"class":361},"        # 路线4：定义3*3最大池化和1*1卷积\n",[162,44834,44835],{"class":164,"line":3027},[162,44836,44837],{"class":361},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[162,44839,44840,44842,44845,44847,44849,44851,44853,44855,44857,44859,44861,44863,44865,44867,44869,44871],{"class":164,"line":3046},[162,44841,33929],{"class":207},[162,44843,44844],{"class":168},".p4_1",[162,44846,173],{"class":172},[162,44848,37904],{"class":168},[162,44850,33958],{"class":671},[162,44852,173],{"class":172},[162,44854,218],{"class":207},[162,44856,3670],{"class":168},[162,44858,34013],{"class":671},[162,44860,173],{"class":172},[162,44862,208],{"class":207},[162,44864,3670],{"class":168},[162,44866,33967],{"class":671},[162,44868,173],{"class":172},[162,44870,208],{"class":207},[162,44872,434],{"class":168},[162,44874,44875,44877,44880,44882,44884,44886,44888,44890,44892,44894,44897,44899,44901,44903],{"class":164,"line":3052},[162,44876,33929],{"class":207},[162,44878,44879],{"class":168},".p4_2",[162,44881,173],{"class":172},[162,44883,33937],{"class":168},[162,44885,33940],{"class":671},[162,44887,173],{"class":172},[162,44889,44635],{"class":168},[162,44891,33949],{"class":671},[162,44893,173],{"class":172},[162,44895,44896],{"class":168},"c4,",[162,44898,33958],{"class":671},[162,44900,173],{"class":172},[162,44902,208],{"class":207},[162,44904,434],{"class":168},[162,44906,44907],{"class":164,"line":3057},[162,44908,301],{"emptyLinePlaceholder":300},[162,44910,44911,44913,44915],{"class":164,"line":3072},[162,44912,33885],{"class":172},[162,44914,34177],{"class":5082},[162,44916,34180],{"class":168},[162,44918,44919,44922,44924,44926,44928,44930],{"class":164,"line":3077},[162,44920,44921],{"class":168},"        p1",[162,44923,173],{"class":172},[162,44925,33907],{"class":207},[162,44927,38259],{"class":168},[162,44929,33907],{"class":207},[162,44931,44932],{"class":168},".p1_1(x))\n",[162,44934,44935,44937,44939,44941,44943,44945,44948,44950,44952,44954],{"class":164,"line":3100},[162,44936,10191],{"class":168},[162,44938,173],{"class":172},[162,44940,33907],{"class":207},[162,44942,38259],{"class":168},[162,44944,33907],{"class":207},[162,44946,44947],{"class":168},".p2_2(",[162,44949,33907],{"class":207},[162,44951,38259],{"class":168},[162,44953,33907],{"class":207},[162,44955,44956],{"class":168},".p2_1(x))))\n",[162,44958,44959,44962,44964,44966,44968,44970,44973,44975,44977,44979],{"class":164,"line":3140},[162,44960,44961],{"class":168},"        p3",[162,44963,173],{"class":172},[162,44965,33907],{"class":207},[162,44967,38259],{"class":168},[162,44969,33907],{"class":207},[162,44971,44972],{"class":168},".p3_2(",[162,44974,33907],{"class":207},[162,44976,38259],{"class":168},[162,44978,33907],{"class":207},[162,44980,44981],{"class":168},".p3_1(x))))\n",[162,44983,44984,44987,44989,44991,44993,44995,44998,45000],{"class":164,"line":4878},[162,44985,44986],{"class":168},"        p4",[162,44988,173],{"class":172},[162,44990,33907],{"class":207},[162,44992,38259],{"class":168},[162,44994,33907],{"class":207},[162,44996,44997],{"class":168},".p4_2(",[162,44999,33907],{"class":207},[162,45001,45002],{"class":168},".p4_1(x)))\n",[162,45004,45005],{"class":164,"line":4883},[162,45006,45007],{"class":361},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[162,45009,45010,45012,45015,45017,45019,45021],{"class":164,"line":4897},[162,45011,17846],{"class":172},[162,45013,45014],{"class":168}," torch.cat((p1,p2,p3,p4),",[162,45016,35761],{"class":671},[162,45018,173],{"class":172},[162,45020,208],{"class":207},[162,45022,434],{"class":168},[162,45024,45025],{"class":164,"line":4902},[162,45026,301],{"emptyLinePlaceholder":300},[162,45028,45029],{"class":164,"line":5694},[162,45030,301],{"emptyLinePlaceholder":300},[162,45032,45033],{"class":164,"line":5708},[162,45034,45035],{"class":361},"# 搭建GoogLeNet网络\n",[162,45037,45038,45040,45043,45045,45047,45049,45051],{"class":164,"line":5716},[162,45039,17788],{"class":172},[162,45041,45042],{"class":5082}," GoogLeNet",[162,45044,604],{"class":168},[162,45046,33862],{"class":5082},[162,45048,3847],{"class":168},[162,45050,33867],{"class":5082},[162,45052,33870],{"class":168},[162,45054,45055],{"class":164,"line":5721},[162,45056,45057],{"class":361},"    # 必须把Inception导入到里边\n",[162,45059,45060,45062,45064],{"class":164,"line":5727},[162,45061,33885],{"class":172},[162,45063,33888],{"class":207},[162,45065,45066],{"class":168},"(self,Inception):\n",[162,45068,45069,45071,45074,45076,45078,45080],{"class":164,"line":5733},[162,45070,33901],{"class":207},[162,45072,45073],{"class":168},"(GoogLeNet,",[162,45075,33907],{"class":207},[162,45077,33910],{"class":168},[162,45079,33913],{"class":207},[162,45081,1526],{"class":168},[162,45083,45084,45086,45089,45091],{"class":164,"line":5738},[162,45085,33929],{"class":207},[162,45087,45088],{"class":168},".b1",[162,45090,173],{"class":172},[162,45092,41084],{"class":168},[162,45094,45095,45097,45099,45101,45103,45105,45107,45109,45111,45113,45115,45117,45119,45121,45123,45125,45127,45129,45131,45133,45135],{"class":164,"line":11052},[162,45096,41089],{"class":168},[162,45098,33940],{"class":671},[162,45100,173],{"class":172},[162,45102,208],{"class":207},[162,45104,3670],{"class":168},[162,45106,33949],{"class":671},[162,45108,173],{"class":172},[162,45110,3504],{"class":207},[162,45112,3670],{"class":168},[162,45114,33958],{"class":671},[162,45116,173],{"class":172},[162,45118,3661],{"class":207},[162,45120,3670],{"class":168},[162,45122,34013],{"class":671},[162,45124,173],{"class":172},[162,45126,213],{"class":207},[162,45128,3670],{"class":168},[162,45130,33967],{"class":671},[162,45132,173],{"class":172},[162,45134,218],{"class":207},[162,45136,41122],{"class":168},[162,45138,45139],{"class":164,"line":11076},[162,45140,41127],{"class":168},[162,45142,45143,45145,45147,45149,45151,45153,45155,45157,45159,45161,45163,45165,45167],{"class":164,"line":11081},[162,45144,41172],{"class":168},[162,45146,33958],{"class":671},[162,45148,173],{"class":172},[162,45150,218],{"class":207},[162,45152,3670],{"class":168},[162,45154,34013],{"class":671},[162,45156,173],{"class":172},[162,45158,213],{"class":207},[162,45160,3670],{"class":168},[162,45162,33967],{"class":671},[162,45164,173],{"class":172},[162,45166,208],{"class":207},[162,45168,434],{"class":168},[162,45170,45171],{"class":164,"line":11087},[162,45172,41201],{"class":168},[162,45174,45175,45177,45180,45182],{"class":164,"line":11114},[162,45176,33929],{"class":207},[162,45178,45179],{"class":168},".b2",[162,45181,173],{"class":172},[162,45183,41084],{"class":168},[162,45185,45186,45188,45190,45192,45194,45196,45198,45200,45202,45204,45206,45208,45210],{"class":164,"line":11119},[162,45187,41089],{"class":168},[162,45189,33940],{"class":671},[162,45191,173],{"class":172},[162,45193,3504],{"class":207},[162,45195,3670],{"class":168},[162,45197,33949],{"class":671},[162,45199,173],{"class":172},[162,45201,3504],{"class":207},[162,45203,3670],{"class":168},[162,45205,33958],{"class":671},[162,45207,173],{"class":172},[162,45209,208],{"class":207},[162,45211,41122],{"class":168},[162,45213,45214],{"class":164,"line":11125},[162,45215,41127],{"class":168},[162,45217,45218,45220,45222,45224,45226,45228,45230,45232,45235,45237,45239,45241,45243,45245,45247,45249,45251],{"class":164,"line":11137},[162,45219,41089],{"class":168},[162,45221,33940],{"class":671},[162,45223,173],{"class":172},[162,45225,3504],{"class":207},[162,45227,3670],{"class":168},[162,45229,33949],{"class":671},[162,45231,173],{"class":172},[162,45233,45234],{"class":207},"192",[162,45236,3670],{"class":168},[162,45238,33958],{"class":671},[162,45240,173],{"class":172},[162,45242,218],{"class":207},[162,45244,3670],{"class":168},[162,45246,33967],{"class":671},[162,45248,173],{"class":172},[162,45250,208],{"class":207},[162,45252,41122],{"class":168},[162,45254,45255],{"class":164,"line":11149},[162,45256,41127],{"class":168},[162,45258,45259,45261,45263,45265,45267,45269,45271,45273,45275,45277,45279,45281,45283],{"class":164,"line":11161},[162,45260,41172],{"class":168},[162,45262,33958],{"class":671},[162,45264,173],{"class":172},[162,45266,218],{"class":207},[162,45268,3670],{"class":168},[162,45270,34013],{"class":671},[162,45272,173],{"class":172},[162,45274,213],{"class":207},[162,45276,3670],{"class":168},[162,45278,33967],{"class":671},[162,45280,173],{"class":172},[162,45282,208],{"class":207},[162,45284,434],{"class":168},[162,45286,45287],{"class":164,"line":12816},[162,45288,41201],{"class":168},[162,45290,45291,45293,45296,45298],{"class":164,"line":12841},[162,45292,33929],{"class":207},[162,45294,45295],{"class":168},".b3",[162,45297,173],{"class":172},[162,45299,41084],{"class":168},[162,45301,45302,45305,45307,45309,45311,45314,45316,45318,45320,45323,45325,45327,45329,45332,45334],{"class":164,"line":12864},[162,45303,45304],{"class":168},"            Inception(",[162,45306,45234],{"class":207},[162,45308,3670],{"class":168},[162,45310,3504],{"class":207},[162,45312,45313],{"class":168},",(",[162,45315,3510],{"class":207},[162,45317,3670],{"class":168},[162,45319,35149],{"class":207},[162,45321,45322],{"class":168},"),(",[162,45324,3888],{"class":207},[162,45326,3670],{"class":168},[162,45328,3498],{"class":207},[162,45330,45331],{"class":168},"),",[162,45333,3498],{"class":207},[162,45335,41122],{"class":168},[162,45337,45338,45340,45342,45344,45346,45348,45350,45352,45354,45356,45358,45360,45362,45364,45366],{"class":164,"line":12888},[162,45339,45304],{"class":168},[162,45341,37945],{"class":207},[162,45343,3670],{"class":168},[162,45345,35149],{"class":207},[162,45347,45313],{"class":168},[162,45349,35149],{"class":207},[162,45351,3670],{"class":168},[162,45353,45234],{"class":207},[162,45355,45322],{"class":168},[162,45357,3498],{"class":207},[162,45359,3670],{"class":168},[162,45361,3510],{"class":207},[162,45363,45331],{"class":168},[162,45365,3504],{"class":207},[162,45367,41122],{"class":168},[162,45369,45370,45372,45374,45376,45378,45380,45382,45384,45386,45388,45390,45392,45394],{"class":164,"line":12893},[162,45371,41172],{"class":168},[162,45373,33958],{"class":671},[162,45375,173],{"class":172},[162,45377,218],{"class":207},[162,45379,3670],{"class":168},[162,45381,34013],{"class":671},[162,45383,173],{"class":172},[162,45385,213],{"class":207},[162,45387,3670],{"class":168},[162,45389,33967],{"class":671},[162,45391,173],{"class":172},[162,45393,208],{"class":207},[162,45395,434],{"class":168},[162,45397,45398],{"class":164,"line":12898},[162,45399,41201],{"class":168},[162,45401,45402,45404,45407,45409],{"class":164,"line":12903},[162,45403,33929],{"class":207},[162,45405,45406],{"class":168},".b4",[162,45408,173],{"class":172},[162,45410,41084],{"class":168},[162,45412,45413,45415,45418,45420,45422,45424,45426,45428,45431,45433,45435,45437,45439,45441,45443],{"class":164,"line":12912},[162,45414,45304],{"class":168},[162,45416,45417],{"class":207},"480",[162,45419,3670],{"class":168},[162,45421,45234],{"class":207},[162,45423,45313],{"class":168},[162,45425,3510],{"class":207},[162,45427,3670],{"class":168},[162,45429,45430],{"class":207},"208",[162,45432,45322],{"class":168},[162,45434,3888],{"class":207},[162,45436,3670],{"class":168},[162,45438,3894],{"class":207},[162,45440,45331],{"class":168},[162,45442,3504],{"class":207},[162,45444,41122],{"class":168},[162,45446,45447,45449,45451,45453,45455,45457,45459,45461,45463,45465,45467,45469,45471,45473,45475],{"class":164,"line":12917},[162,45448,45304],{"class":168},[162,45450,41532],{"class":207},[162,45452,3670],{"class":168},[162,45454,24139],{"class":207},[162,45456,45313],{"class":168},[162,45458,3905],{"class":207},[162,45460,3670],{"class":168},[162,45462,34582],{"class":207},[162,45464,45322],{"class":168},[162,45466,4082],{"class":207},[162,45468,3670],{"class":168},[162,45470,3504],{"class":207},[162,45472,45331],{"class":168},[162,45474,3504],{"class":207},[162,45476,41122],{"class":168},[162,45478,45479,45481,45483,45485,45487,45489,45491,45493,45495,45497,45499,45501,45503,45505,45507],{"class":164,"line":12923},[162,45480,45304],{"class":168},[162,45482,41532],{"class":207},[162,45484,3670],{"class":168},[162,45486,35149],{"class":207},[162,45488,45313],{"class":168},[162,45490,35149],{"class":207},[162,45492,3670],{"class":168},[162,45494,37945],{"class":207},[162,45496,45322],{"class":168},[162,45498,4082],{"class":207},[162,45500,3670],{"class":168},[162,45502,3504],{"class":207},[162,45504,45331],{"class":168},[162,45506,3504],{"class":207},[162,45508,41122],{"class":168},[162,45510,45511,45513,45515,45517,45519,45521,45523,45525,45528,45530,45532,45534,45536,45538,45540],{"class":164,"line":12944},[162,45512,45304],{"class":168},[162,45514,41532],{"class":207},[162,45516,3670],{"class":168},[162,45518,3905],{"class":207},[162,45520,45313],{"class":168},[162,45522,35149],{"class":207},[162,45524,3670],{"class":168},[162,45526,45527],{"class":207},"288",[162,45529,45322],{"class":168},[162,45531,3498],{"class":207},[162,45533,3670],{"class":168},[162,45535,3504],{"class":207},[162,45537,45331],{"class":168},[162,45539,3504],{"class":207},[162,45541,41122],{"class":168},[162,45543,45544,45546,45549,45551,45553,45555,45557,45559,45562,45564,45566,45568,45570,45572,45574],{"class":164,"line":12950},[162,45545,45304],{"class":168},[162,45547,45548],{"class":207},"528",[162,45550,3670],{"class":168},[162,45552,37945],{"class":207},[162,45554,45313],{"class":168},[162,45556,24139],{"class":207},[162,45558,3670],{"class":168},[162,45560,45561],{"class":207},"320",[162,45563,45322],{"class":168},[162,45565,3498],{"class":207},[162,45567,3670],{"class":168},[162,45569,35149],{"class":207},[162,45571,45331],{"class":168},[162,45573,35149],{"class":207},[162,45575,41122],{"class":168},[162,45577,45578,45580,45582,45584,45586,45588,45590,45592,45594,45596,45598,45600,45602],{"class":164,"line":12964},[162,45579,41172],{"class":168},[162,45581,33958],{"class":671},[162,45583,173],{"class":172},[162,45585,218],{"class":207},[162,45587,3670],{"class":168},[162,45589,34013],{"class":671},[162,45591,173],{"class":172},[162,45593,213],{"class":207},[162,45595,3670],{"class":168},[162,45597,33967],{"class":671},[162,45599,173],{"class":172},[162,45601,208],{"class":207},[162,45603,434],{"class":168},[162,45605,45606],{"class":164,"line":12970},[162,45607,41201],{"class":168},[162,45609,45610,45612,45615,45617],{"class":164,"line":12997},[162,45611,33929],{"class":207},[162,45613,45614],{"class":168},".b5",[162,45616,173],{"class":172},[162,45618,41084],{"class":168},[162,45620,45621,45623,45626,45628,45630,45632,45634,45636,45638,45640,45642,45644,45646,45648,45650],{"class":164,"line":13006},[162,45622,45304],{"class":168},[162,45624,45625],{"class":207},"832",[162,45627,3670],{"class":168},[162,45629,37945],{"class":207},[162,45631,45313],{"class":168},[162,45633,24139],{"class":207},[162,45635,3670],{"class":168},[162,45637,45561],{"class":207},[162,45639,45322],{"class":168},[162,45641,3498],{"class":207},[162,45643,3670],{"class":168},[162,45645,35149],{"class":207},[162,45647,45331],{"class":168},[162,45649,35149],{"class":207},[162,45651,41122],{"class":168},[162,45653,45654,45656,45658,45660,45662,45664,45666,45668,45670,45672,45674,45676,45678,45680,45682],{"class":164,"line":13012},[162,45655,45304],{"class":168},[162,45657,45625],{"class":207},[162,45659,3670],{"class":168},[162,45661,38015],{"class":207},[162,45663,45313],{"class":168},[162,45665,45234],{"class":207},[162,45667,3670],{"class":168},[162,45669,38015],{"class":207},[162,45671,45322],{"class":168},[162,45673,3894],{"class":207},[162,45675,3670],{"class":168},[162,45677,35149],{"class":207},[162,45679,45331],{"class":168},[162,45681,35149],{"class":207},[162,45683,41122],{"class":168},[162,45685,45686,45689,45691,45693,45695],{"class":164,"line":13020},[162,45687,45688],{"class":168},"            nn.AdaptiveAvgPool2d((",[162,45690,208],{"class":207},[162,45692,3670],{"class":168},[162,45694,208],{"class":207},[162,45696,45697],{"class":168},")),\n",[162,45699,45700],{"class":164,"line":13025},[162,45701,41865],{"class":168},[162,45703,45704,45706,45709,45711,45713],{"class":164,"line":19695},[162,45705,41870],{"class":168},[162,45707,45708],{"class":207},"1024",[162,45710,3670],{"class":168},[162,45712,1006],{"class":207},[162,45714,434],{"class":168},[162,45716,45717],{"class":164,"line":19701},[162,45718,41201],{"class":168},[162,45720,45721],{"class":164,"line":19724},[162,45722,45723],{"class":361},"        # 对模型参数初始化\n",[162,45725,45726,45728,45730,45732,45734],{"class":164,"line":19730},[162,45727,6517],{"class":172},[162,45729,41943],{"class":168},[162,45731,814],{"class":172},[162,45733,41948],{"class":207},[162,45735,41951],{"class":168},[162,45737,45738,45740,45742],{"class":164,"line":19753},[162,45739,7752],{"class":172},[162,45741,41963],{"class":207},[162,45743,41966],{"class":168},[162,45745,45746,45748,45751,45753,45756,45758,45760,45762,45764],{"class":164,"line":19767},[162,45747,41976],{"class":168},[162,45749,45750],{"class":671},"mode",[162,45752,173],{"class":172},[162,45754,45755],{"class":179},"'fan_out'",[162,45757,3670],{"class":168},[162,45759,41979],{"class":671},[162,45761,173],{"class":172},[162,45763,41984],{"class":179},[162,45765,434],{"class":168},[162,45767,45768],{"class":164,"line":19787},[162,45769,45770],{"class":361},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[162,45772,45773],{"class":164,"line":19793},[162,45774,45775],{"class":361},"                # ② mode = 'fan_out'决定使用的fan值：\n",[162,45777,45778],{"class":164,"line":19804},[162,45779,45780],{"class":361},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[162,45782,45783],{"class":164,"line":19827},[162,45784,45785],{"class":361},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[162,45787,45788],{"class":164,"line":19849},[162,45789,45790],{"class":361},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[162,45792,45793],{"class":164,"line":19854},[162,45794,45795],{"class":361},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[162,45797,45798,45800,45802,45804,45806,45808],{"class":164,"line":19860},[162,45799,41996],{"class":172},[162,45801,41999],{"class":168},[162,45803,42002],{"class":172},[162,45805,42005],{"class":172},[162,45807,42008],{"class":207},[162,45809,2316],{"class":168},[162,45811,45812,45814,45816],{"class":164,"line":19874},[162,45813,42020],{"class":168},[162,45815,312],{"class":207},[162,45817,434],{"class":168},[162,45819,45820,45823,45825],{"class":164,"line":19887},[162,45821,45822],{"class":172},"                elif",[162,45824,41963],{"class":207},[162,45826,42039],{"class":168},[162,45828,45829,45832,45834,45836,45838],{"class":164,"line":19892},[162,45830,45831],{"class":168},"                    nn.init.normal_(m.weight,",[162,45833,312],{"class":207},[162,45835,3670],{"class":168},[162,45837,42061],{"class":207},[162,45839,434],{"class":168},[162,45841,45842,45845,45847,45849,45851,45853],{"class":164,"line":19906},[162,45843,45844],{"class":172},"                    if",[162,45846,41999],{"class":168},[162,45848,42002],{"class":172},[162,45850,42005],{"class":172},[162,45852,42008],{"class":207},[162,45854,2316],{"class":168},[162,45856,45857,45860,45862],{"class":164,"line":19911},[162,45858,45859],{"class":168},"                        nn.init.constant_(m.bias,",[162,45861,312],{"class":207},[162,45863,434],{"class":168},[162,45865,45866],{"class":164,"line":19917},[162,45867,38240],{"class":361},[162,45869,45870,45872,45874],{"class":164,"line":19922},[162,45871,33885],{"class":172},[162,45873,34177],{"class":5082},[162,45875,34180],{"class":168},[162,45877,45878,45880,45882,45884],{"class":164,"line":19936},[162,45879,34185],{"class":168},[162,45881,173],{"class":172},[162,45883,33907],{"class":207},[162,45885,45886],{"class":168},".b1(x)\n",[162,45888,45889,45891,45893,45895],{"class":164,"line":19941},[162,45890,34185],{"class":168},[162,45892,173],{"class":172},[162,45894,33907],{"class":207},[162,45896,45897],{"class":168},".b2(x)\n",[162,45899,45900,45902,45904,45906],{"class":164,"line":19946},[162,45901,34185],{"class":168},[162,45903,173],{"class":172},[162,45905,33907],{"class":207},[162,45907,45908],{"class":168},".b3(x)\n",[162,45910,45911,45913,45915,45917],{"class":164,"line":19960},[162,45912,34185],{"class":168},[162,45914,173],{"class":172},[162,45916,33907],{"class":207},[162,45918,45919],{"class":168},".b4(x)\n",[162,45921,45922,45924,45926,45928],{"class":164,"line":19972},[162,45923,34185],{"class":168},[162,45925,173],{"class":172},[162,45927,33907],{"class":207},[162,45929,45930],{"class":168},".b5(x)\n",[162,45932,45933,45935],{"class":164,"line":19977},[162,45934,17846],{"class":172},[162,45936,34293],{"class":168},[162,45938,45939],{"class":164,"line":19990},[162,45940,301],{"emptyLinePlaceholder":300},[162,45942,45943],{"class":164,"line":19995},[162,45944,45945],{"class":361},"# 模型展示\n",[162,45947,45948,45950,45952,45954,45956],{"class":164,"line":20000},[162,45949,2703],{"class":172},[162,45951,34304],{"class":207},[162,45953,2292],{"class":172},[162,45955,34309],{"class":179},[162,45957,2316],{"class":168},[162,45959,45960,45962,45964,45966,45968,45970,45972,45974,45976],{"class":164,"line":20005},[162,45961,34321],{"class":168},[162,45963,173],{"class":172},[162,45965,33536],{"class":168},[162,45967,34328],{"class":179},[162,45969,4828],{"class":172},[162,45971,34333],{"class":168},[162,45973,2313],{"class":172},[162,45975,33561],{"class":179},[162,45977,434],{"class":168},[162,45979,45980,45982,45984],{"class":164,"line":20018},[162,45981,34373],{"class":168},[162,45983,173],{"class":172},[162,45985,45986],{"class":168},"GoogLeNet(Inception).to(device)\n",[162,45988,45989,45991,45993,45995,45997,45999,46001,46003],{"class":164,"line":20023},[162,45990,822],{"class":207},[162,45992,34385],{"class":168},[162,45994,208],{"class":207},[162,45996,3670],{"class":168},[162,45998,34582],{"class":207},[162,46000,3670],{"class":168},[162,46002,34582],{"class":207},[162,46004,34398],{"class":168},[1452,46006,46007],{"start":197},[1455,46008,42258],{},[153,46010,46012],{"className":155,"code":46011,"language":157,"meta":158,"style":158},"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",[71,46013,46014,46020,46026,46036,46042,46052,46062,46072,46082,46092,46096,46107,46117,46121,46125,46129,46137,46149,46159,46175,46185,46217,46231,46241,46251,46255,46265,46279,46289,46299,46309,46315,46319,46323,46327,46331,46335,46343,46363,46367,46371,46375,46379,46383,46399,46403,46407,46415,46419,46423,46431,46435,46439,46443,46451,46455,46459,46463,46467,46475,46479,46487,46491,46499,46503,46511,46515,46523,46527,46531,46539,46543,46547,46551,46563,46587,46601,46605,46609,46613,46621,46625,46633,46637,46645,46649,46657,46661,46669,46673,46681,46685,46697,46701,46709,46713,46721,46725,46729,46733,46737,46745,46749,46765,46769,46777,46781,46785,46789,46793,46797,46801,46805,46821,46825,46837,46841,46853,46857,46869,46873,46881,46885,46893,46897,46901,46905,46911,46915,46923,46927,46943,46947,46955,46959,46975,46987,46991,47003,47007,47011,47019,47023,47027,47035,47039,47047,47051,47059,47063,47067,47109,47151,47155,47159,47175,47179,47195,47199,47203,47211,47215,47219,47231,47269,47273,47277,47285,47289,47303,47313,47319,47325,47331,47337,47341,47345,47351,47355,47359,47367,47371,47389,47393,47397,47401,47417,47421,47425,47429,47433,47437,47457,47477,47481,47485,47489,47497,47505,47509,47525,47545,47565,47569,47573,47581,47589,47593,47597,47601,47613,47617,47627,47635,47652],{"__ignoreMap":158},[162,46015,46016,46018],{"class":164,"line":165},[162,46017,33478],{"class":172},[162,46019,34901],{"class":168},[162,46021,46022,46024],{"class":164,"line":197},[162,46023,33478],{"class":172},[162,46025,34908],{"class":168},[162,46027,46028,46030,46032,46034],{"class":164,"line":228},[162,46029,33478],{"class":172},[162,46031,34919],{"class":168},[162,46033,34466],{"class":172},[162,46035,34924],{"class":168},[162,46037,46038,46040],{"class":164,"line":252},[162,46039,33478],{"class":172},[162,46041,33481],{"class":168},[162,46043,46044,46046,46048,46050],{"class":164,"line":328},[162,46045,33821],{"class":172},[162,46047,34498],{"class":168},[162,46049,33478],{"class":172},[162,46051,34941],{"class":168},[162,46053,46054,46056,46058,46060],{"class":164,"line":466},[162,46055,33821],{"class":172},[162,46057,34451],{"class":168},[162,46059,33478],{"class":172},[162,46061,34456],{"class":168},[162,46063,46064,46066,46068,46070],{"class":164,"line":471},[162,46065,33821],{"class":172},[162,46067,34481],{"class":168},[162,46069,33478],{"class":172},[162,46071,34486],{"class":168},[162,46073,46074,46076,46078,46080],{"class":164,"line":687},[162,46075,33478],{"class":172},[162,46077,34498],{"class":168},[162,46079,34466],{"class":172},[162,46081,34503],{"class":168},[162,46083,46084,46086,46088,46090],{"class":164,"line":692},[162,46085,33478],{"class":172},[162,46087,34515],{"class":168},[162,46089,34466],{"class":172},[162,46091,34520],{"class":168},[162,46093,46094],{"class":164,"line":698},[162,46095,34986],{"class":361},[162,46097,46098,46100,46102,46104],{"class":164,"line":2955},[162,46099,33821],{"class":172},[162,46101,34993],{"class":168},[162,46103,33478],{"class":172},[162,46105,46106],{"class":168}," GoogLeNet, Inception\n",[162,46108,46109,46111,46113,46115],{"class":164,"line":2960},[162,46110,33821],{"class":172},[162,46112,33824],{"class":168},[162,46114,33478],{"class":172},[162,46116,33829],{"class":168},[162,46118,46119],{"class":164,"line":2971},[162,46120,301],{"emptyLinePlaceholder":300},[162,46122,46123],{"class":164,"line":2984},[162,46124,301],{"emptyLinePlaceholder":300},[162,46126,46127],{"class":164,"line":2989},[162,46128,35021],{"class":361},[162,46130,46131,46133,46135],{"class":164,"line":3011},[162,46132,35026],{"class":172},[162,46134,35029],{"class":5082},[162,46136,35032],{"class":168},[162,46138,46139,46141,46143,46145,46147],{"class":164,"line":3022},[162,46140,35037],{"class":168},[162,46142,173],{"class":172},[162,46144,34538],{"class":168},[162,46146,34546],{"class":179},[162,46148,1735],{"class":168},[162,46150,46151,46153,46155,46157],{"class":164,"line":3027},[162,46152,35050],{"class":671},[162,46154,173],{"class":172},[162,46156,247],{"class":207},[162,46158,1735],{"class":168},[162,46160,46161,46163,46165,46167,46169,46171,46173],{"class":164,"line":3046},[162,46162,35061],{"class":671},[162,46164,173],{"class":172},[162,46166,34574],{"class":168},[162,46168,34577],{"class":671},[162,46170,173],{"class":172},[162,46172,38524],{"class":207},[162,46174,34585],{"class":168},[162,46176,46177,46179,46181,46183],{"class":164,"line":3052},[162,46178,35078],{"class":671},[162,46180,173],{"class":172},[162,46182,247],{"class":207},[162,46184,434],{"class":168},[162,46186,46187,46189,46191,46193,46195,46197,46199,46201,46203,46205,46207,46209,46211,46213,46215],{"class":164,"line":3057},[162,46188,35089],{"class":168},[162,46190,173],{"class":172},[162,46192,35094],{"class":168},[162,46194,35097],{"class":207},[162,46196,604],{"class":168},[162,46198,35102],{"class":207},[162,46200,3745],{"class":172},[162,46202,607],{"class":207},[162,46204,35109],{"class":168},[162,46206,35097],{"class":207},[162,46208,604],{"class":168},[162,46210,35116],{"class":207},[162,46212,3745],{"class":172},[162,46214,607],{"class":207},[162,46216,35123],{"class":168},[162,46218,46219,46221,46223,46225,46227,46229],{"class":164,"line":3072},[162,46220,35128],{"class":168},[162,46222,173],{"class":172},[162,46224,35133],{"class":168},[162,46226,34618],{"class":671},[162,46228,173],{"class":172},[162,46230,34623],{"class":168},[162,46232,46233,46235,46237,46239],{"class":164,"line":3077},[162,46234,35144],{"class":671},[162,46236,173],{"class":172},[162,46238,3498],{"class":207},[162,46240,1735],{"class":168},[162,46242,46243,46245,46247,46249],{"class":164,"line":3100},[162,46244,35156],{"class":671},[162,46246,173],{"class":172},[162,46248,247],{"class":207},[162,46250,1735],{"class":168},[162,46252,46253],{"class":164,"line":3140},[162,46254,35167],{"class":361},[162,46256,46257,46259,46261,46263],{"class":164,"line":4878},[162,46258,35172],{"class":671},[162,46260,173],{"class":172},[162,46262,3687],{"class":207},[162,46264,434],{"class":168},[162,46266,46267,46269,46271,46273,46275,46277],{"class":164,"line":4883},[162,46268,35183],{"class":168},[162,46270,173],{"class":172},[162,46272,34615],{"class":168},[162,46274,34618],{"class":671},[162,46276,173],{"class":172},[162,46278,35194],{"class":168},[162,46280,46281,46283,46285,46287],{"class":164,"line":4897},[162,46282,35199],{"class":671},[162,46284,173],{"class":172},[162,46286,3498],{"class":207},[162,46288,1735],{"class":168},[162,46290,46291,46293,46295,46297],{"class":164,"line":4902},[162,46292,35210],{"class":671},[162,46294,173],{"class":172},[162,46296,247],{"class":207},[162,46298,1735],{"class":168},[162,46300,46301,46303,46305,46307],{"class":164,"line":5694},[162,46302,35221],{"class":671},[162,46304,173],{"class":172},[162,46306,3687],{"class":207},[162,46308,434],{"class":168},[162,46310,46311,46313],{"class":164,"line":5708},[162,46312,7203],{"class":172},[162,46314,35234],{"class":168},[162,46316,46317],{"class":164,"line":5716},[162,46318,301],{"emptyLinePlaceholder":300},[162,46320,46321],{"class":164,"line":5721},[162,46322,35243],{"class":361},[162,46324,46325],{"class":164,"line":5727},[162,46326,35248],{"class":361},[162,46328,46329],{"class":164,"line":5733},[162,46330,301],{"emptyLinePlaceholder":300},[162,46332,46333],{"class":164,"line":5738},[162,46334,35257],{"class":361},[162,46336,46337,46339,46341],{"class":164,"line":11052},[162,46338,35026],{"class":172},[162,46340,35264],{"class":5082},[162,46342,35267],{"class":168},[162,46344,46345,46347,46349,46351,46353,46355,46357,46359,46361],{"class":164,"line":11076},[162,46346,34321],{"class":168},[162,46348,173],{"class":172},[162,46350,33536],{"class":168},[162,46352,34328],{"class":179},[162,46354,4828],{"class":172},[162,46356,34333],{"class":168},[162,46358,2313],{"class":172},[162,46360,35286],{"class":179},[162,46362,434],{"class":168},[162,46364,46365],{"class":164,"line":11081},[162,46366,301],{"emptyLinePlaceholder":300},[162,46368,46369],{"class":164,"line":11087},[162,46370,301],{"emptyLinePlaceholder":300},[162,46372,46373],{"class":164,"line":11114},[162,46374,35301],{"class":361},[162,46376,46377],{"class":164,"line":11119},[162,46378,35306],{"class":361},[162,46380,46381],{"class":164,"line":11125},[162,46382,35311],{"class":361},[162,46384,46385,46387,46389,46391,46393,46395,46397],{"class":164,"line":11137},[162,46386,35316],{"class":168},[162,46388,173],{"class":172},[162,46390,35321],{"class":168},[162,46392,35324],{"class":671},[162,46394,173],{"class":172},[162,46396,35329],{"class":207},[162,46398,434],{"class":168},[162,46400,46401],{"class":164,"line":11149},[162,46402,301],{"emptyLinePlaceholder":300},[162,46404,46405],{"class":164,"line":11161},[162,46406,35340],{"class":361},[162,46408,46409,46411,46413],{"class":164,"line":12816},[162,46410,35345],{"class":168},[162,46412,173],{"class":172},[162,46414,35350],{"class":168},[162,46416,46417],{"class":164,"line":12841},[162,46418,301],{"emptyLinePlaceholder":300},[162,46420,46421],{"class":164,"line":12864},[162,46422,35359],{"class":361},[162,46424,46425,46427,46429],{"class":164,"line":12888},[162,46426,34373],{"class":168},[162,46428,173],{"class":172},[162,46430,35368],{"class":168},[162,46432,46433],{"class":164,"line":12893},[162,46434,35373],{"class":361},[162,46436,46437],{"class":164,"line":12898},[162,46438,35378],{"class":361},[162,46440,46441],{"class":164,"line":12903},[162,46442,35383],{"class":361},[162,46444,46445,46447,46449],{"class":164,"line":12912},[162,46446,35388],{"class":168},[162,46448,173],{"class":172},[162,46450,35393],{"class":168},[162,46452,46453],{"class":164,"line":12917},[162,46454,301],{"emptyLinePlaceholder":300},[162,46456,46457],{"class":164,"line":12923},[162,46458,301],{"emptyLinePlaceholder":300},[162,46460,46461],{"class":164,"line":12944},[162,46462,35406],{"class":361},[162,46464,46465],{"class":164,"line":12950},[162,46466,35411],{"class":361},[162,46468,46469,46471,46473],{"class":164,"line":12964},[162,46470,35416],{"class":168},[162,46472,173],{"class":172},[162,46474,35421],{"class":207},[162,46476,46477],{"class":164,"line":12970},[162,46478,35426],{"class":361},[162,46480,46481,46483,46485],{"class":164,"line":12997},[162,46482,35431],{"class":168},[162,46484,173],{"class":172},[162,46486,35436],{"class":168},[162,46488,46489],{"class":164,"line":13006},[162,46490,35441],{"class":361},[162,46492,46493,46495,46497],{"class":164,"line":13012},[162,46494,35446],{"class":168},[162,46496,173],{"class":172},[162,46498,35436],{"class":168},[162,46500,46501],{"class":164,"line":13020},[162,46502,35455],{"class":361},[162,46504,46505,46507,46509],{"class":164,"line":13025},[162,46506,35460],{"class":168},[162,46508,173],{"class":172},[162,46510,35436],{"class":168},[162,46512,46513],{"class":164,"line":19695},[162,46514,35469],{"class":361},[162,46516,46517,46519,46521],{"class":164,"line":19701},[162,46518,35474],{"class":168},[162,46520,173],{"class":172},[162,46522,35436],{"class":168},[162,46524,46525],{"class":164,"line":19724},[162,46526,301],{"emptyLinePlaceholder":300},[162,46528,46529],{"class":164,"line":19730},[162,46530,35487],{"class":361},[162,46532,46533,46535,46537],{"class":164,"line":19753},[162,46534,35492],{"class":168},[162,46536,173],{"class":172},[162,46538,35497],{"class":168},[162,46540,46541],{"class":164,"line":19767},[162,46542,301],{"emptyLinePlaceholder":300},[162,46544,46545],{"class":164,"line":19787},[162,46546,301],{"emptyLinePlaceholder":300},[162,46548,46549],{"class":164,"line":19793},[162,46550,35510],{"class":361},[162,46552,46553,46555,46557,46559,46561],{"class":164,"line":19804},[162,46554,6315],{"class":172},[162,46556,35517],{"class":168},[162,46558,814],{"class":172},[162,46560,2647],{"class":207},[162,46562,35524],{"class":168},[162,46564,46565,46567,46569,46571,46573,46575,46577,46579,46581,46583,46585],{"class":164,"line":19827},[162,46566,2300],{"class":207},[162,46568,604],{"class":168},[162,46570,35533],{"class":179},[162,46572,1532],{"class":207},[162,46574,946],{"class":179},[162,46576,1532],{"class":207},[162,46578,979],{"class":179},[162,46580,35544],{"class":168},[162,46582,353],{"class":172},[162,46584,208],{"class":207},[162,46586,586],{"class":168},[162,46588,46589,46591,46593,46595,46597,46599],{"class":164,"line":19849},[162,46590,2300],{"class":207},[162,46592,604],{"class":168},[162,46594,35559],{"class":179},[162,46596,3745],{"class":172},[162,46598,1006],{"class":207},[162,46600,434],{"class":168},[162,46602,46603],{"class":164,"line":19854},[162,46604,301],{"emptyLinePlaceholder":300},[162,46606,46607],{"class":164,"line":19860},[162,46608,35574],{"class":361},[162,46610,46611],{"class":164,"line":19874},[162,46612,35579],{"class":361},[162,46614,46615,46617,46619],{"class":164,"line":19887},[162,46616,35584],{"class":168},[162,46618,173],{"class":172},[162,46620,35421],{"class":207},[162,46622,46623],{"class":164,"line":19892},[162,46624,35593],{"class":361},[162,46626,46627,46629,46631],{"class":164,"line":19906},[162,46628,35598],{"class":168},[162,46630,173],{"class":172},[162,46632,6200],{"class":207},[162,46634,46635],{"class":164,"line":19911},[162,46636,35607],{"class":361},[162,46638,46639,46641,46643],{"class":164,"line":19917},[162,46640,35612],{"class":168},[162,46642,173],{"class":172},[162,46644,35421],{"class":207},[162,46646,46647],{"class":164,"line":19922},[162,46648,35621],{"class":361},[162,46650,46651,46653,46655],{"class":164,"line":19936},[162,46652,35626],{"class":168},[162,46654,173],{"class":172},[162,46656,6200],{"class":207},[162,46658,46659],{"class":164,"line":19941},[162,46660,35635],{"class":361},[162,46662,46663,46665,46667],{"class":164,"line":19946},[162,46664,35640],{"class":168},[162,46666,173],{"class":172},[162,46668,6200],{"class":207},[162,46670,46671],{"class":164,"line":19960},[162,46672,35649],{"class":361},[162,46674,46675,46677,46679],{"class":164,"line":19972},[162,46676,35654],{"class":168},[162,46678,173],{"class":172},[162,46680,6200],{"class":207},[162,46682,46683],{"class":164,"line":19977},[162,46684,35663],{"class":361},[162,46686,46687,46689,46691,46693,46695],{"class":164,"line":19990},[162,46688,6517],{"class":172},[162,46690,34682],{"class":168},[162,46692,814],{"class":172},[162,46694,845],{"class":207},[162,46696,35676],{"class":168},[162,46698,46699],{"class":164,"line":19995},[162,46700,35681],{"class":361},[162,46702,46703,46705,46707],{"class":164,"line":20000},[162,46704,35686],{"class":168},[162,46706,173],{"class":172},[162,46708,35691],{"class":168},[162,46710,46711],{"class":164,"line":20005},[162,46712,35696],{"class":361},[162,46714,46715,46717,46719],{"class":164,"line":20018},[162,46716,35701],{"class":168},[162,46718,173],{"class":172},[162,46720,35706],{"class":168},[162,46722,46723],{"class":164,"line":20023},[162,46724,35712],{"class":361},[162,46726,46727],{"class":164,"line":35709},[162,46728,35718],{"class":168},[162,46730,46731],{"class":164,"line":35715},[162,46732,35724],{"class":361},[162,46734,46735],{"class":164,"line":35721},[162,46736,35730],{"class":361},[162,46738,46739,46741,46743],{"class":164,"line":35727},[162,46740,35736],{"class":168},[162,46742,173],{"class":172},[162,46744,35741],{"class":168},[162,46746,46747],{"class":164,"line":35733},[162,46748,35747],{"class":361},[162,46750,46751,46753,46755,46757,46759,46761,46763],{"class":164,"line":35744},[162,46752,35753],{"class":168},[162,46754,173],{"class":172},[162,46756,35758],{"class":168},[162,46758,35761],{"class":671},[162,46760,173],{"class":172},[162,46762,208],{"class":207},[162,46764,434],{"class":168},[162,46766,46767],{"class":164,"line":35750},[162,46768,35773],{"class":361},[162,46770,46771,46773,46775],{"class":164,"line":35770},[162,46772,35779],{"class":168},[162,46774,173],{"class":172},[162,46776,35784],{"class":168},[162,46778,46779],{"class":164,"line":35776},[162,46780,35790],{"class":361},[162,46782,46783],{"class":164,"line":35787},[162,46784,35796],{"class":168},[162,46786,46787],{"class":164,"line":35793},[162,46788,35802],{"class":361},[162,46790,46791],{"class":164,"line":35799},[162,46792,35808],{"class":168},[162,46794,46795],{"class":164,"line":35805},[162,46796,35814],{"class":361},[162,46798,46799],{"class":164,"line":35811},[162,46800,35820],{"class":168},[162,46802,46803],{"class":164,"line":35817},[162,46804,35826],{"class":361},[162,46806,46807,46809,46811,46813,46815,46817,46819],{"class":164,"line":35823},[162,46808,35832],{"class":168},[162,46810,926],{"class":172},[162,46812,35837],{"class":168},[162,46814,3745],{"class":172},[162,46816,35842],{"class":168},[162,46818,312],{"class":207},[162,46820,434],{"class":168},[162,46822,46823],{"class":164,"line":35829},[162,46824,35852],{"class":361},[162,46826,46827,46829,46831,46833,46835],{"class":164,"line":35849},[162,46828,35858],{"class":168},[162,46830,926],{"class":172},[162,46832,35863],{"class":168},[162,46834,2292],{"class":172},[162,46836,35868],{"class":168},[162,46838,46839],{"class":164,"line":35855},[162,46840,35874],{"class":361},[162,46842,46843,46845,46847,46849,46851],{"class":164,"line":35871},[162,46844,35880],{"class":168},[162,46846,926],{"class":172},[162,46848,35842],{"class":168},[162,46850,312],{"class":207},[162,46852,434],{"class":168},[162,46854,46855],{"class":164,"line":35877},[162,46856,35894],{"class":361},[162,46858,46859,46861,46863,46865,46867],{"class":164,"line":35891},[162,46860,6517],{"class":172},[162,46862,35902],{"class":168},[162,46864,814],{"class":172},[162,46866,845],{"class":207},[162,46868,35909],{"class":168},[162,46870,46871],{"class":164,"line":35897},[162,46872,35915],{"class":361},[162,46874,46875,46877,46879],{"class":164,"line":35912},[162,46876,35686],{"class":168},[162,46878,173],{"class":172},[162,46880,35691],{"class":168},[162,46882,46883],{"class":164,"line":35918},[162,46884,35930],{"class":361},[162,46886,46887,46889,46891],{"class":164,"line":35927},[162,46888,35701],{"class":168},[162,46890,173],{"class":172},[162,46892,35706],{"class":168},[162,46894,46895],{"class":164,"line":35933},[162,46896,35945],{"class":361},[162,46898,46899],{"class":164,"line":35942},[162,46900,35951],{"class":168},[162,46902,46903],{"class":164,"line":35948},[162,46904,39431],{"class":361},[162,46906,46907,46909],{"class":164,"line":35954},[162,46908,35957],{"class":172},[162,46910,35960],{"class":168},[162,46912,46913],{"class":164,"line":35963},[162,46914,35966],{"class":361},[162,46916,46917,46919,46921],{"class":164,"line":35969},[162,46918,39446],{"class":168},[162,46920,173],{"class":172},[162,46922,35741],{"class":168},[162,46924,46925],{"class":164,"line":35980},[162,46926,35983],{"class":361},[162,46928,46929,46931,46933,46935,46937,46939,46941],{"class":164,"line":35986},[162,46930,39459],{"class":168},[162,46932,173],{"class":172},[162,46934,35758],{"class":168},[162,46936,35761],{"class":671},[162,46938,173],{"class":172},[162,46940,208],{"class":207},[162,46942,434],{"class":168},[162,46944,46945],{"class":164,"line":36005},[162,46946,36008],{"class":361},[162,46948,46949,46951,46953],{"class":164,"line":36011},[162,46950,39480],{"class":168},[162,46952,173],{"class":172},[162,46954,35784],{"class":168},[162,46956,46957],{"class":164,"line":36022},[162,46958,36025],{"class":361},[162,46960,46961,46963,46965,46967,46969,46971,46973],{"class":164,"line":36028},[162,46962,39493],{"class":168},[162,46964,926],{"class":172},[162,46966,39498],{"class":168},[162,46968,3745],{"class":172},[162,46970,35842],{"class":168},[162,46972,312],{"class":207},[162,46974,434],{"class":168},[162,46976,46977,46979,46981,46983,46985],{"class":164,"line":36048},[162,46978,39511],{"class":168},[162,46980,926],{"class":172},[162,46982,35863],{"class":168},[162,46984,2292],{"class":172},[162,46986,35868],{"class":168},[162,46988,46989],{"class":164,"line":36064},[162,46990,39524],{"class":361},[162,46992,46993,46995,46997,46999,47001],{"class":164,"line":36070},[162,46994,39529],{"class":168},[162,46996,926],{"class":172},[162,46998,35842],{"class":168},[162,47000,312],{"class":207},[162,47002,434],{"class":168},[162,47004,47005],{"class":164,"line":36084},[162,47006,36087],{"class":361},[162,47008,47009],{"class":164,"line":36090},[162,47010,36093],{"class":361},[162,47012,47013,47015,47017],{"class":164,"line":36096},[162,47014,36099],{"class":168},[162,47016,946],{"class":172},[162,47018,36104],{"class":168},[162,47020,47021],{"class":164,"line":36107},[162,47022,36110],{"class":361},[162,47024,47025],{"class":164,"line":36113},[162,47026,36116],{"class":361},[162,47028,47029,47031,47033],{"class":164,"line":36119},[162,47030,36122],{"class":168},[162,47032,946],{"class":172},[162,47034,36104],{"class":168},[162,47036,47037],{"class":164,"line":36129},[162,47038,36132],{"class":361},[162,47040,47041,47043,47045],{"class":164,"line":36135},[162,47042,36138],{"class":168},[162,47044,946],{"class":172},[162,47046,36143],{"class":168},[162,47048,47049],{"class":164,"line":36146},[162,47050,36149],{"class":361},[162,47052,47053,47055,47057],{"class":164,"line":36152},[162,47054,36155],{"class":168},[162,47056,946],{"class":172},[162,47058,36143],{"class":168},[162,47060,47061],{"class":164,"line":36162},[162,47062,301],{"emptyLinePlaceholder":300},[162,47064,47065],{"class":164,"line":36167},[162,47066,36170],{"class":361},[162,47068,47069,47071,47073,47075,47077,47079,47081,47083,47085,47087,47089,47091,47093,47095,47097,47099,47101,47103,47105,47107],{"class":164,"line":36173},[162,47070,2300],{"class":207},[162,47072,604],{"class":168},[162,47074,6706],{"class":179},[162,47076,1532],{"class":207},[162,47078,36184],{"class":179},[162,47080,967],{"class":207},[162,47082,36189],{"class":172},[162,47084,976],{"class":207},[162,47086,36194],{"class":179},[162,47088,967],{"class":207},[162,47090,36189],{"class":172},[162,47092,976],{"class":207},[162,47094,6706],{"class":179},[162,47096,36205],{"class":168},[162,47098,353],{"class":172},[162,47100,208],{"class":207},[162,47102,36212],{"class":168},[162,47104,353],{"class":172},[162,47106,208],{"class":207},[162,47108,36219],{"class":168},[162,47110,47111,47113,47115,47117,47119,47121,47123,47125,47127,47129,47131,47133,47135,47137,47139,47141,47143,47145,47147,47149],{"class":164,"line":36222},[162,47112,2300],{"class":207},[162,47114,604],{"class":168},[162,47116,6706],{"class":179},[162,47118,1532],{"class":207},[162,47120,36233],{"class":179},[162,47122,967],{"class":207},[162,47124,36189],{"class":172},[162,47126,976],{"class":207},[162,47128,36242],{"class":179},[162,47130,967],{"class":207},[162,47132,36189],{"class":172},[162,47134,976],{"class":207},[162,47136,6706],{"class":179},[162,47138,36253],{"class":168},[162,47140,353],{"class":172},[162,47142,208],{"class":207},[162,47144,36260],{"class":168},[162,47146,353],{"class":172},[162,47148,208],{"class":207},[162,47150,36219],{"class":168},[162,47152,47153],{"class":164,"line":36269},[162,47154,301],{"emptyLinePlaceholder":300},[162,47156,47157],{"class":164,"line":36274},[162,47158,36277],{"class":361},[162,47160,47161,47163,47165,47167,47169,47171,47173],{"class":164,"line":36280},[162,47162,5614],{"class":172},[162,47164,36285],{"class":168},[162,47166,353],{"class":172},[162,47168,208],{"class":207},[162,47170,3120],{"class":168},[162,47172,3000],{"class":172},[162,47174,36296],{"class":168},[162,47176,47177],{"class":164,"line":36299},[162,47178,36302],{"class":361},[162,47180,47181,47183,47185,47187,47189,47191,47193],{"class":164,"line":36305},[162,47182,36308],{"class":168},[162,47184,3354],{"class":207},[162,47186,173],{"class":172},[162,47188,36315],{"class":168},[162,47190,353],{"class":172},[162,47192,208],{"class":207},[162,47194,194],{"class":168},[162,47196,47197],{"class":164,"line":36324},[162,47198,36327],{"class":361},[162,47200,47201],{"class":164,"line":36330},[162,47202,36333],{"class":361},[162,47204,47205,47207,47209],{"class":164,"line":36336},[162,47206,36339],{"class":168},[162,47208,173],{"class":172},[162,47210,35393],{"class":168},[162,47212,47213],{"class":164,"line":36346},[162,47214,301],{"emptyLinePlaceholder":300},[162,47216,47217],{"class":164,"line":36351},[162,47218,36354],{"class":361},[162,47220,47221,47223,47225,47227,47229],{"class":164,"line":36357},[162,47222,36360],{"class":168},[162,47224,173],{"class":172},[162,47226,36365],{"class":168},[162,47228,353],{"class":172},[162,47230,36370],{"class":168},[162,47232,47233,47235,47237,47239,47241,47243,47245,47247,47249,47251,47253,47255,47257,47259,47261,47263,47265,47267],{"class":164,"line":36373},[162,47234,2300],{"class":207},[162,47236,604],{"class":168},[162,47238,36380],{"class":179},[162,47240,967],{"class":207},[162,47242,36385],{"class":172},[162,47244,976],{"class":207},[162,47246,3833],{"class":179},[162,47248,967],{"class":207},[162,47250,36385],{"class":172},[162,47252,976],{"class":207},[162,47254,36398],{"class":179},[162,47256,36401],{"class":168},[162,47258,36404],{"class":172},[162,47260,4184],{"class":207},[162,47262,36409],{"class":168},[162,47264,2708],{"class":172},[162,47266,4184],{"class":207},[162,47268,586],{"class":168},[162,47270,47271],{"class":164,"line":36418},[162,47272,39808],{"class":361},[162,47274,47275],{"class":164,"line":36424},[162,47276,39813],{"class":361},[162,47278,47279,47281,47283],{"class":164,"line":36430},[162,47280,39818],{"class":168},[162,47282,36442],{"class":179},[162,47284,434],{"class":168},[162,47286,47287],{"class":164,"line":36436},[162,47288,36462],{"class":361},[162,47290,47291,47293,47295,47297,47299,47301],{"class":164,"line":36447},[162,47292,36468],{"class":168},[162,47294,173],{"class":172},[162,47296,36473],{"class":168},[162,47298,36476],{"class":671},[162,47300,173],{"class":172},[162,47302,4685],{"class":168},[162,47304,47305,47307,47309,47311],{"class":164,"line":36453},[162,47306,36486],{"class":179},[162,47308,1332],{"class":168},[162,47310,36491],{"class":207},[162,47312,36494],{"class":168},[162,47314,47315,47317],{"class":164,"line":36459},[162,47316,36500],{"class":179},[162,47318,36503],{"class":168},[162,47320,47321,47323],{"class":164,"line":36465},[162,47322,36509],{"class":179},[162,47324,36512],{"class":168},[162,47326,47327,47329],{"class":164,"line":36483},[162,47328,36518],{"class":179},[162,47330,36521],{"class":168},[162,47332,47333,47335],{"class":164,"line":36497},[162,47334,36527],{"class":179},[162,47336,36530],{"class":168},[162,47338,47339],{"class":164,"line":36506},[162,47340,36536],{"class":168},[162,47342,47343],{"class":164,"line":36515},[162,47344,36542],{"class":361},[162,47346,47347,47349],{"class":164,"line":36524},[162,47348,7203],{"class":172},[162,47350,36550],{"class":168},[162,47352,47353],{"class":164,"line":36533},[162,47354,301],{"emptyLinePlaceholder":300},[162,47356,47357],{"class":164,"line":36539},[162,47358,36561],{"class":361},[162,47360,47361,47363,47365],{"class":164,"line":36545},[162,47362,35026],{"class":172},[162,47364,36569],{"class":5082},[162,47366,36572],{"class":168},[162,47368,47369],{"class":164,"line":36553},[162,47370,36578],{"class":361},[162,47372,47373,47375,47377,47379,47381,47383,47385,47387],{"class":164,"line":36558},[162,47374,36584],{"class":168},[162,47376,34772],{"class":671},[162,47378,173],{"class":172},[162,47380,604],{"class":168},[162,47382,3788],{"class":207},[162,47384,3670],{"class":168},[162,47386,223],{"class":207},[162,47388,586],{"class":168},[162,47390,47391],{"class":164,"line":36564},[162,47392,36604],{"class":361},[162,47394,47395],{"class":164,"line":36575},[162,47396,36610],{"class":361},[162,47398,47399],{"class":164,"line":36581},[162,47400,36616],{"class":361},[162,47402,47403,47405,47407,47409,47411,47413,47415],{"class":164,"line":36601},[162,47404,34806],{"class":168},[162,47406,208],{"class":207},[162,47408,3670],{"class":168},[162,47410,213],{"class":207},[162,47412,3670],{"class":168},[162,47414,208],{"class":207},[162,47416,434],{"class":168},[162,47418,47419],{"class":164,"line":36607},[162,47420,36639],{"class":361},[162,47422,47423],{"class":164,"line":36613},[162,47424,36645],{"class":361},[162,47426,47427],{"class":164,"line":36619},[162,47428,36651],{"class":361},[162,47430,47431],{"class":164,"line":36636},[162,47432,36657],{"class":361},[162,47434,47435],{"class":164,"line":36642},[162,47436,36663],{"class":361},[162,47438,47439,47441,47443,47445,47447,47449,47451,47453,47455],{"class":164,"line":36648},[162,47440,36669],{"class":168},[162,47442,36672],{"class":179},[162,47444,36675],{"class":168},[162,47446,36678],{"class":179},[162,47448,3670],{"class":168},[162,47450,36683],{"class":671},[162,47452,173],{"class":172},[162,47454,36688],{"class":179},[162,47456,434],{"class":168},[162,47458,47459,47461,47463,47465,47467,47469,47471,47473,47475],{"class":164,"line":36654},[162,47460,36669],{"class":168},[162,47462,36672],{"class":179},[162,47464,36700],{"class":168},[162,47466,36703],{"class":179},[162,47468,3670],{"class":168},[162,47470,36683],{"class":671},[162,47472,173],{"class":172},[162,47474,36712],{"class":179},[162,47476,434],{"class":168},[162,47478,47479],{"class":164,"line":36660},[162,47480,36720],{"class":361},[162,47482,47483],{"class":164,"line":36666},[162,47484,36726],{"class":168},[162,47486,47487],{"class":164,"line":36693},[162,47488,36732],{"class":361},[162,47490,47491,47493,47495],{"class":164,"line":36717},[162,47492,36738],{"class":168},[162,47494,36741],{"class":179},[162,47496,434],{"class":168},[162,47498,47499,47501,47503],{"class":164,"line":36723},[162,47500,36749],{"class":168},[162,47502,36752],{"class":179},[162,47504,434],{"class":168},[162,47506,47507],{"class":164,"line":36729},[162,47508,36760],{"class":361},[162,47510,47511,47513,47515,47517,47519,47521,47523],{"class":164,"line":36735},[162,47512,34806],{"class":168},[162,47514,208],{"class":207},[162,47516,3670],{"class":168},[162,47518,213],{"class":207},[162,47520,3670],{"class":168},[162,47522,213],{"class":207},[162,47524,434],{"class":168},[162,47526,47527,47529,47531,47533,47535,47537,47539,47541,47543],{"class":164,"line":36746},[162,47528,36669],{"class":168},[162,47530,36672],{"class":179},[162,47532,36787],{"class":168},[162,47534,36678],{"class":179},[162,47536,3670],{"class":168},[162,47538,36683],{"class":671},[162,47540,173],{"class":172},[162,47542,36798],{"class":179},[162,47544,434],{"class":168},[162,47546,47547,47549,47551,47553,47555,47557,47559,47561,47563],{"class":164,"line":36757},[162,47548,36669],{"class":168},[162,47550,36672],{"class":179},[162,47552,36810],{"class":168},[162,47554,36703],{"class":179},[162,47556,3670],{"class":168},[162,47558,36683],{"class":671},[162,47560,173],{"class":172},[162,47562,36821],{"class":179},[162,47564,434],{"class":168},[162,47566,47567],{"class":164,"line":36763},[162,47568,36829],{"class":361},[162,47570,47571],{"class":164,"line":36780},[162,47572,36726],{"class":168},[162,47574,47575,47577,47579],{"class":164,"line":36803},[162,47576,36738],{"class":168},[162,47578,36672],{"class":179},[162,47580,434],{"class":168},[162,47582,47583,47585,47587],{"class":164,"line":36826},[162,47584,36749],{"class":168},[162,47586,36851],{"class":179},[162,47588,434],{"class":168},[162,47590,47591],{"class":164,"line":36832},[162,47592,36859],{"class":168},[162,47594,47595],{"class":164,"line":36837},[162,47596,301],{"emptyLinePlaceholder":300},[162,47598,47599],{"class":164,"line":36846},[162,47600,36870],{"class":361},[162,47602,47603,47605,47607,47609,47611],{"class":164,"line":36856},[162,47604,2703],{"class":172},[162,47606,34304],{"class":207},[162,47608,2292],{"class":172},[162,47610,34309],{"class":179},[162,47612,2316],{"class":168},[162,47614,47615],{"class":164,"line":36862},[162,47616,36889],{"class":361},[162,47618,47619,47622,47624],{"class":164,"line":36867},[162,47620,47621],{"class":168},"    GoogLeNet",[162,47623,173],{"class":172},[162,47625,47626],{"class":168},"GoogLeNet(Inception)\n",[162,47628,47629,47631,47633],{"class":164,"line":36873},[162,47630,36906],{"class":168},[162,47632,173],{"class":172},[162,47634,36911],{"class":168},[162,47636,47637,47639,47641,47644,47646,47648,47650],{"class":164,"line":36886},[162,47638,36468],{"class":168},[162,47640,173],{"class":172},[162,47642,47643],{"class":168},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[162,47645,36924],{"class":671},[162,47647,173],{"class":172},[162,47649,4225],{"class":207},[162,47651,434],{"class":168},[162,47653,47654],{"class":164,"line":36892},[162,47655,36936],{"class":168},[1452,47657,47658],{"start":228},[1455,47659,43649],{},[153,47661,47663],{"className":155,"code":47662,"language":157,"meta":158,"style":158},"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",[71,47664,47665,47671,47681,47691,47695,47705,47716,47720,47724,47728,47736,47752,47762,47778,47788,47802,47806,47816,47826,47836,47842,47846,47850,47858,47862,47878,47886,47890,47894,47902,47910,47914,47918,47922,47926,47932,47936,47946,47954,47962,47966,47970,47974,47982,47986,48002,48006,48010,48014,48026,48030,48042,48046,48050,48062,48066,48076,48080,48084,48096,48100,48108,48112,48116,48124,48128,48136,48140,48144,48148,48152,48156,48172,48180,48184,48188,48236,48242,48246,48256,48264,48272,48276,48280,48284,48288,48296,48300,48316,48320,48328,48336],{"__ignoreMap":158},[162,47666,47667,47669],{"class":164,"line":165},[162,47668,33478],{"class":172},[162,47670,33481],{"class":168},[162,47672,47673,47675,47677,47679],{"class":164,"line":197},[162,47674,33478],{"class":172},[162,47676,34498],{"class":168},[162,47678,34466],{"class":172},[162,47680,34503],{"class":168},[162,47682,47683,47685,47687,47689],{"class":164,"line":228},[162,47684,33821],{"class":172},[162,47686,34481],{"class":168},[162,47688,33478],{"class":172},[162,47690,34486],{"class":168},[162,47692,47693],{"class":164,"line":252},[162,47694,36997],{"class":361},[162,47696,47697,47699,47701,47703],{"class":164,"line":328},[162,47698,33821],{"class":172},[162,47700,34451],{"class":168},[162,47702,33478],{"class":172},[162,47704,34456],{"class":168},[162,47706,47707,47709,47711,47713],{"class":164,"line":466},[162,47708,33821],{"class":172},[162,47710,34993],{"class":168},[162,47712,33478],{"class":172},[162,47714,47715],{"class":168}," GoogLeNet,Inception\n",[162,47717,47718],{"class":164,"line":471},[162,47719,301],{"emptyLinePlaceholder":300},[162,47721,47722],{"class":164,"line":687},[162,47723,301],{"emptyLinePlaceholder":300},[162,47725,47726],{"class":164,"line":692},[162,47727,37026],{"class":361},[162,47729,47730,47732,47734],{"class":164,"line":698},[162,47731,35026],{"class":172},[162,47733,37033],{"class":5082},[162,47735,35032],{"class":168},[162,47737,47738,47740,47742,47744,47746,47748,47750],{"class":164,"line":2955},[162,47739,37040],{"class":168},[162,47741,173],{"class":172},[162,47743,34538],{"class":168},[162,47745,34541],{"class":671},[162,47747,173],{"class":172},[162,47749,34546],{"class":179},[162,47751,1735],{"class":168},[162,47753,47754,47756,47758,47760],{"class":164,"line":2960},[162,47755,37057],{"class":671},[162,47757,173],{"class":172},[162,47759,37062],{"class":207},[162,47761,1735],{"class":168},[162,47763,47764,47766,47768,47770,47772,47774,47776],{"class":164,"line":2971},[162,47765,37069],{"class":671},[162,47767,173],{"class":172},[162,47769,34574],{"class":168},[162,47771,34577],{"class":671},[162,47773,173],{"class":172},[162,47775,38524],{"class":207},[162,47777,34585],{"class":168},[162,47779,47780,47782,47784,47786],{"class":164,"line":2984},[162,47781,37086],{"class":671},[162,47783,173],{"class":172},[162,47785,247],{"class":207},[162,47787,434],{"class":168},[162,47789,47790,47792,47794,47796,47798,47800],{"class":164,"line":2989},[162,47791,37097],{"class":168},[162,47793,173],{"class":172},[162,47795,34615],{"class":168},[162,47797,34618],{"class":671},[162,47799,173],{"class":172},[162,47801,37108],{"class":168},[162,47803,47804],{"class":164,"line":3011},[162,47805,37113],{"class":361},[162,47807,47808,47810,47812,47814],{"class":164,"line":3022},[162,47809,37118],{"class":671},[162,47811,173],{"class":172},[162,47813,208],{"class":207},[162,47815,1735],{"class":168},[162,47817,47818,47820,47822,47824],{"class":164,"line":3027},[162,47819,37129],{"class":671},[162,47821,173],{"class":172},[162,47823,247],{"class":207},[162,47825,1735],{"class":168},[162,47827,47828,47830,47832,47834],{"class":164,"line":3046},[162,47829,37140],{"class":671},[162,47831,173],{"class":172},[162,47833,312],{"class":207},[162,47835,434],{"class":168},[162,47837,47838,47840],{"class":164,"line":3052},[162,47839,7203],{"class":172},[162,47841,37153],{"class":168},[162,47843,47844],{"class":164,"line":3057},[162,47845,301],{"emptyLinePlaceholder":300},[162,47847,47848],{"class":164,"line":3072},[162,47849,37162],{"class":361},[162,47851,47852,47854,47856],{"class":164,"line":3077},[162,47853,35026],{"class":172},[162,47855,37169],{"class":5082},[162,47857,37172],{"class":168},[162,47859,47860],{"class":164,"line":3100},[162,47861,37177],{"class":361},[162,47863,47864,47866,47868,47870,47872,47874,47876],{"class":164,"line":3140},[162,47865,34321],{"class":168},[162,47867,173],{"class":172},[162,47869,34328],{"class":179},[162,47871,4828],{"class":172},[162,47873,34333],{"class":168},[162,47875,2313],{"class":172},[162,47877,37194],{"class":179},[162,47879,47880,47882,47884],{"class":164,"line":4878},[162,47881,34373],{"class":168},[162,47883,173],{"class":172},[162,47885,35368],{"class":168},[162,47887,47888],{"class":164,"line":4883},[162,47889,301],{"emptyLinePlaceholder":300},[162,47891,47892],{"class":164,"line":4897},[162,47893,37211],{"class":361},[162,47895,47896,47898,47900],{"class":164,"line":4902},[162,47897,37216],{"class":168},[162,47899,173],{"class":172},[162,47901,35421],{"class":207},[162,47903,47904,47906,47908],{"class":164,"line":5694},[162,47905,37225],{"class":168},[162,47907,173],{"class":172},[162,47909,6200],{"class":207},[162,47911,47912],{"class":164,"line":5708},[162,47913,301],{"emptyLinePlaceholder":300},[162,47915,47916],{"class":164,"line":5716},[162,47917,37238],{"class":361},[162,47919,47920],{"class":164,"line":5721},[162,47921,37243],{"class":361},[162,47923,47924],{"class":164,"line":5727},[162,47925,37248],{"class":361},[162,47927,47928,47930],{"class":164,"line":5733},[162,47929,37253],{"class":172},[162,47931,35960],{"class":168},[162,47933,47934],{"class":164,"line":5738},[162,47935,37260],{"class":361},[162,47937,47938,47940,47942,47944],{"class":164,"line":11052},[162,47939,6517],{"class":172},[162,47941,37267],{"class":168},[162,47943,814],{"class":172},[162,47945,37272],{"class":168},[162,47947,47948,47950,47952],{"class":164,"line":11076},[162,47949,37277],{"class":168},[162,47951,173],{"class":172},[162,47953,37282],{"class":168},[162,47955,47956,47958,47960],{"class":164,"line":11081},[162,47957,37287],{"class":168},[162,47959,173],{"class":172},[162,47961,37292],{"class":168},[162,47963,47964],{"class":164,"line":11087},[162,47965,37297],{"class":361},[162,47967,47968],{"class":164,"line":11114},[162,47969,35951],{"class":168},[162,47971,47972],{"class":164,"line":11119},[162,47973,37306],{"class":361},[162,47975,47976,47978,47980],{"class":164,"line":11125},[162,47977,35736],{"class":168},[162,47979,173],{"class":172},[162,47981,37315],{"class":168},[162,47983,47984],{"class":164,"line":11137},[162,47985,37320],{"class":361},[162,47987,47988,47990,47992,47994,47996,47998,48000],{"class":164,"line":11149},[162,47989,35753],{"class":168},[162,47991,173],{"class":172},[162,47993,35758],{"class":168},[162,47995,35761],{"class":671},[162,47997,173],{"class":172},[162,47999,208],{"class":207},[162,48001,434],{"class":168},[162,48003,48004],{"class":164,"line":11161},[162,48005,37341],{"class":361},[162,48007,48008],{"class":164,"line":12816},[162,48009,37346],{"class":361},[162,48011,48012],{"class":164,"line":12841},[162,48013,37351],{"class":361},[162,48015,48016,48018,48020,48022,48024],{"class":164,"line":12864},[162,48017,37356],{"class":168},[162,48019,926],{"class":172},[162,48021,35863],{"class":168},[162,48023,2292],{"class":172},[162,48025,37365],{"class":168},[162,48027,48028],{"class":164,"line":12888},[162,48029,37370],{"class":361},[162,48031,48032,48034,48036,48038,48040],{"class":164,"line":12893},[162,48033,37375],{"class":168},[162,48035,926],{"class":172},[162,48037,37380],{"class":168},[162,48039,312],{"class":207},[162,48041,434],{"class":168},[162,48043,48044],{"class":164,"line":12898},[162,48045,301],{"emptyLinePlaceholder":300},[162,48047,48048],{"class":164,"line":12903},[162,48049,37393],{"class":361},[162,48051,48052,48054,48056,48058,48060],{"class":164,"line":12912},[162,48053,37398],{"class":168},[162,48055,173],{"class":172},[162,48057,37403],{"class":168},[162,48059,946],{"class":172},[162,48061,37408],{"class":168},[162,48063,48064],{"class":164,"line":12917},[162,48065,37413],{"class":361},[162,48067,48068,48070,48072,48074],{"class":164,"line":12923},[162,48069,2300],{"class":207},[162,48071,604],{"class":168},[162,48073,37422],{"class":179},[162,48075,37425],{"class":168},[162,48077,48078],{"class":164,"line":12944},[162,48079,301],{"emptyLinePlaceholder":300},[162,48081,48082],{"class":164,"line":12950},[162,48083,37434],{"class":361},[162,48085,48086,48088,48090,48092,48094],{"class":164,"line":12964},[162,48087,2703],{"class":172},[162,48089,34304],{"class":207},[162,48091,2292],{"class":172},[162,48093,34309],{"class":179},[162,48095,2316],{"class":168},[162,48097,48098],{"class":164,"line":12970},[162,48099,37451],{"class":361},[162,48101,48102,48104,48106],{"class":164,"line":12997},[162,48103,34373],{"class":168},[162,48105,173],{"class":172},[162,48107,47626],{"class":168},[162,48109,48110],{"class":164,"line":13006},[162,48111,37464],{"class":361},[162,48113,48114],{"class":164,"line":13012},[162,48115,37469],{"class":361},[162,48117,48118,48120,48122],{"class":164,"line":13020},[162,48119,37474],{"class":168},[162,48121,37477],{"class":179},[162,48123,586],{"class":168},[162,48125,48126],{"class":164,"line":13025},[162,48127,37484],{"class":361},[162,48129,48130,48132,48134],{"class":164,"line":19695},[162,48131,37097],{"class":168},[162,48133,173],{"class":172},[162,48135,37493],{"class":168},[162,48137,48138],{"class":164,"line":19701},[162,48139,37498],{"class":361},[162,48141,48142],{"class":164,"line":19724},[162,48143,37503],{"class":168},[162,48145,48146],{"class":164,"line":19730},[162,48147,301],{"emptyLinePlaceholder":300},[162,48149,48150],{"class":164,"line":19753},[162,48151,37512],{"class":361},[162,48153,48154],{"class":164,"line":19767},[162,48155,37517],{"class":361},[162,48157,48158,48160,48162,48164,48166,48168,48170],{"class":164,"line":19787},[162,48159,34321],{"class":168},[162,48161,173],{"class":172},[162,48163,34328],{"class":179},[162,48165,4828],{"class":172},[162,48167,34333],{"class":168},[162,48169,2313],{"class":172},[162,48171,37194],{"class":179},[162,48173,48174,48176,48178],{"class":164,"line":19793},[162,48175,34373],{"class":168},[162,48177,173],{"class":172},[162,48179,35368],{"class":168},[162,48181,48182],{"class":164,"line":19804},[162,48183,37546],{"class":361},[162,48185,48186],{"class":164,"line":19827},[162,48187,37551],{"class":361},[162,48189,48190,48192,48194,48196,48198,48200,48202,48204,48206,48208,48210,48212,48214,48216,48218,48220,48222,48224,48226,48228,48230,48232,48234],{"class":164,"line":19849},[162,48191,37556],{"class":168},[162,48193,173],{"class":172},[162,48195,4168],{"class":168},[162,48197,37563],{"class":179},[162,48199,3670],{"class":168},[162,48201,37568],{"class":179},[162,48203,3670],{"class":168},[162,48205,37573],{"class":179},[162,48207,3670],{"class":168},[162,48209,37578],{"class":179},[162,48211,3670],{"class":168},[162,48213,37583],{"class":179},[162,48215,3670],{"class":168},[162,48217,37588],{"class":179},[162,48219,3670],{"class":168},[162,48221,37593],{"class":179},[162,48223,3670],{"class":168},[162,48225,37598],{"class":179},[162,48227,3670],{"class":168},[162,48229,37603],{"class":179},[162,48231,3670],{"class":168},[162,48233,37608],{"class":179},[162,48235,194],{"class":168},[162,48237,48238,48240],{"class":164,"line":19854},[162,48239,37253],{"class":172},[162,48241,35960],{"class":168},[162,48243,48244],{"class":164,"line":19860},[162,48245,37621],{"class":361},[162,48247,48248,48250,48252,48254],{"class":164,"line":19874},[162,48249,6517],{"class":172},[162,48251,37628],{"class":168},[162,48253,814],{"class":172},[162,48255,37272],{"class":168},[162,48257,48258,48260,48262],{"class":164,"line":19887},[162,48259,35686],{"class":168},[162,48261,173],{"class":172},[162,48263,35691],{"class":168},[162,48265,48266,48268,48270],{"class":164,"line":19892},[162,48267,35701],{"class":168},[162,48269,173],{"class":172},[162,48271,35706],{"class":168},[162,48273,48274],{"class":164,"line":19906},[162,48275,301],{"emptyLinePlaceholder":300},[162,48277,48278],{"class":164,"line":19911},[162,48279,37657],{"class":361},[162,48281,48282],{"class":164,"line":19917},[162,48283,35951],{"class":168},[162,48285,48286],{"class":164,"line":19922},[162,48287,37666],{"class":361},[162,48289,48290,48292,48294],{"class":164,"line":19936},[162,48291,35736],{"class":168},[162,48293,173],{"class":172},[162,48295,35741],{"class":168},[162,48297,48298],{"class":164,"line":19941},[162,48299,37679],{"class":361},[162,48301,48302,48304,48306,48308,48310,48312,48314],{"class":164,"line":19946},[162,48303,35753],{"class":168},[162,48305,173],{"class":172},[162,48307,35758],{"class":168},[162,48309,35761],{"class":671},[162,48311,173],{"class":172},[162,48313,208],{"class":207},[162,48315,434],{"class":168},[162,48317,48318],{"class":164,"line":19960},[162,48319,37700],{"class":361},[162,48321,48322,48324,48326],{"class":164,"line":19972},[162,48323,37705],{"class":168},[162,48325,173],{"class":172},[162,48327,37710],{"class":168},[162,48329,48330,48332,48334],{"class":164,"line":19977},[162,48331,37715],{"class":168},[162,48333,173],{"class":172},[162,48335,37720],{"class":168},[162,48337,48338,48340,48342,48344,48346,48348,48350,48352],{"class":164,"line":19990},[162,48339,37725],{"class":207},[162,48341,604],{"class":168},[162,48343,37730],{"class":179},[162,48345,37733],{"class":168},[162,48347,37736],{"class":179},[162,48349,3670],{"class":168},[162,48351,37741],{"class":179},[162,48353,37744],{"class":168},[3284,48355,48357],{"id":48356},"_24训练自己的数据集","2.4.训练自己的数据集",[19,48359,48360],{},"猫狗分类任务",[19,48362,48363],{},"划分数据集和验证集",[153,48365,48367],{"className":155,"code":48366,"language":157,"meta":158,"style":158},"# 创建脚本，用于划分数据集和验证集\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",[71,48368,48369,48374,48381,48386,48397,48404,48408,48418,48432,48441,48445,48450,48460,48480,48484,48489,48499,48510,48523,48527,48532,48541,48551,48562,48566,48571,48581,48585,48590,48595,48600,48605,48610,48614,48624,48650,48663,48675,48702,48707,48712,48726,48731,48743,48758,48773,48781,48785,48790,48796,48808,48821,48826,48831,48836,48886,48892,48896],{"__ignoreMap":158},[162,48370,48371],{"class":164,"line":165},[162,48372,48373],{"class":361},"# 创建脚本，用于划分数据集和验证集\n",[162,48375,48376,48378],{"class":164,"line":197},[162,48377,33478],{"class":172},[162,48379,48380],{"class":168}," os\n",[162,48382,48383],{"class":164,"line":228},[162,48384,48385],{"class":361},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[162,48387,48388,48390,48393,48395],{"class":164,"line":252},[162,48389,33821],{"class":172},[162,48391,48392],{"class":168}," shutil ",[162,48394,33478],{"class":172},[162,48396,34901],{"class":168},[162,48398,48399,48401],{"class":164,"line":328},[162,48400,33478],{"class":172},[162,48402,48403],{"class":168}," random\n",[162,48405,48406],{"class":164,"line":466},[162,48407,301],{"emptyLinePlaceholder":300},[162,48409,48410,48412,48415],{"class":164,"line":471},[162,48411,35026],{"class":172},[162,48413,48414],{"class":5082}," mkfile",[162,48416,48417],{"class":168},"(file):\n",[162,48419,48420,48422,48424,48427,48430],{"class":164,"line":687},[162,48421,2283],{"class":172},[162,48423,42005],{"class":172},[162,48425,48426],{"class":168}," os.path.exists(",[162,48428,48429],{"class":671},"file",[162,48431,33870],{"class":168},[162,48433,48434,48437,48439],{"class":164,"line":692},[162,48435,48436],{"class":168},"        os.makedirs(",[162,48438,48429],{"class":671},[162,48440,434],{"class":168},[162,48442,48443],{"class":164,"line":698},[162,48444,301],{"emptyLinePlaceholder":300},[162,48446,48447],{"class":164,"line":2955},[162,48448,48449],{"class":361},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[162,48451,48452,48455,48457],{"class":164,"line":2960},[162,48453,48454],{"class":168},"file_path",[162,48456,173],{"class":172},[162,48458,48459],{"class":179},"'data_cat_dog'\n",[162,48461,48462,48465,48467,48470,48472,48475,48477],{"class":164,"line":2971},[162,48463,48464],{"class":168},"flower_class",[162,48466,173],{"class":172},[162,48468,48469],{"class":168},"[cla ",[162,48471,808],{"class":172},[162,48473,48474],{"class":168}," cla ",[162,48476,814],{"class":172},[162,48478,48479],{"class":168}," os.listdir(file_path)]\n",[162,48481,48482],{"class":164,"line":2984},[162,48483,301],{"emptyLinePlaceholder":300},[162,48485,48486],{"class":164,"line":2989},[162,48487,48488],{"class":361},"# 创建训练集train文件夹\n",[162,48490,48491,48494,48497],{"class":164,"line":3011},[162,48492,48493],{"class":168},"mkfile(",[162,48495,48496],{"class":179},"'data\u002Ftrain'",[162,48498,434],{"class":168},[162,48500,48501,48503,48505,48507],{"class":164,"line":3022},[162,48502,808],{"class":172},[162,48504,48474],{"class":168},[162,48506,814],{"class":172},[162,48508,48509],{"class":168}," flower_class:\n",[162,48511,48512,48515,48518,48520],{"class":164,"line":3027},[162,48513,48514],{"class":168},"    mkfile(",[162,48516,48517],{"class":179},"'data\u002Ftrain\u002F'",[162,48519,3771],{"class":172},[162,48521,48522],{"class":168},"cla)\n",[162,48524,48525],{"class":164,"line":3046},[162,48526,301],{"emptyLinePlaceholder":300},[162,48528,48529],{"class":164,"line":3052},[162,48530,48531],{"class":361},"# 创建验证集val文件夹\n",[162,48533,48534,48536,48539],{"class":164,"line":3057},[162,48535,48493],{"class":168},[162,48537,48538],{"class":179},"'data\u002Ftest'",[162,48540,434],{"class":168},[162,48542,48543,48545,48547,48549],{"class":164,"line":3072},[162,48544,808],{"class":172},[162,48546,48474],{"class":168},[162,48548,814],{"class":172},[162,48550,48509],{"class":168},[162,48552,48553,48555,48558,48560],{"class":164,"line":3077},[162,48554,48514],{"class":168},[162,48556,48557],{"class":179},"'data\u002Ftest\u002F'",[162,48559,3771],{"class":172},[162,48561,48522],{"class":168},[162,48563,48564],{"class":164,"line":3100},[162,48565,301],{"emptyLinePlaceholder":300},[162,48567,48568],{"class":164,"line":3140},[162,48569,48570],{"class":361},"# 划分比例，训练集：测试集=9：1\n",[162,48572,48573,48576,48578],{"class":164,"line":4878},[162,48574,48575],{"class":168},"split_rate",[162,48577,173],{"class":172},[162,48579,48580],{"class":207},"0.1\n",[162,48582,48583],{"class":164,"line":4883},[162,48584,301],{"emptyLinePlaceholder":300},[162,48586,48587],{"class":164,"line":4897},[162,48588,48589],{"class":361},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[162,48591,48592],{"class":164,"line":4902},[162,48593,48594],{"class":361},"# cla_path：当前类别的原始图片路径\n",[162,48596,48597],{"class":164,"line":5694},[162,48598,48599],{"class":361},"# images：当前类别下所有图片的文件名列表\n",[162,48601,48602],{"class":164,"line":5708},[162,48603,48604],{"class":361},"# num：该类别图片总数\n",[162,48606,48607],{"class":164,"line":5716},[162,48608,48609],{"class":361},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[162,48611,48612],{"class":164,"line":5721},[162,48613,301],{"emptyLinePlaceholder":300},[162,48615,48616,48618,48620,48622],{"class":164,"line":5727},[162,48617,808],{"class":172},[162,48619,48474],{"class":168},[162,48621,814],{"class":172},[162,48623,48509],{"class":168},[162,48625,48626,48629,48631,48634,48636,48639,48641,48643,48645,48647],{"class":164,"line":5733},[162,48627,48628],{"class":168},"    cla_path ",[162,48630,173],{"class":172},[162,48632,48633],{"class":168}," file_path ",[162,48635,3771],{"class":172},[162,48637,48638],{"class":179}," '\u002F'",[162,48640,1239],{"class":172},[162,48642,48474],{"class":168},[162,48644,3771],{"class":172},[162,48646,48638],{"class":179},[162,48648,48649],{"class":361},"  # 某一类别的子目录\n",[162,48651,48652,48655,48657,48660],{"class":164,"line":5738},[162,48653,48654],{"class":168},"    images ",[162,48656,173],{"class":172},[162,48658,48659],{"class":168}," os.listdir(cla_path)  ",[162,48661,48662],{"class":361},"# iamges 列表存储了该目录下所有图像的名称\n",[162,48664,48665,48668,48670,48672],{"class":164,"line":11052},[162,48666,48667],{"class":168},"    num ",[162,48669,173],{"class":172},[162,48671,949],{"class":207},[162,48673,48674],{"class":168},"(images)\n",[162,48676,48677,48680,48682,48685,48687,48689,48691,48694,48696,48699],{"class":164,"line":11076},[162,48678,48679],{"class":168},"    eval_index ",[162,48681,173],{"class":172},[162,48683,48684],{"class":168}," random.sample(images, ",[162,48686,3783],{"class":671},[162,48688,173],{"class":172},[162,48690,3319],{"class":207},[162,48692,48693],{"class":168},"(num ",[162,48695,3745],{"class":172},[162,48697,48698],{"class":168}," split_rate))  ",[162,48700,48701],{"class":361},"# 从images列表中随机抽取 k 个图像名称\n",[162,48703,48704],{"class":164,"line":11081},[162,48705,48706],{"class":361},"    # 遍历该类别下的所有图片\n",[162,48708,48709],{"class":164,"line":11087},[162,48710,48711],{"class":361},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[162,48713,48714,48716,48719,48721,48723],{"class":164,"line":11114},[162,48715,6315],{"class":172},[162,48717,48718],{"class":168}," index, image ",[162,48720,814],{"class":172},[162,48722,845],{"class":207},[162,48724,48725],{"class":168},"(images):\n",[162,48727,48728],{"class":164,"line":11119},[162,48729,48730],{"class":361},"        # eval_index 中保存验证集val的图像名称\n",[162,48732,48733,48735,48738,48740],{"class":164,"line":11125},[162,48734,5614],{"class":172},[162,48736,48737],{"class":168}," image ",[162,48739,814],{"class":172},[162,48741,48742],{"class":168}," eval_index:\n",[162,48744,48745,48748,48750,48753,48755],{"class":164,"line":11137},[162,48746,48747],{"class":168},"            image_path ",[162,48749,173],{"class":172},[162,48751,48752],{"class":168}," cla_path ",[162,48754,3771],{"class":172},[162,48756,48757],{"class":168}," image\n",[162,48759,48760,48763,48765,48768,48770],{"class":164,"line":11149},[162,48761,48762],{"class":168},"            new_path ",[162,48764,173],{"class":172},[162,48766,48767],{"class":179}," 'data\u002Ftest\u002F'",[162,48769,1239],{"class":172},[162,48771,48772],{"class":168}," cla\n",[162,48774,48775,48778],{"class":164,"line":11161},[162,48776,48777],{"class":168},"            copy(image_path, new_path)  ",[162,48779,48780],{"class":361},"# 将选中的图像复制到新路径\n",[162,48782,48783],{"class":164,"line":12816},[162,48784,301],{"emptyLinePlaceholder":300},[162,48786,48787],{"class":164,"line":12841},[162,48788,48789],{"class":361},"        # 其余的图像保存在训练集train中\n",[162,48791,48792,48794],{"class":164,"line":12864},[162,48793,5651],{"class":172},[162,48795,2316],{"class":168},[162,48797,48798,48800,48802,48804,48806],{"class":164,"line":12888},[162,48799,48747],{"class":168},[162,48801,173],{"class":172},[162,48803,48752],{"class":168},[162,48805,3771],{"class":172},[162,48807,48757],{"class":168},[162,48809,48810,48812,48814,48817,48819],{"class":164,"line":12893},[162,48811,48762],{"class":168},[162,48813,173],{"class":172},[162,48815,48816],{"class":179}," 'data\u002Ftrain\u002F'",[162,48818,1239],{"class":172},[162,48820,48772],{"class":168},[162,48822,48823],{"class":164,"line":12898},[162,48824,48825],{"class":168},"            copy(image_path, new_path)\n",[162,48827,48828],{"class":164,"line":12903},[162,48829,48830],{"class":361},"            # 打印进度条信息\n",[162,48832,48833],{"class":164,"line":12912},[162,48834,48835],{"class":361},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[162,48837,48838,48840,48842,48844,48847,48849,48851,48854,48856,48858,48860,48863,48866,48868,48870,48873,48876,48878,48880,48883],{"class":164,"line":12917},[162,48839,2300],{"class":207},[162,48841,604],{"class":168},[162,48843,979],{"class":179},[162,48845,48846],{"class":207},"\\r",[162,48848,4168],{"class":179},[162,48850,1532],{"class":207},[162,48852,48853],{"class":179},"] processing [",[162,48855,1532],{"class":207},[162,48857,946],{"class":179},[162,48859,1532],{"class":207},[162,48861,48862],{"class":179},"]\"",[162,48864,48865],{"class":168},".format(cla, index ",[162,48867,3771],{"class":172},[162,48869,28210],{"class":207},[162,48871,48872],{"class":168},", num), ",[162,48874,48875],{"class":671},"end",[162,48877,173],{"class":172},[162,48879,10756],{"class":179},[162,48881,48882],{"class":168},")  ",[162,48884,48885],{"class":361},"# processing bar\n",[162,48887,48888,48890],{"class":164,"line":12923},[162,48889,822],{"class":207},[162,48891,1526],{"class":168},[162,48893,48894],{"class":164,"line":12944},[162,48895,301],{"emptyLinePlaceholder":300},[162,48897,48898,48900,48902,48905],{"class":164,"line":12950},[162,48899,306],{"class":207},[162,48901,604],{"class":168},[162,48903,48904],{"class":179},"\"processing done!\"",[162,48906,434],{"class":168},[19,48908,48909],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[25089,48911,48913],{"id":48912},"_242模型代码","2.4.2.模型代码",[19,48915,48916],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[153,48918,48920],{"className":155,"code":48919,"language":157,"meta":158,"style":158},"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",[71,48921,48922,48928,48938,48948,48952,48968,48976,48990,49000,49004,49034,49038,49072,49118,49122,49156,49202,49206,49210,49244,49274,49278,49286,49300,49322,49344,49362,49366,49380,49384,49388,49404,49408,49416,49430,49440,49484,49488,49516,49520,49530,49558,49562,49598,49602,49630,49634,49644,49676,49708,49736,49740,49750,49782,49814,49846,49878,49910,49938,49942,49952,49984,50016,50028,50032,50044,50048,50052,50064,50072,50092,50096,50100,50104,50108,50112,50116,50130,50138,50146,50158,50172,50180,50184,50192,50202,50212,50222,50232,50242,50248,50252,50256,50268,50288,50296],{"__ignoreMap":158},[162,48923,48924,48926],{"class":164,"line":165},[162,48925,33478],{"class":172},[162,48927,33481],{"class":168},[162,48929,48930,48932,48934,48936],{"class":164,"line":197},[162,48931,33821],{"class":172},[162,48933,33824],{"class":168},[162,48935,33478],{"class":172},[162,48937,33829],{"class":168},[162,48939,48940,48942,48944,48946],{"class":164,"line":228},[162,48941,33821],{"class":172},[162,48943,33841],{"class":168},[162,48945,33478],{"class":172},[162,48947,33846],{"class":168},[162,48949,48950],{"class":164,"line":252},[162,48951,301],{"emptyLinePlaceholder":300},[162,48953,48954,48956,48958,48960,48962,48964,48966],{"class":164,"line":328},[162,48955,17788],{"class":172},[162,48957,44568],{"class":5082},[162,48959,604],{"class":168},[162,48961,33862],{"class":5082},[162,48963,3847],{"class":168},[162,48965,33867],{"class":5082},[162,48967,33870],{"class":168},[162,48969,48970,48972,48974],{"class":164,"line":466},[162,48971,33885],{"class":172},[162,48973,33888],{"class":207},[162,48975,44587],{"class":168},[162,48977,48978,48980,48982,48984,48986,48988],{"class":164,"line":471},[162,48979,33901],{"class":207},[162,48981,44594],{"class":168},[162,48983,33907],{"class":207},[162,48985,33910],{"class":168},[162,48987,33913],{"class":207},[162,48989,1526],{"class":168},[162,48991,48992,48994,48996,48998],{"class":164,"line":687},[162,48993,33929],{"class":207},[162,48995,37846],{"class":168},[162,48997,173],{"class":172},[162,48999,37851],{"class":168},[162,49001,49002],{"class":164,"line":692},[162,49003,44617],{"class":361},[162,49005,49006,49008,49010,49012,49014,49016,49018,49020,49022,49024,49026,49028,49030,49032],{"class":164,"line":698},[162,49007,33929],{"class":207},[162,49009,44624],{"class":168},[162,49011,173],{"class":172},[162,49013,33937],{"class":168},[162,49015,33940],{"class":671},[162,49017,173],{"class":172},[162,49019,44635],{"class":168},[162,49021,33949],{"class":671},[162,49023,173],{"class":172},[162,49025,44642],{"class":168},[162,49027,33958],{"class":671},[162,49029,173],{"class":172},[162,49031,208],{"class":207},[162,49033,434],{"class":168},[162,49035,49036],{"class":164,"line":2955},[162,49037,44655],{"class":361},[162,49039,49040,49042,49044,49046,49048,49050,49052,49054,49056,49058,49060,49062,49064,49066,49068,49070],{"class":164,"line":2960},[162,49041,33929],{"class":207},[162,49043,44662],{"class":168},[162,49045,173],{"class":172},[162,49047,33937],{"class":168},[162,49049,33940],{"class":671},[162,49051,173],{"class":172},[162,49053,44635],{"class":168},[162,49055,33949],{"class":671},[162,49057,173],{"class":172},[162,49059,44679],{"class":168},[162,49061,312],{"class":207},[162,49063,44684],{"class":168},[162,49065,33958],{"class":671},[162,49067,173],{"class":172},[162,49069,208],{"class":207},[162,49071,434],{"class":168},[162,49073,49074,49076,49078,49080,49082,49084,49086,49088,49090,49092,49094,49096,49098,49100,49102,49104,49106,49108,49110,49112,49114,49116],{"class":164,"line":2971},[162,49075,33929],{"class":207},[162,49077,44699],{"class":168},[162,49079,173],{"class":172},[162,49081,33937],{"class":168},[162,49083,33940],{"class":671},[162,49085,173],{"class":172},[162,49087,44679],{"class":168},[162,49089,312],{"class":207},[162,49091,44684],{"class":168},[162,49093,33949],{"class":671},[162,49095,173],{"class":172},[162,49097,44679],{"class":168},[162,49099,208],{"class":207},[162,49101,44684],{"class":168},[162,49103,33958],{"class":671},[162,49105,173],{"class":172},[162,49107,218],{"class":207},[162,49109,3670],{"class":168},[162,49111,33967],{"class":671},[162,49113,173],{"class":172},[162,49115,208],{"class":207},[162,49117,434],{"class":168},[162,49119,49120],{"class":164,"line":2984},[162,49121,44744],{"class":361},[162,49123,49124,49126,49128,49130,49132,49134,49136,49138,49140,49142,49144,49146,49148,49150,49152,49154],{"class":164,"line":2989},[162,49125,33929],{"class":207},[162,49127,44751],{"class":168},[162,49129,173],{"class":172},[162,49131,33937],{"class":168},[162,49133,33940],{"class":671},[162,49135,173],{"class":172},[162,49137,44635],{"class":168},[162,49139,33949],{"class":671},[162,49141,173],{"class":172},[162,49143,44768],{"class":168},[162,49145,312],{"class":207},[162,49147,44684],{"class":168},[162,49149,33958],{"class":671},[162,49151,173],{"class":172},[162,49153,208],{"class":207},[162,49155,434],{"class":168},[162,49157,49158,49160,49162,49164,49166,49168,49170,49172,49174,49176,49178,49180,49182,49184,49186,49188,49190,49192,49194,49196,49198,49200],{"class":164,"line":3011},[162,49159,33929],{"class":207},[162,49161,44787],{"class":168},[162,49163,173],{"class":172},[162,49165,33937],{"class":168},[162,49167,33940],{"class":671},[162,49169,173],{"class":172},[162,49171,44768],{"class":168},[162,49173,312],{"class":207},[162,49175,44684],{"class":168},[162,49177,33949],{"class":671},[162,49179,173],{"class":172},[162,49181,44768],{"class":168},[162,49183,208],{"class":207},[162,49185,44684],{"class":168},[162,49187,33958],{"class":671},[162,49189,173],{"class":172},[162,49191,637],{"class":207},[162,49193,3670],{"class":168},[162,49195,33967],{"class":671},[162,49197,173],{"class":172},[162,49199,213],{"class":207},[162,49201,434],{"class":168},[162,49203,49204],{"class":164,"line":3022},[162,49205,44832],{"class":361},[162,49207,49208],{"class":164,"line":3027},[162,49209,44837],{"class":361},[162,49211,49212,49214,49216,49218,49220,49222,49224,49226,49228,49230,49232,49234,49236,49238,49240,49242],{"class":164,"line":3046},[162,49213,33929],{"class":207},[162,49215,44844],{"class":168},[162,49217,173],{"class":172},[162,49219,37904],{"class":168},[162,49221,33958],{"class":671},[162,49223,173],{"class":172},[162,49225,218],{"class":207},[162,49227,3670],{"class":168},[162,49229,34013],{"class":671},[162,49231,173],{"class":172},[162,49233,208],{"class":207},[162,49235,3670],{"class":168},[162,49237,33967],{"class":671},[162,49239,173],{"class":172},[162,49241,208],{"class":207},[162,49243,434],{"class":168},[162,49245,49246,49248,49250,49252,49254,49256,49258,49260,49262,49264,49266,49268,49270,49272],{"class":164,"line":3052},[162,49247,33929],{"class":207},[162,49249,44879],{"class":168},[162,49251,173],{"class":172},[162,49253,33937],{"class":168},[162,49255,33940],{"class":671},[162,49257,173],{"class":172},[162,49259,44635],{"class":168},[162,49261,33949],{"class":671},[162,49263,173],{"class":172},[162,49265,44896],{"class":168},[162,49267,33958],{"class":671},[162,49269,173],{"class":172},[162,49271,208],{"class":207},[162,49273,434],{"class":168},[162,49275,49276],{"class":164,"line":3057},[162,49277,301],{"emptyLinePlaceholder":300},[162,49279,49280,49282,49284],{"class":164,"line":3072},[162,49281,33885],{"class":172},[162,49283,34177],{"class":5082},[162,49285,34180],{"class":168},[162,49287,49288,49290,49292,49294,49296,49298],{"class":164,"line":3077},[162,49289,44921],{"class":168},[162,49291,173],{"class":172},[162,49293,33907],{"class":207},[162,49295,38259],{"class":168},[162,49297,33907],{"class":207},[162,49299,44932],{"class":168},[162,49301,49302,49304,49306,49308,49310,49312,49314,49316,49318,49320],{"class":164,"line":3100},[162,49303,10191],{"class":168},[162,49305,173],{"class":172},[162,49307,33907],{"class":207},[162,49309,38259],{"class":168},[162,49311,33907],{"class":207},[162,49313,44947],{"class":168},[162,49315,33907],{"class":207},[162,49317,38259],{"class":168},[162,49319,33907],{"class":207},[162,49321,44956],{"class":168},[162,49323,49324,49326,49328,49330,49332,49334,49336,49338,49340,49342],{"class":164,"line":3140},[162,49325,44961],{"class":168},[162,49327,173],{"class":172},[162,49329,33907],{"class":207},[162,49331,38259],{"class":168},[162,49333,33907],{"class":207},[162,49335,44972],{"class":168},[162,49337,33907],{"class":207},[162,49339,38259],{"class":168},[162,49341,33907],{"class":207},[162,49343,44981],{"class":168},[162,49345,49346,49348,49350,49352,49354,49356,49358,49360],{"class":164,"line":4878},[162,49347,44986],{"class":168},[162,49349,173],{"class":172},[162,49351,33907],{"class":207},[162,49353,38259],{"class":168},[162,49355,33907],{"class":207},[162,49357,44997],{"class":168},[162,49359,33907],{"class":207},[162,49361,45002],{"class":168},[162,49363,49364],{"class":164,"line":4883},[162,49365,45007],{"class":361},[162,49367,49368,49370,49372,49374,49376,49378],{"class":164,"line":4897},[162,49369,17846],{"class":172},[162,49371,45014],{"class":168},[162,49373,35761],{"class":671},[162,49375,173],{"class":172},[162,49377,208],{"class":207},[162,49379,434],{"class":168},[162,49381,49382],{"class":164,"line":4902},[162,49383,301],{"emptyLinePlaceholder":300},[162,49385,49386],{"class":164,"line":5694},[162,49387,45035],{"class":361},[162,49389,49390,49392,49394,49396,49398,49400,49402],{"class":164,"line":5708},[162,49391,17788],{"class":172},[162,49393,45042],{"class":5082},[162,49395,604],{"class":168},[162,49397,33862],{"class":5082},[162,49399,3847],{"class":168},[162,49401,33867],{"class":5082},[162,49403,33870],{"class":168},[162,49405,49406],{"class":164,"line":5716},[162,49407,45057],{"class":361},[162,49409,49410,49412,49414],{"class":164,"line":5721},[162,49411,33885],{"class":172},[162,49413,33888],{"class":207},[162,49415,45066],{"class":168},[162,49417,49418,49420,49422,49424,49426,49428],{"class":164,"line":5727},[162,49419,33901],{"class":207},[162,49421,45073],{"class":168},[162,49423,33907],{"class":207},[162,49425,33910],{"class":168},[162,49427,33913],{"class":207},[162,49429,1526],{"class":168},[162,49431,49432,49434,49436,49438],{"class":164,"line":5733},[162,49433,33929],{"class":207},[162,49435,45088],{"class":168},[162,49437,173],{"class":172},[162,49439,41084],{"class":168},[162,49441,49442,49444,49446,49448,49450,49452,49454,49456,49458,49460,49462,49464,49466,49468,49470,49472,49474,49476,49478,49480,49482],{"class":164,"line":5738},[162,49443,41089],{"class":168},[162,49445,33940],{"class":671},[162,49447,173],{"class":172},[162,49449,218],{"class":207},[162,49451,3670],{"class":168},[162,49453,33949],{"class":671},[162,49455,173],{"class":172},[162,49457,3504],{"class":207},[162,49459,3670],{"class":168},[162,49461,33958],{"class":671},[162,49463,173],{"class":172},[162,49465,3661],{"class":207},[162,49467,3670],{"class":168},[162,49469,34013],{"class":671},[162,49471,173],{"class":172},[162,49473,213],{"class":207},[162,49475,3670],{"class":168},[162,49477,33967],{"class":671},[162,49479,173],{"class":172},[162,49481,218],{"class":207},[162,49483,41122],{"class":168},[162,49485,49486],{"class":164,"line":11052},[162,49487,41127],{"class":168},[162,49489,49490,49492,49494,49496,49498,49500,49502,49504,49506,49508,49510,49512,49514],{"class":164,"line":11076},[162,49491,41172],{"class":168},[162,49493,33958],{"class":671},[162,49495,173],{"class":172},[162,49497,218],{"class":207},[162,49499,3670],{"class":168},[162,49501,34013],{"class":671},[162,49503,173],{"class":172},[162,49505,213],{"class":207},[162,49507,3670],{"class":168},[162,49509,33967],{"class":671},[162,49511,173],{"class":172},[162,49513,208],{"class":207},[162,49515,434],{"class":168},[162,49517,49518],{"class":164,"line":11081},[162,49519,41201],{"class":168},[162,49521,49522,49524,49526,49528],{"class":164,"line":11087},[162,49523,33929],{"class":207},[162,49525,45179],{"class":168},[162,49527,173],{"class":172},[162,49529,41084],{"class":168},[162,49531,49532,49534,49536,49538,49540,49542,49544,49546,49548,49550,49552,49554,49556],{"class":164,"line":11114},[162,49533,41089],{"class":168},[162,49535,33940],{"class":671},[162,49537,173],{"class":172},[162,49539,3504],{"class":207},[162,49541,3670],{"class":168},[162,49543,33949],{"class":671},[162,49545,173],{"class":172},[162,49547,3504],{"class":207},[162,49549,3670],{"class":168},[162,49551,33958],{"class":671},[162,49553,173],{"class":172},[162,49555,208],{"class":207},[162,49557,41122],{"class":168},[162,49559,49560],{"class":164,"line":11119},[162,49561,41127],{"class":168},[162,49563,49564,49566,49568,49570,49572,49574,49576,49578,49580,49582,49584,49586,49588,49590,49592,49594,49596],{"class":164,"line":11125},[162,49565,41089],{"class":168},[162,49567,33940],{"class":671},[162,49569,173],{"class":172},[162,49571,3504],{"class":207},[162,49573,3670],{"class":168},[162,49575,33949],{"class":671},[162,49577,173],{"class":172},[162,49579,45234],{"class":207},[162,49581,3670],{"class":168},[162,49583,33958],{"class":671},[162,49585,173],{"class":172},[162,49587,218],{"class":207},[162,49589,3670],{"class":168},[162,49591,33967],{"class":671},[162,49593,173],{"class":172},[162,49595,208],{"class":207},[162,49597,41122],{"class":168},[162,49599,49600],{"class":164,"line":11137},[162,49601,41127],{"class":168},[162,49603,49604,49606,49608,49610,49612,49614,49616,49618,49620,49622,49624,49626,49628],{"class":164,"line":11149},[162,49605,41172],{"class":168},[162,49607,33958],{"class":671},[162,49609,173],{"class":172},[162,49611,218],{"class":207},[162,49613,3670],{"class":168},[162,49615,34013],{"class":671},[162,49617,173],{"class":172},[162,49619,213],{"class":207},[162,49621,3670],{"class":168},[162,49623,33967],{"class":671},[162,49625,173],{"class":172},[162,49627,208],{"class":207},[162,49629,434],{"class":168},[162,49631,49632],{"class":164,"line":11161},[162,49633,41201],{"class":168},[162,49635,49636,49638,49640,49642],{"class":164,"line":12816},[162,49637,33929],{"class":207},[162,49639,45295],{"class":168},[162,49641,173],{"class":172},[162,49643,41084],{"class":168},[162,49645,49646,49648,49650,49652,49654,49656,49658,49660,49662,49664,49666,49668,49670,49672,49674],{"class":164,"line":12841},[162,49647,45304],{"class":168},[162,49649,45234],{"class":207},[162,49651,3670],{"class":168},[162,49653,3504],{"class":207},[162,49655,45313],{"class":168},[162,49657,3510],{"class":207},[162,49659,3670],{"class":168},[162,49661,35149],{"class":207},[162,49663,45322],{"class":168},[162,49665,3888],{"class":207},[162,49667,3670],{"class":168},[162,49669,3498],{"class":207},[162,49671,45331],{"class":168},[162,49673,3498],{"class":207},[162,49675,41122],{"class":168},[162,49677,49678,49680,49682,49684,49686,49688,49690,49692,49694,49696,49698,49700,49702,49704,49706],{"class":164,"line":12864},[162,49679,45304],{"class":168},[162,49681,37945],{"class":207},[162,49683,3670],{"class":168},[162,49685,35149],{"class":207},[162,49687,45313],{"class":168},[162,49689,35149],{"class":207},[162,49691,3670],{"class":168},[162,49693,45234],{"class":207},[162,49695,45322],{"class":168},[162,49697,3498],{"class":207},[162,49699,3670],{"class":168},[162,49701,3510],{"class":207},[162,49703,45331],{"class":168},[162,49705,3504],{"class":207},[162,49707,41122],{"class":168},[162,49709,49710,49712,49714,49716,49718,49720,49722,49724,49726,49728,49730,49732,49734],{"class":164,"line":12888},[162,49711,41172],{"class":168},[162,49713,33958],{"class":671},[162,49715,173],{"class":172},[162,49717,218],{"class":207},[162,49719,3670],{"class":168},[162,49721,34013],{"class":671},[162,49723,173],{"class":172},[162,49725,213],{"class":207},[162,49727,3670],{"class":168},[162,49729,33967],{"class":671},[162,49731,173],{"class":172},[162,49733,208],{"class":207},[162,49735,434],{"class":168},[162,49737,49738],{"class":164,"line":12893},[162,49739,41201],{"class":168},[162,49741,49742,49744,49746,49748],{"class":164,"line":12898},[162,49743,33929],{"class":207},[162,49745,45406],{"class":168},[162,49747,173],{"class":172},[162,49749,41084],{"class":168},[162,49751,49752,49754,49756,49758,49760,49762,49764,49766,49768,49770,49772,49774,49776,49778,49780],{"class":164,"line":12903},[162,49753,45304],{"class":168},[162,49755,45417],{"class":207},[162,49757,3670],{"class":168},[162,49759,45234],{"class":207},[162,49761,45313],{"class":168},[162,49763,3510],{"class":207},[162,49765,3670],{"class":168},[162,49767,45430],{"class":207},[162,49769,45322],{"class":168},[162,49771,3888],{"class":207},[162,49773,3670],{"class":168},[162,49775,3894],{"class":207},[162,49777,45331],{"class":168},[162,49779,3504],{"class":207},[162,49781,41122],{"class":168},[162,49783,49784,49786,49788,49790,49792,49794,49796,49798,49800,49802,49804,49806,49808,49810,49812],{"class":164,"line":12912},[162,49785,45304],{"class":168},[162,49787,41532],{"class":207},[162,49789,3670],{"class":168},[162,49791,24139],{"class":207},[162,49793,45313],{"class":168},[162,49795,3905],{"class":207},[162,49797,3670],{"class":168},[162,49799,34582],{"class":207},[162,49801,45322],{"class":168},[162,49803,4082],{"class":207},[162,49805,3670],{"class":168},[162,49807,3504],{"class":207},[162,49809,45331],{"class":168},[162,49811,3504],{"class":207},[162,49813,41122],{"class":168},[162,49815,49816,49818,49820,49822,49824,49826,49828,49830,49832,49834,49836,49838,49840,49842,49844],{"class":164,"line":12917},[162,49817,45304],{"class":168},[162,49819,41532],{"class":207},[162,49821,3670],{"class":168},[162,49823,35149],{"class":207},[162,49825,45313],{"class":168},[162,49827,35149],{"class":207},[162,49829,3670],{"class":168},[162,49831,37945],{"class":207},[162,49833,45322],{"class":168},[162,49835,4082],{"class":207},[162,49837,3670],{"class":168},[162,49839,3504],{"class":207},[162,49841,45331],{"class":168},[162,49843,3504],{"class":207},[162,49845,41122],{"class":168},[162,49847,49848,49850,49852,49854,49856,49858,49860,49862,49864,49866,49868,49870,49872,49874,49876],{"class":164,"line":12923},[162,49849,45304],{"class":168},[162,49851,41532],{"class":207},[162,49853,3670],{"class":168},[162,49855,3905],{"class":207},[162,49857,45313],{"class":168},[162,49859,35149],{"class":207},[162,49861,3670],{"class":168},[162,49863,45527],{"class":207},[162,49865,45322],{"class":168},[162,49867,3498],{"class":207},[162,49869,3670],{"class":168},[162,49871,3504],{"class":207},[162,49873,45331],{"class":168},[162,49875,3504],{"class":207},[162,49877,41122],{"class":168},[162,49879,49880,49882,49884,49886,49888,49890,49892,49894,49896,49898,49900,49902,49904,49906,49908],{"class":164,"line":12944},[162,49881,45304],{"class":168},[162,49883,45548],{"class":207},[162,49885,3670],{"class":168},[162,49887,37945],{"class":207},[162,49889,45313],{"class":168},[162,49891,24139],{"class":207},[162,49893,3670],{"class":168},[162,49895,45561],{"class":207},[162,49897,45322],{"class":168},[162,49899,3498],{"class":207},[162,49901,3670],{"class":168},[162,49903,35149],{"class":207},[162,49905,45331],{"class":168},[162,49907,35149],{"class":207},[162,49909,41122],{"class":168},[162,49911,49912,49914,49916,49918,49920,49922,49924,49926,49928,49930,49932,49934,49936],{"class":164,"line":12950},[162,49913,41172],{"class":168},[162,49915,33958],{"class":671},[162,49917,173],{"class":172},[162,49919,218],{"class":207},[162,49921,3670],{"class":168},[162,49923,34013],{"class":671},[162,49925,173],{"class":172},[162,49927,213],{"class":207},[162,49929,3670],{"class":168},[162,49931,33967],{"class":671},[162,49933,173],{"class":172},[162,49935,208],{"class":207},[162,49937,434],{"class":168},[162,49939,49940],{"class":164,"line":12964},[162,49941,41201],{"class":168},[162,49943,49944,49946,49948,49950],{"class":164,"line":12970},[162,49945,33929],{"class":207},[162,49947,45614],{"class":168},[162,49949,173],{"class":172},[162,49951,41084],{"class":168},[162,49953,49954,49956,49958,49960,49962,49964,49966,49968,49970,49972,49974,49976,49978,49980,49982],{"class":164,"line":12997},[162,49955,45304],{"class":168},[162,49957,45625],{"class":207},[162,49959,3670],{"class":168},[162,49961,37945],{"class":207},[162,49963,45313],{"class":168},[162,49965,24139],{"class":207},[162,49967,3670],{"class":168},[162,49969,45561],{"class":207},[162,49971,45322],{"class":168},[162,49973,3498],{"class":207},[162,49975,3670],{"class":168},[162,49977,35149],{"class":207},[162,49979,45331],{"class":168},[162,49981,35149],{"class":207},[162,49983,41122],{"class":168},[162,49985,49986,49988,49990,49992,49994,49996,49998,50000,50002,50004,50006,50008,50010,50012,50014],{"class":164,"line":13006},[162,49987,45304],{"class":168},[162,49989,45625],{"class":207},[162,49991,3670],{"class":168},[162,49993,38015],{"class":207},[162,49995,45313],{"class":168},[162,49997,45234],{"class":207},[162,49999,3670],{"class":168},[162,50001,38015],{"class":207},[162,50003,45322],{"class":168},[162,50005,3894],{"class":207},[162,50007,3670],{"class":168},[162,50009,35149],{"class":207},[162,50011,45331],{"class":168},[162,50013,35149],{"class":207},[162,50015,41122],{"class":168},[162,50017,50018,50020,50022,50024,50026],{"class":164,"line":13012},[162,50019,45688],{"class":168},[162,50021,208],{"class":207},[162,50023,3670],{"class":168},[162,50025,208],{"class":207},[162,50027,45697],{"class":168},[162,50029,50030],{"class":164,"line":13020},[162,50031,41865],{"class":168},[162,50033,50034,50036,50038,50040,50042],{"class":164,"line":13025},[162,50035,41870],{"class":168},[162,50037,45708],{"class":207},[162,50039,3670],{"class":168},[162,50041,213],{"class":207},[162,50043,434],{"class":168},[162,50045,50046],{"class":164,"line":19695},[162,50047,41201],{"class":168},[162,50049,50050],{"class":164,"line":19701},[162,50051,45723],{"class":361},[162,50053,50054,50056,50058,50060,50062],{"class":164,"line":19724},[162,50055,6517],{"class":172},[162,50057,41943],{"class":168},[162,50059,814],{"class":172},[162,50061,41948],{"class":207},[162,50063,41951],{"class":168},[162,50065,50066,50068,50070],{"class":164,"line":19730},[162,50067,7752],{"class":172},[162,50069,41963],{"class":207},[162,50071,41966],{"class":168},[162,50073,50074,50076,50078,50080,50082,50084,50086,50088,50090],{"class":164,"line":19753},[162,50075,41976],{"class":168},[162,50077,45750],{"class":671},[162,50079,173],{"class":172},[162,50081,45755],{"class":179},[162,50083,3670],{"class":168},[162,50085,41979],{"class":671},[162,50087,173],{"class":172},[162,50089,41984],{"class":179},[162,50091,434],{"class":168},[162,50093,50094],{"class":164,"line":19767},[162,50095,45770],{"class":361},[162,50097,50098],{"class":164,"line":19787},[162,50099,45775],{"class":361},[162,50101,50102],{"class":164,"line":19793},[162,50103,45780],{"class":361},[162,50105,50106],{"class":164,"line":19804},[162,50107,45785],{"class":361},[162,50109,50110],{"class":164,"line":19827},[162,50111,45790],{"class":361},[162,50113,50114],{"class":164,"line":19849},[162,50115,45795],{"class":361},[162,50117,50118,50120,50122,50124,50126,50128],{"class":164,"line":19854},[162,50119,41996],{"class":172},[162,50121,41999],{"class":168},[162,50123,42002],{"class":172},[162,50125,42005],{"class":172},[162,50127,42008],{"class":207},[162,50129,2316],{"class":168},[162,50131,50132,50134,50136],{"class":164,"line":19860},[162,50133,42020],{"class":168},[162,50135,312],{"class":207},[162,50137,434],{"class":168},[162,50139,50140,50142,50144],{"class":164,"line":19874},[162,50141,45822],{"class":172},[162,50143,41963],{"class":207},[162,50145,42039],{"class":168},[162,50147,50148,50150,50152,50154,50156],{"class":164,"line":19887},[162,50149,45831],{"class":168},[162,50151,312],{"class":207},[162,50153,3670],{"class":168},[162,50155,42061],{"class":207},[162,50157,434],{"class":168},[162,50159,50160,50162,50164,50166,50168,50170],{"class":164,"line":19892},[162,50161,45844],{"class":172},[162,50163,41999],{"class":168},[162,50165,42002],{"class":172},[162,50167,42005],{"class":172},[162,50169,42008],{"class":207},[162,50171,2316],{"class":168},[162,50173,50174,50176,50178],{"class":164,"line":19906},[162,50175,45859],{"class":168},[162,50177,312],{"class":207},[162,50179,434],{"class":168},[162,50181,50182],{"class":164,"line":19911},[162,50183,38240],{"class":361},[162,50185,50186,50188,50190],{"class":164,"line":19917},[162,50187,33885],{"class":172},[162,50189,34177],{"class":5082},[162,50191,34180],{"class":168},[162,50193,50194,50196,50198,50200],{"class":164,"line":19922},[162,50195,34185],{"class":168},[162,50197,173],{"class":172},[162,50199,33907],{"class":207},[162,50201,45886],{"class":168},[162,50203,50204,50206,50208,50210],{"class":164,"line":19936},[162,50205,34185],{"class":168},[162,50207,173],{"class":172},[162,50209,33907],{"class":207},[162,50211,45897],{"class":168},[162,50213,50214,50216,50218,50220],{"class":164,"line":19941},[162,50215,34185],{"class":168},[162,50217,173],{"class":172},[162,50219,33907],{"class":207},[162,50221,45908],{"class":168},[162,50223,50224,50226,50228,50230],{"class":164,"line":19946},[162,50225,34185],{"class":168},[162,50227,173],{"class":172},[162,50229,33907],{"class":207},[162,50231,45919],{"class":168},[162,50233,50234,50236,50238,50240],{"class":164,"line":19960},[162,50235,34185],{"class":168},[162,50237,173],{"class":172},[162,50239,33907],{"class":207},[162,50241,45930],{"class":168},[162,50243,50244,50246],{"class":164,"line":19972},[162,50245,17846],{"class":172},[162,50247,34293],{"class":168},[162,50249,50250],{"class":164,"line":19977},[162,50251,301],{"emptyLinePlaceholder":300},[162,50253,50254],{"class":164,"line":19990},[162,50255,45945],{"class":361},[162,50257,50258,50260,50262,50264,50266],{"class":164,"line":19995},[162,50259,2703],{"class":172},[162,50261,34304],{"class":207},[162,50263,2292],{"class":172},[162,50265,34309],{"class":179},[162,50267,2316],{"class":168},[162,50269,50270,50272,50274,50276,50278,50280,50282,50284,50286],{"class":164,"line":20000},[162,50271,34321],{"class":168},[162,50273,173],{"class":172},[162,50275,33536],{"class":168},[162,50277,34328],{"class":179},[162,50279,4828],{"class":172},[162,50281,34333],{"class":168},[162,50283,2313],{"class":172},[162,50285,33561],{"class":179},[162,50287,434],{"class":168},[162,50289,50290,50292,50294],{"class":164,"line":20005},[162,50291,34373],{"class":168},[162,50293,173],{"class":172},[162,50295,45986],{"class":168},[162,50297,50298,50300,50302,50304,50306,50308,50310,50312],{"class":164,"line":20018},[162,50299,822],{"class":207},[162,50301,34385],{"class":168},[162,50303,208],{"class":207},[162,50305,3670],{"class":168},[162,50307,34582],{"class":207},[162,50309,3670],{"class":168},[162,50311,34582],{"class":207},[162,50313,34398],{"class":168},[25089,50315,50317],{"id":50316},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,50319,50320],{},"计算图片的均值与方差，用于训练中归一化处理操作",[153,50322,50324],{"className":155,"code":50323,"language":157,"meta":158,"style":158},"# 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",[71,50325,50326,50331,50344,50349,50355,50360,50370,50374,50379,50389,50393,50398,50407,50424,50428,50433,50445,50457,50488,50497,50507,50517,50521,50526,50541,50545,50550,50555,50560,50570,50575,50600,50604,50609,50624,50628,50641,50645,50650,50655,50660,50665,50670,50680,50690,50713,50721,50729,50737,50741,50753,50757,50762,50766,50770,50777,50797,50821,50828,50842,50847,50852,50856,50870,50874,50886],{"__ignoreMap":158},[162,50327,50328],{"class":164,"line":165},[162,50329,50330],{"class":361},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[162,50332,50333,50335,50338,50341],{"class":164,"line":197},[162,50334,33821],{"class":172},[162,50336,50337],{"class":207}," PIL",[162,50339,50340],{"class":172}," import",[162,50342,50343],{"class":168}," Image\n",[162,50345,50346],{"class":164,"line":228},[162,50347,50348],{"class":361},"# os 用来处理文件夹和文件路径\n",[162,50350,50351,50353],{"class":164,"line":252},[162,50352,33478],{"class":172},[162,50354,48380],{"class":168},[162,50356,50357],{"class":164,"line":328},[162,50358,50359],{"class":361},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[162,50361,50362,50364,50366,50368],{"class":164,"line":466},[162,50363,33478],{"class":172},[162,50365,34463],{"class":168},[162,50367,34466],{"class":172},[162,50369,34469],{"class":168},[162,50371,50372],{"class":164,"line":471},[162,50373,301],{"emptyLinePlaceholder":300},[162,50375,50376],{"class":164,"line":687},[162,50377,50378],{"class":361},"# 文件夹路径，包含所有图片文件\n",[162,50380,50381,50384,50386],{"class":164,"line":692},[162,50382,50383],{"class":168},"folder_path ",[162,50385,173],{"class":172},[162,50387,50388],{"class":179}," 'data_cat_dog'\n",[162,50390,50391],{"class":164,"line":698},[162,50392,301],{"emptyLinePlaceholder":300},[162,50394,50395],{"class":164,"line":2955},[162,50396,50397],{"class":361},"# 初始化累积变量\n",[162,50399,50400,50403,50405],{"class":164,"line":2960},[162,50401,50402],{"class":168},"total_pixels ",[162,50404,173],{"class":172},[162,50406,902],{"class":207},[162,50408,50409,50412,50414,50417,50419,50421],{"class":164,"line":2971},[162,50410,50411],{"class":168},"sum_normalized_pixel_values ",[162,50413,173],{"class":172},[162,50415,50416],{"class":168}," np.zeros(",[162,50418,218],{"class":207},[162,50420,48882],{"class":168},[162,50422,50423],{"class":361},"# 如果是RGB图像，需要三个通道的均值和方差\n",[162,50425,50426],{"class":164,"line":2984},[162,50427,301],{"emptyLinePlaceholder":300},[162,50429,50430],{"class":164,"line":2989},[162,50431,50432],{"class":361},"# 遍历文件夹中的图片文件\n",[162,50434,50435,50437,50440,50442],{"class":164,"line":3011},[162,50436,808],{"class":172},[162,50438,50439],{"class":168}," root, dirs, files ",[162,50441,814],{"class":172},[162,50443,50444],{"class":168}," os.walk(folder_path):\n",[162,50446,50447,50449,50452,50454],{"class":164,"line":3022},[162,50448,6315],{"class":172},[162,50450,50451],{"class":168}," filename ",[162,50453,814],{"class":172},[162,50455,50456],{"class":168}," files:\n",[162,50458,50459,50461,50464,50467,50469,50472,50474,50477,50479,50482,50485],{"class":164,"line":3027},[162,50460,5614],{"class":172},[162,50462,50463],{"class":168}," filename.endswith((",[162,50465,50466],{"class":179},"'.jpg'",[162,50468,183],{"class":168},[162,50470,50471],{"class":179},"'.jpeg'",[162,50473,183],{"class":168},[162,50475,50476],{"class":179},"'.png'",[162,50478,183],{"class":168},[162,50480,50481],{"class":179},"'.bmp'",[162,50483,50484],{"class":168},")):  ",[162,50486,50487],{"class":361},"# 可根据实际情况添加其他格式\n",[162,50489,50490,50492,50494],{"class":164,"line":3046},[162,50491,48747],{"class":168},[162,50493,173],{"class":172},[162,50495,50496],{"class":168}," os.path.join(root, filename)\n",[162,50498,50499,50502,50504],{"class":164,"line":3052},[162,50500,50501],{"class":168},"            image ",[162,50503,173],{"class":172},[162,50505,50506],{"class":168}," Image.open(image_path)\n",[162,50508,50509,50512,50514],{"class":164,"line":3057},[162,50510,50511],{"class":168},"            image_array ",[162,50513,173],{"class":172},[162,50515,50516],{"class":168}," np.array(image)\n",[162,50518,50519],{"class":164,"line":3072},[162,50520,301],{"emptyLinePlaceholder":300},[162,50522,50523],{"class":164,"line":3077},[162,50524,50525],{"class":361},"            # 归一化像素值到0-1之间\n",[162,50527,50528,50531,50533,50536,50538],{"class":164,"line":3100},[162,50529,50530],{"class":168},"            normalized_image_array ",[162,50532,173],{"class":172},[162,50534,50535],{"class":168}," image_array ",[162,50537,946],{"class":172},[162,50539,50540],{"class":207}," 255.0\n",[162,50542,50543],{"class":164,"line":3140},[162,50544,301],{"emptyLinePlaceholder":300},[162,50546,50547],{"class":164,"line":4878},[162,50548,50549],{"class":361},"            # print(image_path)\n",[162,50551,50552],{"class":164,"line":4883},[162,50553,50554],{"class":361},"            # print(normalized_image_array.shape)\n",[162,50556,50557],{"class":164,"line":4897},[162,50558,50559],{"class":361},"            # 累积归一化后的像素值和像素数量\n",[162,50561,50562,50565,50567],{"class":164,"line":4902},[162,50563,50564],{"class":168},"            total_pixels ",[162,50566,926],{"class":172},[162,50568,50569],{"class":168}," normalized_image_array.size\n",[162,50571,50572],{"class":164,"line":5694},[162,50573,50574],{"class":361},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[162,50576,50577,50580,50582,50585,50588,50590,50592,50594,50596,50598],{"class":164,"line":5708},[162,50578,50579],{"class":168},"            sum_normalized_pixel_values ",[162,50581,926],{"class":172},[162,50583,50584],{"class":168}," np.sum(normalized_image_array, ",[162,50586,50587],{"class":671},"axis",[162,50589,173],{"class":172},[162,50591,604],{"class":168},[162,50593,312],{"class":207},[162,50595,183],{"class":168},[162,50597,208],{"class":207},[162,50599,586],{"class":168},[162,50601,50602],{"class":164,"line":5716},[162,50603,301],{"emptyLinePlaceholder":300},[162,50605,50606],{"class":164,"line":5721},[162,50607,50608],{"class":361},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[162,50610,50611,50614,50616,50619,50621],{"class":164,"line":5727},[162,50612,50613],{"class":168},"mean ",[162,50615,173],{"class":172},[162,50617,50618],{"class":168}," sum_normalized_pixel_values ",[162,50620,946],{"class":172},[162,50622,50623],{"class":168}," total_pixels\n",[162,50625,50626],{"class":164,"line":5733},[162,50627,301],{"emptyLinePlaceholder":300},[162,50629,50630,50633,50635,50637,50639],{"class":164,"line":5738},[162,50631,50632],{"class":168},"sum_squared_diff ",[162,50634,173],{"class":172},[162,50636,50416],{"class":168},[162,50638,218],{"class":207},[162,50640,434],{"class":168},[162,50642,50643],{"class":164,"line":11052},[162,50644,301],{"emptyLinePlaceholder":300},[162,50646,50647],{"class":164,"line":11076},[162,50648,50649],{"class":361},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[162,50651,50652],{"class":164,"line":11081},[162,50653,50654],{"class":361},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[162,50656,50657],{"class":164,"line":11087},[162,50658,50659],{"class":361},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[162,50661,50662],{"class":164,"line":11114},[162,50663,50664],{"class":361},"# Image.open(image_path)：打开图片\n",[162,50666,50667],{"class":164,"line":11119},[162,50668,50669],{"class":361},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[162,50671,50672,50674,50676,50678],{"class":164,"line":11125},[162,50673,808],{"class":172},[162,50675,50439],{"class":168},[162,50677,814],{"class":172},[162,50679,50444],{"class":168},[162,50681,50682,50684,50686,50688],{"class":164,"line":11137},[162,50683,6315],{"class":172},[162,50685,50451],{"class":168},[162,50687,814],{"class":172},[162,50689,50456],{"class":168},[162,50691,50692,50694,50696,50698,50700,50702,50704,50706,50708,50710],{"class":164,"line":11149},[162,50693,5614],{"class":172},[162,50695,50463],{"class":168},[162,50697,50466],{"class":179},[162,50699,183],{"class":168},[162,50701,50471],{"class":179},[162,50703,183],{"class":168},[162,50705,50476],{"class":179},[162,50707,183],{"class":168},[162,50709,50481],{"class":179},[162,50711,50712],{"class":168},")):\n",[162,50714,50715,50717,50719],{"class":164,"line":11161},[162,50716,48747],{"class":168},[162,50718,173],{"class":172},[162,50720,50496],{"class":168},[162,50722,50723,50725,50727],{"class":164,"line":12816},[162,50724,50501],{"class":168},[162,50726,173],{"class":172},[162,50728,50506],{"class":168},[162,50730,50731,50733,50735],{"class":164,"line":12841},[162,50732,50511],{"class":168},[162,50734,173],{"class":172},[162,50736,50516],{"class":168},[162,50738,50739],{"class":164,"line":12864},[162,50740,50525],{"class":361},[162,50742,50743,50745,50747,50749,50751],{"class":164,"line":12888},[162,50744,50530],{"class":168},[162,50746,173],{"class":172},[162,50748,50535],{"class":168},[162,50750,946],{"class":172},[162,50752,50540],{"class":207},[162,50754,50755],{"class":164,"line":12893},[162,50756,50554],{"class":361},[162,50758,50759],{"class":164,"line":12898},[162,50760,50761],{"class":361},"            # print(mean.shape)\n",[162,50763,50764],{"class":164,"line":12903},[162,50765,50549],{"class":361},[162,50767,50768],{"class":164,"line":12912},[162,50769,301],{"emptyLinePlaceholder":300},[162,50771,50772,50775],{"class":164,"line":12917},[162,50773,50774],{"class":172},"            try",[162,50776,2316],{"class":168},[162,50778,50779,50782,50784,50787,50789,50792,50794],{"class":164,"line":12923},[162,50780,50781],{"class":168},"                diff ",[162,50783,173],{"class":172},[162,50785,50786],{"class":168}," (normalized_image_array ",[162,50788,353],{"class":172},[162,50790,50791],{"class":168}," mean) ",[162,50793,2747],{"class":172},[162,50795,50796],{"class":207}," 2\n",[162,50798,50799,50802,50804,50807,50809,50811,50813,50815,50817,50819],{"class":164,"line":12944},[162,50800,50801],{"class":168},"                sum_squared_diff ",[162,50803,926],{"class":172},[162,50805,50806],{"class":168}," np.sum(diff, ",[162,50808,50587],{"class":671},[162,50810,173],{"class":172},[162,50812,604],{"class":168},[162,50814,312],{"class":207},[162,50816,183],{"class":168},[162,50818,208],{"class":207},[162,50820,586],{"class":168},[162,50822,50823,50826],{"class":164,"line":12950},[162,50824,50825],{"class":172},"            except",[162,50827,2316],{"class":168},[162,50829,50830,50833,50835,50837,50840],{"class":164,"line":12964},[162,50831,50832],{"class":207},"                print",[162,50834,604],{"class":168},[162,50836,961],{"class":172},[162,50838,50839],{"class":179},"\"捕获到自定义异常\"",[162,50841,434],{"class":168},[162,50843,50844],{"class":164,"line":12970},[162,50845,50846],{"class":361},"            # diff = (normalized_image_array - mean) ** 2\n",[162,50848,50849],{"class":164,"line":12997},[162,50850,50851],{"class":361},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[162,50853,50854],{"class":164,"line":13006},[162,50855,301],{"emptyLinePlaceholder":300},[162,50857,50858,50861,50863,50866,50868],{"class":164,"line":13012},[162,50859,50860],{"class":168},"variance ",[162,50862,173],{"class":172},[162,50864,50865],{"class":168}," sum_squared_diff ",[162,50867,946],{"class":172},[162,50869,50623],{"class":168},[162,50871,50872],{"class":164,"line":13020},[162,50873,301],{"emptyLinePlaceholder":300},[162,50875,50876,50878,50880,50883],{"class":164,"line":13025},[162,50877,306],{"class":207},[162,50879,604],{"class":168},[162,50881,50882],{"class":179},"\"Mean:\"",[162,50884,50885],{"class":168},", mean)\n",[162,50887,50888,50890,50892,50895],{"class":164,"line":19695},[162,50889,306],{"class":207},[162,50891,604],{"class":168},[162,50893,50894],{"class":179},"\"Variance:\"",[162,50896,50897],{"class":168},", variance)\n",[153,50899,50901],{"className":155,"code":50900,"language":157,"meta":158,"style":158},"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",[71,50902,50903,50909,50915,50925,50931,50941,50955,50965,50975,50985,50989,50999,51009,51013,51017,51025,51030,51035,51054,51058,51063,51068,51073,51078,51119,51124,51134,51139,51152,51157,51162,51167,51172,51177,51181,51186,51191,51213,51217,51249,51263,51273,51283,51287,51297,51311,51321,51331,51341,51347,51351,51355,51359,51363,51367,51375,51395,51399,51403,51407,51411,51427,51431,51435,51443,51447,51451,51459,51463,51467,51471,51479,51483,51487,51491,51499,51503,51511,51515,51523,51527,51535,51539,51547,51551,51555,51563,51567,51571,51583,51607,51621,51625,51629,51633,51641,51645,51653,51657,51665,51669,51677,51681,51689,51693,51701,51705,51717,51721,51729,51733,51741,51745,51749,51753,51757,51765,51769,51785,51789,51797,51801,51805,51809,51813,51817,51821,51825,51841,51845,51857,51861,51873,51877,51889,51893,51901,51905,51913,51917,51921,51925,51931,51935,51943,51947,51963,51967,51975,51979,51995,52007,52011,52023,52027,52031,52039,52043,52047,52055,52059,52067,52071,52079,52083,52087,52129,52171,52175,52179,52195,52199,52215,52219,52223,52231,52235,52239,52251,52289,52293,52297,52305,52309,52323,52333,52339,52345,52351,52357,52361,52365,52371,52375,52379,52387,52391,52409,52413,52417,52421,52437,52441,52445,52449,52453,52457,52477,52497,52501,52505,52509,52517,52525,52529,52545,52565,52585,52589,52594,52603,52612,52617,52622,52627,52640,52645,52654,52663,52680],{"__ignoreMap":158},[162,50904,50905,50907],{"class":164,"line":165},[162,50906,33478],{"class":172},[162,50908,34901],{"class":168},[162,50910,50911,50913],{"class":164,"line":197},[162,50912,33478],{"class":172},[162,50914,34908],{"class":168},[162,50916,50917,50919,50921,50923],{"class":164,"line":228},[162,50918,33478],{"class":172},[162,50920,34919],{"class":168},[162,50922,34466],{"class":172},[162,50924,34924],{"class":168},[162,50926,50927,50929],{"class":164,"line":252},[162,50928,33478],{"class":172},[162,50930,33481],{"class":168},[162,50932,50933,50935,50937,50939],{"class":164,"line":328},[162,50934,33821],{"class":172},[162,50936,34498],{"class":168},[162,50938,33478],{"class":172},[162,50940,34941],{"class":168},[162,50942,50943,50945,50947,50949,50952],{"class":164,"line":466},[162,50944,33821],{"class":172},[162,50946,34451],{"class":168},[162,50948,33478],{"class":172},[162,50950,50951],{"class":168}," ImageFolder ",[162,50953,50954],{"class":361},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[162,50956,50957,50959,50961,50963],{"class":164,"line":471},[162,50958,33821],{"class":172},[162,50960,34481],{"class":168},[162,50962,33478],{"class":172},[162,50964,34486],{"class":168},[162,50966,50967,50969,50971,50973],{"class":164,"line":687},[162,50968,33478],{"class":172},[162,50970,34498],{"class":168},[162,50972,34466],{"class":172},[162,50974,34503],{"class":168},[162,50976,50977,50979,50981,50983],{"class":164,"line":692},[162,50978,33478],{"class":172},[162,50980,34515],{"class":168},[162,50982,34466],{"class":172},[162,50984,34520],{"class":168},[162,50986,50987],{"class":164,"line":698},[162,50988,34986],{"class":361},[162,50990,50991,50993,50995,50997],{"class":164,"line":2955},[162,50992,33821],{"class":172},[162,50994,34993],{"class":168},[162,50996,33478],{"class":172},[162,50998,46106],{"class":168},[162,51000,51001,51003,51005,51007],{"class":164,"line":2960},[162,51002,33821],{"class":172},[162,51004,33824],{"class":168},[162,51006,33478],{"class":172},[162,51008,33829],{"class":168},[162,51010,51011],{"class":164,"line":2971},[162,51012,301],{"emptyLinePlaceholder":300},[162,51014,51015],{"class":164,"line":2984},[162,51016,35021],{"class":361},[162,51018,51019,51021,51023],{"class":164,"line":2989},[162,51020,35026],{"class":172},[162,51022,35029],{"class":5082},[162,51024,35032],{"class":168},[162,51026,51027],{"class":164,"line":3011},[162,51028,51029],{"class":361},"    # 导入自己的数据集，并进行数据处理\n",[162,51031,51032],{"class":164,"line":3022},[162,51033,51034],{"class":361},"    # 定义数据集的路径\n",[162,51036,51037,51040,51042,51044,51046,51048,51052],{"class":164,"line":3027},[162,51038,51039],{"class":207},"    ROOT_PATH",[162,51041,173],{"class":172},[162,51043,3955],{"class":172},[162,51045,979],{"class":179},[162,51047,3847],{"class":207},[162,51049,51051],{"class":51050},"sA_wV","\u002Fdata\u002Ftrain",[162,51053,28225],{"class":179},[162,51055,51056],{"class":164,"line":3046},[162,51057,301],{"emptyLinePlaceholder":300},[162,51059,51060],{"class":164,"line":3052},[162,51061,51062],{"class":361},"    # 定义归一化方法\n",[162,51064,51065],{"class":164,"line":3057},[162,51066,51067],{"class":361},"    # 这里需要先计算一下数据集的均值和方差\n",[162,51069,51070],{"class":164,"line":3072},[162,51071,51072],{"class":361},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[162,51074,51075],{"class":164,"line":3077},[162,51076,51077],{"class":361},"    # 第一个参数是均值，第二个参数是方差\n",[162,51079,51080,51083,51085,51088,51091,51093,51096,51098,51101,51104,51107,51109,51112,51114,51117],{"class":164,"line":3100},[162,51081,51082],{"class":168},"    normalize",[162,51084,173],{"class":172},[162,51086,51087],{"class":168},"transforms.Normalize([",[162,51089,51090],{"class":207},"0.162",[162,51092,3670],{"class":168},[162,51094,51095],{"class":207},"0.151",[162,51097,3670],{"class":168},[162,51099,51100],{"class":207},"0.138",[162,51102,51103],{"class":168},"],[",[162,51105,51106],{"class":207},"0.058",[162,51108,3670],{"class":168},[162,51110,51111],{"class":207},"0.052",[162,51113,3670],{"class":168},[162,51115,51116],{"class":207},"0.048",[162,51118,315],{"class":168},[162,51120,51121],{"class":164,"line":3140},[162,51122,51123],{"class":361},"    # 定义数据集处理方法变量\n",[162,51125,51126,51129,51131],{"class":164,"line":4878},[162,51127,51128],{"class":168},"    train_transform",[162,51130,173],{"class":172},[162,51132,51133],{"class":168},"transforms.Compose([\n",[162,51135,51136],{"class":164,"line":4883},[162,51137,51138],{"class":361},"        # 调整图像大小为224*224\n",[162,51140,51141,51144,51146,51148,51150],{"class":164,"line":4897},[162,51142,51143],{"class":168},"        transforms.Resize((",[162,51145,34582],{"class":207},[162,51147,3670],{"class":168},[162,51149,34582],{"class":207},[162,51151,45697],{"class":168},[162,51153,51154],{"class":164,"line":4902},[162,51155,51156],{"class":361},"        # 将图像转换为张量\n",[162,51158,51159],{"class":164,"line":5694},[162,51160,51161],{"class":168},"        transforms.ToTensor(),\n",[162,51163,51164],{"class":164,"line":5708},[162,51165,51166],{"class":168},"        normalize])\n",[162,51168,51169],{"class":164,"line":5716},[162,51170,51171],{"class":361},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[162,51173,51174],{"class":164,"line":5721},[162,51175,51176],{"class":361},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[162,51178,51179],{"class":164,"line":5727},[162,51180,301],{"emptyLinePlaceholder":300},[162,51182,51183],{"class":164,"line":5733},[162,51184,51185],{"class":361},"    # 加载数据集\n",[162,51187,51188],{"class":164,"line":5738},[162,51189,51190],{"class":361},"    # 传入数据集路径与处理方法\n",[162,51192,51193,51195,51197,51200,51203,51205,51208,51210],{"class":164,"line":11052},[162,51194,35037],{"class":168},[162,51196,173],{"class":172},[162,51198,51199],{"class":168},"ImageFolder(",[162,51201,51202],{"class":207},"ROOT_PATH",[162,51204,3670],{"class":168},[162,51206,51207],{"class":671},"transform",[162,51209,173],{"class":172},[162,51211,51212],{"class":168},"train_transform)\n",[162,51214,51215],{"class":164,"line":11076},[162,51216,301],{"emptyLinePlaceholder":300},[162,51218,51219,51221,51223,51225,51227,51229,51231,51233,51235,51237,51239,51241,51243,51245,51247],{"class":164,"line":11081},[162,51220,35089],{"class":168},[162,51222,173],{"class":172},[162,51224,35094],{"class":168},[162,51226,35097],{"class":207},[162,51228,604],{"class":168},[162,51230,35102],{"class":207},[162,51232,3745],{"class":172},[162,51234,607],{"class":207},[162,51236,35109],{"class":168},[162,51238,35097],{"class":207},[162,51240,604],{"class":168},[162,51242,35116],{"class":207},[162,51244,3745],{"class":172},[162,51246,607],{"class":207},[162,51248,35123],{"class":168},[162,51250,51251,51253,51255,51257,51259,51261],{"class":164,"line":11087},[162,51252,35128],{"class":168},[162,51254,173],{"class":172},[162,51256,35133],{"class":168},[162,51258,34618],{"class":671},[162,51260,173],{"class":172},[162,51262,34623],{"class":168},[162,51264,51265,51267,51269,51271],{"class":164,"line":11114},[162,51266,35144],{"class":671},[162,51268,173],{"class":172},[162,51270,3498],{"class":207},[162,51272,1735],{"class":168},[162,51274,51275,51277,51279,51281],{"class":164,"line":11119},[162,51276,35156],{"class":671},[162,51278,173],{"class":172},[162,51280,247],{"class":207},[162,51282,1735],{"class":168},[162,51284,51285],{"class":164,"line":11125},[162,51286,35167],{"class":361},[162,51288,51289,51291,51293,51295],{"class":164,"line":11137},[162,51290,35172],{"class":671},[162,51292,173],{"class":172},[162,51294,3687],{"class":207},[162,51296,434],{"class":168},[162,51298,51299,51301,51303,51305,51307,51309],{"class":164,"line":11149},[162,51300,35183],{"class":168},[162,51302,173],{"class":172},[162,51304,34615],{"class":168},[162,51306,34618],{"class":671},[162,51308,173],{"class":172},[162,51310,35194],{"class":168},[162,51312,51313,51315,51317,51319],{"class":164,"line":11161},[162,51314,35199],{"class":671},[162,51316,173],{"class":172},[162,51318,3498],{"class":207},[162,51320,1735],{"class":168},[162,51322,51323,51325,51327,51329],{"class":164,"line":12816},[162,51324,35210],{"class":671},[162,51326,173],{"class":172},[162,51328,247],{"class":207},[162,51330,1735],{"class":168},[162,51332,51333,51335,51337,51339],{"class":164,"line":12841},[162,51334,35221],{"class":671},[162,51336,173],{"class":172},[162,51338,3687],{"class":207},[162,51340,434],{"class":168},[162,51342,51343,51345],{"class":164,"line":12864},[162,51344,7203],{"class":172},[162,51346,35234],{"class":168},[162,51348,51349],{"class":164,"line":12888},[162,51350,301],{"emptyLinePlaceholder":300},[162,51352,51353],{"class":164,"line":12893},[162,51354,35243],{"class":361},[162,51356,51357],{"class":164,"line":12898},[162,51358,35248],{"class":361},[162,51360,51361],{"class":164,"line":12903},[162,51362,301],{"emptyLinePlaceholder":300},[162,51364,51365],{"class":164,"line":12912},[162,51366,35257],{"class":361},[162,51368,51369,51371,51373],{"class":164,"line":12917},[162,51370,35026],{"class":172},[162,51372,35264],{"class":5082},[162,51374,35267],{"class":168},[162,51376,51377,51379,51381,51383,51385,51387,51389,51391,51393],{"class":164,"line":12923},[162,51378,34321],{"class":168},[162,51380,173],{"class":172},[162,51382,33536],{"class":168},[162,51384,34328],{"class":179},[162,51386,4828],{"class":172},[162,51388,34333],{"class":168},[162,51390,2313],{"class":172},[162,51392,35286],{"class":179},[162,51394,434],{"class":168},[162,51396,51397],{"class":164,"line":12944},[162,51398,301],{"emptyLinePlaceholder":300},[162,51400,51401],{"class":164,"line":12950},[162,51402,35301],{"class":361},[162,51404,51405],{"class":164,"line":12964},[162,51406,35306],{"class":361},[162,51408,51409],{"class":164,"line":12970},[162,51410,35311],{"class":361},[162,51412,51413,51415,51417,51419,51421,51423,51425],{"class":164,"line":12997},[162,51414,35316],{"class":168},[162,51416,173],{"class":172},[162,51418,35321],{"class":168},[162,51420,35324],{"class":671},[162,51422,173],{"class":172},[162,51424,35329],{"class":207},[162,51426,434],{"class":168},[162,51428,51429],{"class":164,"line":13006},[162,51430,301],{"emptyLinePlaceholder":300},[162,51432,51433],{"class":164,"line":13012},[162,51434,35340],{"class":361},[162,51436,51437,51439,51441],{"class":164,"line":13020},[162,51438,35345],{"class":168},[162,51440,173],{"class":172},[162,51442,35350],{"class":168},[162,51444,51445],{"class":164,"line":13025},[162,51446,301],{"emptyLinePlaceholder":300},[162,51448,51449],{"class":164,"line":19695},[162,51450,35359],{"class":361},[162,51452,51453,51455,51457],{"class":164,"line":19701},[162,51454,34373],{"class":168},[162,51456,173],{"class":172},[162,51458,35368],{"class":168},[162,51460,51461],{"class":164,"line":19724},[162,51462,35373],{"class":361},[162,51464,51465],{"class":164,"line":19730},[162,51466,35378],{"class":361},[162,51468,51469],{"class":164,"line":19753},[162,51470,35383],{"class":361},[162,51472,51473,51475,51477],{"class":164,"line":19767},[162,51474,35388],{"class":168},[162,51476,173],{"class":172},[162,51478,35393],{"class":168},[162,51480,51481],{"class":164,"line":19787},[162,51482,301],{"emptyLinePlaceholder":300},[162,51484,51485],{"class":164,"line":19793},[162,51486,35406],{"class":361},[162,51488,51489],{"class":164,"line":19804},[162,51490,35411],{"class":361},[162,51492,51493,51495,51497],{"class":164,"line":19827},[162,51494,35416],{"class":168},[162,51496,173],{"class":172},[162,51498,35421],{"class":207},[162,51500,51501],{"class":164,"line":19849},[162,51502,35426],{"class":361},[162,51504,51505,51507,51509],{"class":164,"line":19854},[162,51506,35431],{"class":168},[162,51508,173],{"class":172},[162,51510,35436],{"class":168},[162,51512,51513],{"class":164,"line":19860},[162,51514,35441],{"class":361},[162,51516,51517,51519,51521],{"class":164,"line":19874},[162,51518,35446],{"class":168},[162,51520,173],{"class":172},[162,51522,35436],{"class":168},[162,51524,51525],{"class":164,"line":19887},[162,51526,35455],{"class":361},[162,51528,51529,51531,51533],{"class":164,"line":19892},[162,51530,35460],{"class":168},[162,51532,173],{"class":172},[162,51534,35436],{"class":168},[162,51536,51537],{"class":164,"line":19906},[162,51538,35469],{"class":361},[162,51540,51541,51543,51545],{"class":164,"line":19911},[162,51542,35474],{"class":168},[162,51544,173],{"class":172},[162,51546,35436],{"class":168},[162,51548,51549],{"class":164,"line":19917},[162,51550,301],{"emptyLinePlaceholder":300},[162,51552,51553],{"class":164,"line":19922},[162,51554,35487],{"class":361},[162,51556,51557,51559,51561],{"class":164,"line":19936},[162,51558,35492],{"class":168},[162,51560,173],{"class":172},[162,51562,35497],{"class":168},[162,51564,51565],{"class":164,"line":19941},[162,51566,301],{"emptyLinePlaceholder":300},[162,51568,51569],{"class":164,"line":19946},[162,51570,35510],{"class":361},[162,51572,51573,51575,51577,51579,51581],{"class":164,"line":19960},[162,51574,6315],{"class":172},[162,51576,35517],{"class":168},[162,51578,814],{"class":172},[162,51580,2647],{"class":207},[162,51582,35524],{"class":168},[162,51584,51585,51587,51589,51591,51593,51595,51597,51599,51601,51603,51605],{"class":164,"line":19972},[162,51586,2300],{"class":207},[162,51588,604],{"class":168},[162,51590,35533],{"class":179},[162,51592,1532],{"class":207},[162,51594,946],{"class":179},[162,51596,1532],{"class":207},[162,51598,979],{"class":179},[162,51600,35544],{"class":168},[162,51602,353],{"class":172},[162,51604,208],{"class":207},[162,51606,586],{"class":168},[162,51608,51609,51611,51613,51615,51617,51619],{"class":164,"line":19977},[162,51610,2300],{"class":207},[162,51612,604],{"class":168},[162,51614,35559],{"class":179},[162,51616,3745],{"class":172},[162,51618,1006],{"class":207},[162,51620,434],{"class":168},[162,51622,51623],{"class":164,"line":19990},[162,51624,301],{"emptyLinePlaceholder":300},[162,51626,51627],{"class":164,"line":19995},[162,51628,35574],{"class":361},[162,51630,51631],{"class":164,"line":20000},[162,51632,35579],{"class":361},[162,51634,51635,51637,51639],{"class":164,"line":20005},[162,51636,35584],{"class":168},[162,51638,173],{"class":172},[162,51640,35421],{"class":207},[162,51642,51643],{"class":164,"line":20018},[162,51644,35593],{"class":361},[162,51646,51647,51649,51651],{"class":164,"line":20023},[162,51648,35598],{"class":168},[162,51650,173],{"class":172},[162,51652,6200],{"class":207},[162,51654,51655],{"class":164,"line":35709},[162,51656,35607],{"class":361},[162,51658,51659,51661,51663],{"class":164,"line":35715},[162,51660,35612],{"class":168},[162,51662,173],{"class":172},[162,51664,35421],{"class":207},[162,51666,51667],{"class":164,"line":35721},[162,51668,35621],{"class":361},[162,51670,51671,51673,51675],{"class":164,"line":35727},[162,51672,35626],{"class":168},[162,51674,173],{"class":172},[162,51676,6200],{"class":207},[162,51678,51679],{"class":164,"line":35733},[162,51680,35635],{"class":361},[162,51682,51683,51685,51687],{"class":164,"line":35744},[162,51684,35640],{"class":168},[162,51686,173],{"class":172},[162,51688,6200],{"class":207},[162,51690,51691],{"class":164,"line":35750},[162,51692,35649],{"class":361},[162,51694,51695,51697,51699],{"class":164,"line":35770},[162,51696,35654],{"class":168},[162,51698,173],{"class":172},[162,51700,6200],{"class":207},[162,51702,51703],{"class":164,"line":35776},[162,51704,35663],{"class":361},[162,51706,51707,51709,51711,51713,51715],{"class":164,"line":35787},[162,51708,6517],{"class":172},[162,51710,34682],{"class":168},[162,51712,814],{"class":172},[162,51714,845],{"class":207},[162,51716,35676],{"class":168},[162,51718,51719],{"class":164,"line":35793},[162,51720,35681],{"class":361},[162,51722,51723,51725,51727],{"class":164,"line":35799},[162,51724,35686],{"class":168},[162,51726,173],{"class":172},[162,51728,35691],{"class":168},[162,51730,51731],{"class":164,"line":35805},[162,51732,35696],{"class":361},[162,51734,51735,51737,51739],{"class":164,"line":35811},[162,51736,35701],{"class":168},[162,51738,173],{"class":172},[162,51740,35706],{"class":168},[162,51742,51743],{"class":164,"line":35817},[162,51744,35712],{"class":361},[162,51746,51747],{"class":164,"line":35823},[162,51748,35718],{"class":168},[162,51750,51751],{"class":164,"line":35829},[162,51752,35724],{"class":361},[162,51754,51755],{"class":164,"line":35849},[162,51756,35730],{"class":361},[162,51758,51759,51761,51763],{"class":164,"line":35855},[162,51760,35736],{"class":168},[162,51762,173],{"class":172},[162,51764,35741],{"class":168},[162,51766,51767],{"class":164,"line":35871},[162,51768,35747],{"class":361},[162,51770,51771,51773,51775,51777,51779,51781,51783],{"class":164,"line":35877},[162,51772,35753],{"class":168},[162,51774,173],{"class":172},[162,51776,35758],{"class":168},[162,51778,35761],{"class":671},[162,51780,173],{"class":172},[162,51782,208],{"class":207},[162,51784,434],{"class":168},[162,51786,51787],{"class":164,"line":35891},[162,51788,35773],{"class":361},[162,51790,51791,51793,51795],{"class":164,"line":35897},[162,51792,35779],{"class":168},[162,51794,173],{"class":172},[162,51796,35784],{"class":168},[162,51798,51799],{"class":164,"line":35912},[162,51800,35790],{"class":361},[162,51802,51803],{"class":164,"line":35918},[162,51804,35796],{"class":168},[162,51806,51807],{"class":164,"line":35927},[162,51808,35802],{"class":361},[162,51810,51811],{"class":164,"line":35933},[162,51812,35808],{"class":168},[162,51814,51815],{"class":164,"line":35942},[162,51816,35814],{"class":361},[162,51818,51819],{"class":164,"line":35948},[162,51820,35820],{"class":168},[162,51822,51823],{"class":164,"line":35954},[162,51824,35826],{"class":361},[162,51826,51827,51829,51831,51833,51835,51837,51839],{"class":164,"line":35963},[162,51828,35832],{"class":168},[162,51830,926],{"class":172},[162,51832,35837],{"class":168},[162,51834,3745],{"class":172},[162,51836,35842],{"class":168},[162,51838,312],{"class":207},[162,51840,434],{"class":168},[162,51842,51843],{"class":164,"line":35969},[162,51844,35852],{"class":361},[162,51846,51847,51849,51851,51853,51855],{"class":164,"line":35980},[162,51848,35858],{"class":168},[162,51850,926],{"class":172},[162,51852,35863],{"class":168},[162,51854,2292],{"class":172},[162,51856,35868],{"class":168},[162,51858,51859],{"class":164,"line":35986},[162,51860,35874],{"class":361},[162,51862,51863,51865,51867,51869,51871],{"class":164,"line":36005},[162,51864,35880],{"class":168},[162,51866,926],{"class":172},[162,51868,35842],{"class":168},[162,51870,312],{"class":207},[162,51872,434],{"class":168},[162,51874,51875],{"class":164,"line":36011},[162,51876,35894],{"class":361},[162,51878,51879,51881,51883,51885,51887],{"class":164,"line":36022},[162,51880,6517],{"class":172},[162,51882,35902],{"class":168},[162,51884,814],{"class":172},[162,51886,845],{"class":207},[162,51888,35909],{"class":168},[162,51890,51891],{"class":164,"line":36028},[162,51892,35915],{"class":361},[162,51894,51895,51897,51899],{"class":164,"line":36048},[162,51896,35686],{"class":168},[162,51898,173],{"class":172},[162,51900,35691],{"class":168},[162,51902,51903],{"class":164,"line":36064},[162,51904,35930],{"class":361},[162,51906,51907,51909,51911],{"class":164,"line":36070},[162,51908,35701],{"class":168},[162,51910,173],{"class":172},[162,51912,35706],{"class":168},[162,51914,51915],{"class":164,"line":36084},[162,51916,35945],{"class":361},[162,51918,51919],{"class":164,"line":36090},[162,51920,35951],{"class":168},[162,51922,51923],{"class":164,"line":36096},[162,51924,39431],{"class":361},[162,51926,51927,51929],{"class":164,"line":36107},[162,51928,35957],{"class":172},[162,51930,35960],{"class":168},[162,51932,51933],{"class":164,"line":36113},[162,51934,35966],{"class":361},[162,51936,51937,51939,51941],{"class":164,"line":36119},[162,51938,39446],{"class":168},[162,51940,173],{"class":172},[162,51942,35741],{"class":168},[162,51944,51945],{"class":164,"line":36129},[162,51946,35983],{"class":361},[162,51948,51949,51951,51953,51955,51957,51959,51961],{"class":164,"line":36135},[162,51950,39459],{"class":168},[162,51952,173],{"class":172},[162,51954,35758],{"class":168},[162,51956,35761],{"class":671},[162,51958,173],{"class":172},[162,51960,208],{"class":207},[162,51962,434],{"class":168},[162,51964,51965],{"class":164,"line":36146},[162,51966,36008],{"class":361},[162,51968,51969,51971,51973],{"class":164,"line":36152},[162,51970,39480],{"class":168},[162,51972,173],{"class":172},[162,51974,35784],{"class":168},[162,51976,51977],{"class":164,"line":36162},[162,51978,36025],{"class":361},[162,51980,51981,51983,51985,51987,51989,51991,51993],{"class":164,"line":36167},[162,51982,39493],{"class":168},[162,51984,926],{"class":172},[162,51986,39498],{"class":168},[162,51988,3745],{"class":172},[162,51990,35842],{"class":168},[162,51992,312],{"class":207},[162,51994,434],{"class":168},[162,51996,51997,51999,52001,52003,52005],{"class":164,"line":36173},[162,51998,39511],{"class":168},[162,52000,926],{"class":172},[162,52002,35863],{"class":168},[162,52004,2292],{"class":172},[162,52006,35868],{"class":168},[162,52008,52009],{"class":164,"line":36222},[162,52010,39524],{"class":361},[162,52012,52013,52015,52017,52019,52021],{"class":164,"line":36269},[162,52014,39529],{"class":168},[162,52016,926],{"class":172},[162,52018,35842],{"class":168},[162,52020,312],{"class":207},[162,52022,434],{"class":168},[162,52024,52025],{"class":164,"line":36274},[162,52026,36087],{"class":361},[162,52028,52029],{"class":164,"line":36280},[162,52030,36093],{"class":361},[162,52032,52033,52035,52037],{"class":164,"line":36299},[162,52034,36099],{"class":168},[162,52036,946],{"class":172},[162,52038,36104],{"class":168},[162,52040,52041],{"class":164,"line":36305},[162,52042,36110],{"class":361},[162,52044,52045],{"class":164,"line":36324},[162,52046,36116],{"class":361},[162,52048,52049,52051,52053],{"class":164,"line":36330},[162,52050,36122],{"class":168},[162,52052,946],{"class":172},[162,52054,36104],{"class":168},[162,52056,52057],{"class":164,"line":36336},[162,52058,36132],{"class":361},[162,52060,52061,52063,52065],{"class":164,"line":36346},[162,52062,36138],{"class":168},[162,52064,946],{"class":172},[162,52066,36143],{"class":168},[162,52068,52069],{"class":164,"line":36351},[162,52070,36149],{"class":361},[162,52072,52073,52075,52077],{"class":164,"line":36357},[162,52074,36155],{"class":168},[162,52076,946],{"class":172},[162,52078,36143],{"class":168},[162,52080,52081],{"class":164,"line":36373},[162,52082,301],{"emptyLinePlaceholder":300},[162,52084,52085],{"class":164,"line":36418},[162,52086,36170],{"class":361},[162,52088,52089,52091,52093,52095,52097,52099,52101,52103,52105,52107,52109,52111,52113,52115,52117,52119,52121,52123,52125,52127],{"class":164,"line":36424},[162,52090,2300],{"class":207},[162,52092,604],{"class":168},[162,52094,6706],{"class":179},[162,52096,1532],{"class":207},[162,52098,36184],{"class":179},[162,52100,967],{"class":207},[162,52102,36189],{"class":172},[162,52104,976],{"class":207},[162,52106,36194],{"class":179},[162,52108,967],{"class":207},[162,52110,36189],{"class":172},[162,52112,976],{"class":207},[162,52114,6706],{"class":179},[162,52116,36205],{"class":168},[162,52118,353],{"class":172},[162,52120,208],{"class":207},[162,52122,36212],{"class":168},[162,52124,353],{"class":172},[162,52126,208],{"class":207},[162,52128,36219],{"class":168},[162,52130,52131,52133,52135,52137,52139,52141,52143,52145,52147,52149,52151,52153,52155,52157,52159,52161,52163,52165,52167,52169],{"class":164,"line":36430},[162,52132,2300],{"class":207},[162,52134,604],{"class":168},[162,52136,6706],{"class":179},[162,52138,1532],{"class":207},[162,52140,36233],{"class":179},[162,52142,967],{"class":207},[162,52144,36189],{"class":172},[162,52146,976],{"class":207},[162,52148,36242],{"class":179},[162,52150,967],{"class":207},[162,52152,36189],{"class":172},[162,52154,976],{"class":207},[162,52156,6706],{"class":179},[162,52158,36253],{"class":168},[162,52160,353],{"class":172},[162,52162,208],{"class":207},[162,52164,36260],{"class":168},[162,52166,353],{"class":172},[162,52168,208],{"class":207},[162,52170,36219],{"class":168},[162,52172,52173],{"class":164,"line":36436},[162,52174,301],{"emptyLinePlaceholder":300},[162,52176,52177],{"class":164,"line":36447},[162,52178,36277],{"class":361},[162,52180,52181,52183,52185,52187,52189,52191,52193],{"class":164,"line":36453},[162,52182,5614],{"class":172},[162,52184,36285],{"class":168},[162,52186,353],{"class":172},[162,52188,208],{"class":207},[162,52190,3120],{"class":168},[162,52192,3000],{"class":172},[162,52194,36296],{"class":168},[162,52196,52197],{"class":164,"line":36459},[162,52198,36302],{"class":361},[162,52200,52201,52203,52205,52207,52209,52211,52213],{"class":164,"line":36465},[162,52202,36308],{"class":168},[162,52204,3354],{"class":207},[162,52206,173],{"class":172},[162,52208,36315],{"class":168},[162,52210,353],{"class":172},[162,52212,208],{"class":207},[162,52214,194],{"class":168},[162,52216,52217],{"class":164,"line":36483},[162,52218,36327],{"class":361},[162,52220,52221],{"class":164,"line":36497},[162,52222,36333],{"class":361},[162,52224,52225,52227,52229],{"class":164,"line":36506},[162,52226,36339],{"class":168},[162,52228,173],{"class":172},[162,52230,35393],{"class":168},[162,52232,52233],{"class":164,"line":36515},[162,52234,301],{"emptyLinePlaceholder":300},[162,52236,52237],{"class":164,"line":36524},[162,52238,36354],{"class":361},[162,52240,52241,52243,52245,52247,52249],{"class":164,"line":36533},[162,52242,36360],{"class":168},[162,52244,173],{"class":172},[162,52246,36365],{"class":168},[162,52248,353],{"class":172},[162,52250,36370],{"class":168},[162,52252,52253,52255,52257,52259,52261,52263,52265,52267,52269,52271,52273,52275,52277,52279,52281,52283,52285,52287],{"class":164,"line":36539},[162,52254,2300],{"class":207},[162,52256,604],{"class":168},[162,52258,36380],{"class":179},[162,52260,967],{"class":207},[162,52262,36385],{"class":172},[162,52264,976],{"class":207},[162,52266,3833],{"class":179},[162,52268,967],{"class":207},[162,52270,36385],{"class":172},[162,52272,976],{"class":207},[162,52274,36398],{"class":179},[162,52276,36401],{"class":168},[162,52278,36404],{"class":172},[162,52280,4184],{"class":207},[162,52282,36409],{"class":168},[162,52284,2708],{"class":172},[162,52286,4184],{"class":207},[162,52288,586],{"class":168},[162,52290,52291],{"class":164,"line":36545},[162,52292,39808],{"class":361},[162,52294,52295],{"class":164,"line":36553},[162,52296,39813],{"class":361},[162,52298,52299,52301,52303],{"class":164,"line":36558},[162,52300,39818],{"class":168},[162,52302,36442],{"class":179},[162,52304,434],{"class":168},[162,52306,52307],{"class":164,"line":36564},[162,52308,36462],{"class":361},[162,52310,52311,52313,52315,52317,52319,52321],{"class":164,"line":36575},[162,52312,36468],{"class":168},[162,52314,173],{"class":172},[162,52316,36473],{"class":168},[162,52318,36476],{"class":671},[162,52320,173],{"class":172},[162,52322,4685],{"class":168},[162,52324,52325,52327,52329,52331],{"class":164,"line":36581},[162,52326,36486],{"class":179},[162,52328,1332],{"class":168},[162,52330,36491],{"class":207},[162,52332,36494],{"class":168},[162,52334,52335,52337],{"class":164,"line":36601},[162,52336,36500],{"class":179},[162,52338,36503],{"class":168},[162,52340,52341,52343],{"class":164,"line":36607},[162,52342,36509],{"class":179},[162,52344,36512],{"class":168},[162,52346,52347,52349],{"class":164,"line":36613},[162,52348,36518],{"class":179},[162,52350,36521],{"class":168},[162,52352,52353,52355],{"class":164,"line":36619},[162,52354,36527],{"class":179},[162,52356,36530],{"class":168},[162,52358,52359],{"class":164,"line":36636},[162,52360,36536],{"class":168},[162,52362,52363],{"class":164,"line":36642},[162,52364,36542],{"class":361},[162,52366,52367,52369],{"class":164,"line":36648},[162,52368,7203],{"class":172},[162,52370,36550],{"class":168},[162,52372,52373],{"class":164,"line":36654},[162,52374,301],{"emptyLinePlaceholder":300},[162,52376,52377],{"class":164,"line":36660},[162,52378,36561],{"class":361},[162,52380,52381,52383,52385],{"class":164,"line":36666},[162,52382,35026],{"class":172},[162,52384,36569],{"class":5082},[162,52386,36572],{"class":168},[162,52388,52389],{"class":164,"line":36693},[162,52390,36578],{"class":361},[162,52392,52393,52395,52397,52399,52401,52403,52405,52407],{"class":164,"line":36717},[162,52394,36584],{"class":168},[162,52396,34772],{"class":671},[162,52398,173],{"class":172},[162,52400,604],{"class":168},[162,52402,3788],{"class":207},[162,52404,3670],{"class":168},[162,52406,223],{"class":207},[162,52408,586],{"class":168},[162,52410,52411],{"class":164,"line":36723},[162,52412,36604],{"class":361},[162,52414,52415],{"class":164,"line":36729},[162,52416,36610],{"class":361},[162,52418,52419],{"class":164,"line":36735},[162,52420,36616],{"class":361},[162,52422,52423,52425,52427,52429,52431,52433,52435],{"class":164,"line":36746},[162,52424,34806],{"class":168},[162,52426,208],{"class":207},[162,52428,3670],{"class":168},[162,52430,213],{"class":207},[162,52432,3670],{"class":168},[162,52434,208],{"class":207},[162,52436,434],{"class":168},[162,52438,52439],{"class":164,"line":36757},[162,52440,36639],{"class":361},[162,52442,52443],{"class":164,"line":36763},[162,52444,36645],{"class":361},[162,52446,52447],{"class":164,"line":36780},[162,52448,36651],{"class":361},[162,52450,52451],{"class":164,"line":36803},[162,52452,36657],{"class":361},[162,52454,52455],{"class":164,"line":36826},[162,52456,36663],{"class":361},[162,52458,52459,52461,52463,52465,52467,52469,52471,52473,52475],{"class":164,"line":36832},[162,52460,36669],{"class":168},[162,52462,36672],{"class":179},[162,52464,36675],{"class":168},[162,52466,36678],{"class":179},[162,52468,3670],{"class":168},[162,52470,36683],{"class":671},[162,52472,173],{"class":172},[162,52474,36688],{"class":179},[162,52476,434],{"class":168},[162,52478,52479,52481,52483,52485,52487,52489,52491,52493,52495],{"class":164,"line":36837},[162,52480,36669],{"class":168},[162,52482,36672],{"class":179},[162,52484,36700],{"class":168},[162,52486,36703],{"class":179},[162,52488,3670],{"class":168},[162,52490,36683],{"class":671},[162,52492,173],{"class":172},[162,52494,36712],{"class":179},[162,52496,434],{"class":168},[162,52498,52499],{"class":164,"line":36846},[162,52500,36720],{"class":361},[162,52502,52503],{"class":164,"line":36856},[162,52504,36726],{"class":168},[162,52506,52507],{"class":164,"line":36862},[162,52508,36732],{"class":361},[162,52510,52511,52513,52515],{"class":164,"line":36867},[162,52512,36738],{"class":168},[162,52514,36741],{"class":179},[162,52516,434],{"class":168},[162,52518,52519,52521,52523],{"class":164,"line":36873},[162,52520,36749],{"class":168},[162,52522,36752],{"class":179},[162,52524,434],{"class":168},[162,52526,52527],{"class":164,"line":36886},[162,52528,36760],{"class":361},[162,52530,52531,52533,52535,52537,52539,52541,52543],{"class":164,"line":36892},[162,52532,34806],{"class":168},[162,52534,208],{"class":207},[162,52536,3670],{"class":168},[162,52538,213],{"class":207},[162,52540,3670],{"class":168},[162,52542,213],{"class":207},[162,52544,434],{"class":168},[162,52546,52547,52549,52551,52553,52555,52557,52559,52561,52563],{"class":164,"line":36903},[162,52548,36669],{"class":168},[162,52550,36672],{"class":179},[162,52552,36787],{"class":168},[162,52554,36678],{"class":179},[162,52556,3670],{"class":168},[162,52558,36683],{"class":671},[162,52560,173],{"class":172},[162,52562,36798],{"class":179},[162,52564,434],{"class":168},[162,52566,52567,52569,52571,52573,52575,52577,52579,52581,52583],{"class":164,"line":36914},[162,52568,36669],{"class":168},[162,52570,36672],{"class":179},[162,52572,36810],{"class":168},[162,52574,36703],{"class":179},[162,52576,3670],{"class":168},[162,52578,36683],{"class":671},[162,52580,173],{"class":172},[162,52582,36821],{"class":179},[162,52584,434],{"class":168},[162,52586,52587],{"class":164,"line":36933},[162,52588,36829],{"class":361},[162,52590,52592],{"class":164,"line":52591},219,[162,52593,36726],{"class":168},[162,52595,52597,52599,52601],{"class":164,"line":52596},220,[162,52598,36738],{"class":168},[162,52600,36672],{"class":179},[162,52602,434],{"class":168},[162,52604,52606,52608,52610],{"class":164,"line":52605},221,[162,52607,36749],{"class":168},[162,52609,36851],{"class":179},[162,52611,434],{"class":168},[162,52613,52615],{"class":164,"line":52614},222,[162,52616,36859],{"class":168},[162,52618,52620],{"class":164,"line":52619},223,[162,52621,301],{"emptyLinePlaceholder":300},[162,52623,52625],{"class":164,"line":52624},224,[162,52626,36870],{"class":361},[162,52628,52630,52632,52634,52636,52638],{"class":164,"line":52629},225,[162,52631,2703],{"class":172},[162,52633,34304],{"class":207},[162,52635,2292],{"class":172},[162,52637,34309],{"class":179},[162,52639,2316],{"class":168},[162,52641,52643],{"class":164,"line":52642},226,[162,52644,36889],{"class":361},[162,52646,52648,52650,52652],{"class":164,"line":52647},227,[162,52649,47621],{"class":168},[162,52651,173],{"class":172},[162,52653,47626],{"class":168},[162,52655,52657,52659,52661],{"class":164,"line":52656},228,[162,52658,36906],{"class":168},[162,52660,173],{"class":172},[162,52662,36911],{"class":168},[162,52664,52666,52668,52670,52672,52674,52676,52678],{"class":164,"line":52665},229,[162,52667,36468],{"class":168},[162,52669,173],{"class":172},[162,52671,47643],{"class":168},[162,52673,36924],{"class":671},[162,52675,173],{"class":172},[162,52677,4184],{"class":207},[162,52679,434],{"class":168},[162,52681,52683],{"class":164,"line":52682},230,[162,52684,36936],{"class":168},[25089,52686,52688],{"id":52687},"_242测试代码","2.4.2.测试代码",[19,52690,52691],{},"使用测试集进行测试与推理",[153,52693,52695],{"className":155,"code":52694,"language":157,"meta":158,"style":158},"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",[71,52696,52697,52703,52713,52723,52734,52744,52748,52752,52760,52765,52769,52786,52790,52794,52798,52802,52806,52838,52842,52850,52854,52866,52870,52874,52878,52882,52886,52890,52894,52898,52916,52930,52934,52944,52954,52964,52970,52974,52978,52986,52990,53006,53014,53018,53022,53030,53038,53042,53046,53050,53054,53060,53064,53074,53082,53090,53094,53098,53102,53110,53114,53130,53134,53138,53142,53154,53158,53170,53174,53178,53190,53194,53204,53208,53212,53224,53228,53236,53240,53244,53252,53256,53264,53268,53272,53276,53280,53284,53300,53308,53312,53316,53334,53340,53344,53354,53362,53370,53374,53378,53382,53386,53394,53398,53414,53418,53426,53434],{"__ignoreMap":158},[162,52698,52699,52701],{"class":164,"line":165},[162,52700,33478],{"class":172},[162,52702,33481],{"class":168},[162,52704,52705,52707,52709,52711],{"class":164,"line":197},[162,52706,33478],{"class":172},[162,52708,34498],{"class":168},[162,52710,34466],{"class":172},[162,52712,34503],{"class":168},[162,52714,52715,52717,52719,52721],{"class":164,"line":228},[162,52716,33821],{"class":172},[162,52718,34481],{"class":168},[162,52720,33478],{"class":172},[162,52722,34486],{"class":168},[162,52724,52725,52727,52729,52731],{"class":164,"line":252},[162,52726,33821],{"class":172},[162,52728,34451],{"class":168},[162,52730,33478],{"class":172},[162,52732,52733],{"class":168}," ImageFolder\n",[162,52735,52736,52738,52740,52742],{"class":164,"line":328},[162,52737,33821],{"class":172},[162,52739,34993],{"class":168},[162,52741,33478],{"class":172},[162,52743,47715],{"class":168},[162,52745,52746],{"class":164,"line":466},[162,52747,301],{"emptyLinePlaceholder":300},[162,52749,52750],{"class":164,"line":471},[162,52751,37026],{"class":361},[162,52753,52754,52756,52758],{"class":164,"line":687},[162,52755,35026],{"class":172},[162,52757,37033],{"class":5082},[162,52759,35032],{"class":168},[162,52761,52762],{"class":164,"line":692},[162,52763,52764],{"class":361},"   # 导入自己的数据集，并进行数据处理\n",[162,52766,52767],{"class":164,"line":698},[162,52768,51034],{"class":361},[162,52770,52771,52773,52775,52777,52779,52781,52784],{"class":164,"line":2955},[162,52772,51039],{"class":207},[162,52774,173],{"class":172},[162,52776,3955],{"class":172},[162,52778,979],{"class":179},[162,52780,3847],{"class":207},[162,52782,52783],{"class":51050},"\u002Fdata\u002Ftest",[162,52785,28225],{"class":179},[162,52787,52788],{"class":164,"line":2960},[162,52789,301],{"emptyLinePlaceholder":300},[162,52791,52792],{"class":164,"line":2971},[162,52793,51062],{"class":361},[162,52795,52796],{"class":164,"line":2984},[162,52797,51067],{"class":361},[162,52799,52800],{"class":164,"line":2989},[162,52801,51072],{"class":361},[162,52803,52804],{"class":164,"line":3011},[162,52805,51077],{"class":361},[162,52807,52808,52810,52812,52814,52816,52818,52820,52822,52824,52826,52828,52830,52832,52834,52836],{"class":164,"line":3022},[162,52809,51082],{"class":168},[162,52811,173],{"class":172},[162,52813,51087],{"class":168},[162,52815,51090],{"class":207},[162,52817,3670],{"class":168},[162,52819,51095],{"class":207},[162,52821,3670],{"class":168},[162,52823,51100],{"class":207},[162,52825,51103],{"class":168},[162,52827,51106],{"class":207},[162,52829,3670],{"class":168},[162,52831,51111],{"class":207},[162,52833,3670],{"class":168},[162,52835,51116],{"class":207},[162,52837,315],{"class":168},[162,52839,52840],{"class":164,"line":3027},[162,52841,51123],{"class":361},[162,52843,52844,52846,52848],{"class":164,"line":3046},[162,52845,51128],{"class":168},[162,52847,173],{"class":172},[162,52849,51133],{"class":168},[162,52851,52852],{"class":164,"line":3052},[162,52853,51138],{"class":361},[162,52855,52856,52858,52860,52862,52864],{"class":164,"line":3057},[162,52857,51143],{"class":168},[162,52859,34582],{"class":207},[162,52861,3670],{"class":168},[162,52863,34582],{"class":207},[162,52865,45697],{"class":168},[162,52867,52868],{"class":164,"line":3072},[162,52869,51156],{"class":361},[162,52871,52872],{"class":164,"line":3077},[162,52873,51161],{"class":168},[162,52875,52876],{"class":164,"line":3100},[162,52877,51166],{"class":168},[162,52879,52880],{"class":164,"line":3140},[162,52881,51171],{"class":361},[162,52883,52884],{"class":164,"line":4878},[162,52885,51176],{"class":361},[162,52887,52888],{"class":164,"line":4883},[162,52889,301],{"emptyLinePlaceholder":300},[162,52891,52892],{"class":164,"line":4897},[162,52893,51185],{"class":361},[162,52895,52896],{"class":164,"line":4902},[162,52897,51190],{"class":361},[162,52899,52900,52902,52904,52906,52908,52910,52912,52914],{"class":164,"line":5694},[162,52901,37040],{"class":168},[162,52903,173],{"class":172},[162,52905,51199],{"class":168},[162,52907,51202],{"class":207},[162,52909,3670],{"class":168},[162,52911,51207],{"class":671},[162,52913,173],{"class":172},[162,52915,51212],{"class":168},[162,52917,52918,52920,52922,52924,52926,52928],{"class":164,"line":5708},[162,52919,37097],{"class":168},[162,52921,173],{"class":172},[162,52923,34615],{"class":168},[162,52925,34618],{"class":671},[162,52927,173],{"class":172},[162,52929,37108],{"class":168},[162,52931,52932],{"class":164,"line":5716},[162,52933,37113],{"class":361},[162,52935,52936,52938,52940,52942],{"class":164,"line":5721},[162,52937,37118],{"class":671},[162,52939,173],{"class":172},[162,52941,208],{"class":207},[162,52943,1735],{"class":168},[162,52945,52946,52948,52950,52952],{"class":164,"line":5727},[162,52947,37129],{"class":671},[162,52949,173],{"class":172},[162,52951,247],{"class":207},[162,52953,1735],{"class":168},[162,52955,52956,52958,52960,52962],{"class":164,"line":5733},[162,52957,37140],{"class":671},[162,52959,173],{"class":172},[162,52961,312],{"class":207},[162,52963,434],{"class":168},[162,52965,52966,52968],{"class":164,"line":5738},[162,52967,7203],{"class":172},[162,52969,37153],{"class":168},[162,52971,52972],{"class":164,"line":11052},[162,52973,301],{"emptyLinePlaceholder":300},[162,52975,52976],{"class":164,"line":11076},[162,52977,37162],{"class":361},[162,52979,52980,52982,52984],{"class":164,"line":11081},[162,52981,35026],{"class":172},[162,52983,37169],{"class":5082},[162,52985,37172],{"class":168},[162,52987,52988],{"class":164,"line":11087},[162,52989,37177],{"class":361},[162,52991,52992,52994,52996,52998,53000,53002,53004],{"class":164,"line":11114},[162,52993,34321],{"class":168},[162,52995,173],{"class":172},[162,52997,34328],{"class":179},[162,52999,4828],{"class":172},[162,53001,34333],{"class":168},[162,53003,2313],{"class":172},[162,53005,37194],{"class":179},[162,53007,53008,53010,53012],{"class":164,"line":11119},[162,53009,34373],{"class":168},[162,53011,173],{"class":172},[162,53013,35368],{"class":168},[162,53015,53016],{"class":164,"line":11125},[162,53017,301],{"emptyLinePlaceholder":300},[162,53019,53020],{"class":164,"line":11137},[162,53021,37211],{"class":361},[162,53023,53024,53026,53028],{"class":164,"line":11149},[162,53025,37216],{"class":168},[162,53027,173],{"class":172},[162,53029,35421],{"class":207},[162,53031,53032,53034,53036],{"class":164,"line":11161},[162,53033,37225],{"class":168},[162,53035,173],{"class":172},[162,53037,6200],{"class":207},[162,53039,53040],{"class":164,"line":12816},[162,53041,301],{"emptyLinePlaceholder":300},[162,53043,53044],{"class":164,"line":12841},[162,53045,37238],{"class":361},[162,53047,53048],{"class":164,"line":12864},[162,53049,37243],{"class":361},[162,53051,53052],{"class":164,"line":12888},[162,53053,37248],{"class":361},[162,53055,53056,53058],{"class":164,"line":12893},[162,53057,37253],{"class":172},[162,53059,35960],{"class":168},[162,53061,53062],{"class":164,"line":12898},[162,53063,37260],{"class":361},[162,53065,53066,53068,53070,53072],{"class":164,"line":12903},[162,53067,6517],{"class":172},[162,53069,37267],{"class":168},[162,53071,814],{"class":172},[162,53073,37272],{"class":168},[162,53075,53076,53078,53080],{"class":164,"line":12912},[162,53077,37277],{"class":168},[162,53079,173],{"class":172},[162,53081,37282],{"class":168},[162,53083,53084,53086,53088],{"class":164,"line":12917},[162,53085,37287],{"class":168},[162,53087,173],{"class":172},[162,53089,37292],{"class":168},[162,53091,53092],{"class":164,"line":12923},[162,53093,37297],{"class":361},[162,53095,53096],{"class":164,"line":12944},[162,53097,35951],{"class":168},[162,53099,53100],{"class":164,"line":12950},[162,53101,37306],{"class":361},[162,53103,53104,53106,53108],{"class":164,"line":12964},[162,53105,35736],{"class":168},[162,53107,173],{"class":172},[162,53109,37315],{"class":168},[162,53111,53112],{"class":164,"line":12970},[162,53113,37320],{"class":361},[162,53115,53116,53118,53120,53122,53124,53126,53128],{"class":164,"line":12997},[162,53117,35753],{"class":168},[162,53119,173],{"class":172},[162,53121,35758],{"class":168},[162,53123,35761],{"class":671},[162,53125,173],{"class":172},[162,53127,208],{"class":207},[162,53129,434],{"class":168},[162,53131,53132],{"class":164,"line":13006},[162,53133,37341],{"class":361},[162,53135,53136],{"class":164,"line":13012},[162,53137,37346],{"class":361},[162,53139,53140],{"class":164,"line":13020},[162,53141,37351],{"class":361},[162,53143,53144,53146,53148,53150,53152],{"class":164,"line":13025},[162,53145,37356],{"class":168},[162,53147,926],{"class":172},[162,53149,35863],{"class":168},[162,53151,2292],{"class":172},[162,53153,37365],{"class":168},[162,53155,53156],{"class":164,"line":19695},[162,53157,37370],{"class":361},[162,53159,53160,53162,53164,53166,53168],{"class":164,"line":19701},[162,53161,37375],{"class":168},[162,53163,926],{"class":172},[162,53165,37380],{"class":168},[162,53167,312],{"class":207},[162,53169,434],{"class":168},[162,53171,53172],{"class":164,"line":19724},[162,53173,301],{"emptyLinePlaceholder":300},[162,53175,53176],{"class":164,"line":19730},[162,53177,37393],{"class":361},[162,53179,53180,53182,53184,53186,53188],{"class":164,"line":19753},[162,53181,37398],{"class":168},[162,53183,173],{"class":172},[162,53185,37403],{"class":168},[162,53187,946],{"class":172},[162,53189,37408],{"class":168},[162,53191,53192],{"class":164,"line":19767},[162,53193,37413],{"class":361},[162,53195,53196,53198,53200,53202],{"class":164,"line":19787},[162,53197,2300],{"class":207},[162,53199,604],{"class":168},[162,53201,37422],{"class":179},[162,53203,37425],{"class":168},[162,53205,53206],{"class":164,"line":19793},[162,53207,301],{"emptyLinePlaceholder":300},[162,53209,53210],{"class":164,"line":19804},[162,53211,37434],{"class":361},[162,53213,53214,53216,53218,53220,53222],{"class":164,"line":19827},[162,53215,2703],{"class":172},[162,53217,34304],{"class":207},[162,53219,2292],{"class":172},[162,53221,34309],{"class":179},[162,53223,2316],{"class":168},[162,53225,53226],{"class":164,"line":19849},[162,53227,37451],{"class":361},[162,53229,53230,53232,53234],{"class":164,"line":19854},[162,53231,34373],{"class":168},[162,53233,173],{"class":172},[162,53235,47626],{"class":168},[162,53237,53238],{"class":164,"line":19860},[162,53239,37464],{"class":361},[162,53241,53242],{"class":164,"line":19874},[162,53243,37469],{"class":361},[162,53245,53246,53248,53250],{"class":164,"line":19887},[162,53247,37474],{"class":168},[162,53249,37477],{"class":179},[162,53251,586],{"class":168},[162,53253,53254],{"class":164,"line":19892},[162,53255,37484],{"class":361},[162,53257,53258,53260,53262],{"class":164,"line":19906},[162,53259,37097],{"class":168},[162,53261,173],{"class":172},[162,53263,37493],{"class":168},[162,53265,53266],{"class":164,"line":19911},[162,53267,37498],{"class":361},[162,53269,53270],{"class":164,"line":19917},[162,53271,37503],{"class":168},[162,53273,53274],{"class":164,"line":19922},[162,53275,301],{"emptyLinePlaceholder":300},[162,53277,53278],{"class":164,"line":19936},[162,53279,37512],{"class":361},[162,53281,53282],{"class":164,"line":19941},[162,53283,37517],{"class":361},[162,53285,53286,53288,53290,53292,53294,53296,53298],{"class":164,"line":19946},[162,53287,34321],{"class":168},[162,53289,173],{"class":172},[162,53291,34328],{"class":179},[162,53293,4828],{"class":172},[162,53295,34333],{"class":168},[162,53297,2313],{"class":172},[162,53299,37194],{"class":179},[162,53301,53302,53304,53306],{"class":164,"line":19960},[162,53303,34373],{"class":168},[162,53305,173],{"class":172},[162,53307,35368],{"class":168},[162,53309,53310],{"class":164,"line":19972},[162,53311,37546],{"class":361},[162,53313,53314],{"class":164,"line":19977},[162,53315,37551],{"class":361},[162,53317,53318,53320,53322,53324,53327,53329,53332],{"class":164,"line":19990},[162,53319,37556],{"class":168},[162,53321,173],{"class":172},[162,53323,4168],{"class":168},[162,53325,53326],{"class":179},"'猫'",[162,53328,3670],{"class":168},[162,53330,53331],{"class":179},"'狗'",[162,53333,194],{"class":168},[162,53335,53336,53338],{"class":164,"line":19995},[162,53337,37253],{"class":172},[162,53339,35960],{"class":168},[162,53341,53342],{"class":164,"line":20000},[162,53343,37621],{"class":361},[162,53345,53346,53348,53350,53352],{"class":164,"line":20005},[162,53347,6517],{"class":172},[162,53349,37628],{"class":168},[162,53351,814],{"class":172},[162,53353,37272],{"class":168},[162,53355,53356,53358,53360],{"class":164,"line":20018},[162,53357,35686],{"class":168},[162,53359,173],{"class":172},[162,53361,35691],{"class":168},[162,53363,53364,53366,53368],{"class":164,"line":20023},[162,53365,35701],{"class":168},[162,53367,173],{"class":172},[162,53369,35706],{"class":168},[162,53371,53372],{"class":164,"line":35709},[162,53373,301],{"emptyLinePlaceholder":300},[162,53375,53376],{"class":164,"line":35715},[162,53377,37657],{"class":361},[162,53379,53380],{"class":164,"line":35721},[162,53381,35951],{"class":168},[162,53383,53384],{"class":164,"line":35727},[162,53385,37666],{"class":361},[162,53387,53388,53390,53392],{"class":164,"line":35733},[162,53389,35736],{"class":168},[162,53391,173],{"class":172},[162,53393,35741],{"class":168},[162,53395,53396],{"class":164,"line":35744},[162,53397,37679],{"class":361},[162,53399,53400,53402,53404,53406,53408,53410,53412],{"class":164,"line":35750},[162,53401,35753],{"class":168},[162,53403,173],{"class":172},[162,53405,35758],{"class":168},[162,53407,35761],{"class":671},[162,53409,173],{"class":172},[162,53411,208],{"class":207},[162,53413,434],{"class":168},[162,53415,53416],{"class":164,"line":35770},[162,53417,37700],{"class":361},[162,53419,53420,53422,53424],{"class":164,"line":35776},[162,53421,37705],{"class":168},[162,53423,173],{"class":172},[162,53425,37710],{"class":168},[162,53427,53428,53430,53432],{"class":164,"line":35787},[162,53429,37715],{"class":168},[162,53431,173],{"class":172},[162,53433,37720],{"class":168},[162,53435,53436,53438,53440,53442,53444,53446,53448,53450],{"class":164,"line":35793},[162,53437,37725],{"class":207},[162,53439,604],{"class":168},[162,53441,37730],{"class":179},[162,53443,37733],{"class":168},[162,53445,37736],{"class":179},[162,53447,3670],{"class":168},[162,53449,37741],{"class":179},[162,53451,37744],{"class":168},[3219,53453,53454],{},"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":158,"searchDepth":197,"depth":197,"links":53456},[53457,53458,53459,53460],{"id":33675,"depth":228,"text":33676},{"id":40914,"depth":228,"text":40915},{"id":44347,"depth":228,"text":44348},{"id":48356,"depth":228,"text":48357},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":33667,"description":3241},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":53467,"title":53468,"body":53469,"description":3241,"extension":3242,"meta":53476,"navigation":300,"path":53477,"seo":53478,"stem":53479,"__hash__":53480},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":53470,"toc":53474},[53471],[10,53472,53468],{"id":53473},"_3yolo模型学习",{"title":158,"searchDepth":197,"depth":197,"links":53475},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":53468,"description":3241},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":53482,"title":53483,"body":53484,"description":53491,"extension":3242,"meta":53492,"navigation":300,"path":53494,"seo":53495,"stem":53496,"__hash__":53497},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":53485,"toc":53489},[53486],[19,53487,53488],{},"yolo模型还未补充",{"title":158,"searchDepth":197,"depth":197,"links":53490},[],"深度学习学习",{"category":53493},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":53483,"description":53491},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":53499,"title":53500,"body":53501,"description":3241,"extension":3242,"meta":53526,"navigation":300,"path":53527,"seo":53528,"stem":53529,"__hash__":53530},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":53502,"toc":53524},[53503,53506,53509,53514,53521],[10,53504,53500],{"id":53505},"_1工具",[19,53507,53508],{},"提示错误插件：有问题会提前报错",[19,53510,53511],{},[4602,53512],{"alt":158,"src":53513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,53515,53516],{},[3538,53517,53520],{"href":53518,"rel":53519},"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",[26956],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,53522,53523],{},"alt键加上下箭头可以实现语句的移动",{"title":158,"searchDepth":197,"depth":197,"links":53525},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":53500,"description":3241},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":53532,"title":53533,"body":53534,"description":3241,"extension":3242,"meta":56395,"navigation":300,"path":56396,"seo":56397,"stem":56398,"__hash__":56399},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":53535,"toc":56346},[53536,53539,53543,53547,53552,53555,53560,53564,53571,53576,53583,53588,53595,53600,53604,53609,53612,53616,53621,53625,53630,53633,53636,53639,53642,53645,53648,53651,53654,53659,53664,53669,53673,53676,53679,53683,53688,53691,53699,53704,53721,53729,53734,53739,53744,53749,53754,53757,53762,53767,53771,53780,53785,53790,53794,53799,53802,53806,53811,53819,53824,53829,53832,53837,53842,53847,53850,53853,53856,53861,53866,53869,53874,53877,53882,53885,53888,53891,53896,53899,53902,53917,53922,53927,53932,53935,53938,53941,53955,53958,53963,53968,53971,53974,53977,53980,53983,53986,53989,53993,53997,54002,54006,54009,54014,54019,54022,54027,54030,54034,54039,54042,54045,54048,54051,54054,54057,54060,54063,54066,54070,54075,54080,54085,54088,54091,54095,54100,54103,54107,54110,54113,54118,54121,54124,54128,54132,54135,54140,54145,54148,54177,54182,54187,54192,54197,54201,54206,54210,54215,54218,54222,54226,54231,54235,54240,54245,54249,54254,54257,54259,54262,54267,54271,54276,54280,54284,54289,54294,54299,54304,54308,54313,54318,54323,54326,54329,54334,54337,54342,54347,54352,54357,54361,55166,55170,55512,55517,55520,55523,55526,55529,55532,55535,55538,55541,55543,55546,55548,55551,55555,55560,55563,55566,55569,55573,55578,55583,55603,55606,55610,55615,55620,55637,55641,55670,55674,55696,55698,55737,55745,55751,55755,55758,55761,55766,55771,55774,55777,55780,55785,55790,55793,55796,55799,55802,55805,55808,55811,55814,55817,55820,55823,55825,55828,55831,55834,55837,55840,55843,55846,55849,55853,55858,55861,55866,55869,55872,55875,55878,55881,55884,55887,55889,55892,55895,55898,55901,55904,55907,55911,55914,55923,55926,55931,55934,55939,55942,55945,55948,55951,55954,55957,55960,55964,55968,55971,55974,55979,55984,55989,55993,55998,56003,56006,56009,56012,56015,56018,56023,56026,56031,56033,56038,56041,56045,56050,56053,56056,56061,56065,56068,56073,56076,56079,56108,56113,56116,56119,56122,56125,56128,56132,56135,56221,56225,56228,56233,56238,56245,56248,56251,56254,56257,56260,56265,56270,56273,56276,56279,56282,56285,56288,56291,56294,56297,56299,56302,56306,56311,56316,56321,56324,56329,56334,56337,56340,56343],[10,53537,53533],{"id":53538},"_2基础语法",[14,53540,53542],{"id":53541},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[3284,53544,53546],{"id":53545},"_211-js组成","2.1.1 js组成",[1452,53548,53549],{},[1455,53550,53551],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,53553,53554],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[1452,53556,53557],{"start":197},[1455,53558,53559],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[3284,53561,53563],{"id":53562},"_212-js书写位置","2.1.2 js书写位置",[1452,53565,53566],{},[1455,53567,53568],{},[3453,53569,53570],{},"内部 JavaScript",[19,53572,53573],{},[4602,53574],{"alt":158,"src":53575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[1452,53577,53578],{"start":197},[1455,53579,53580],{},[3453,53581,53582],{},"外部 JavaScript",[19,53584,53585],{},[4602,53586],{"alt":158,"src":53587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[1452,53589,53590],{"start":228},[1455,53591,53592],{},[3453,53593,53594],{},"内联 JavaScript",[19,53596,53597],{},[4602,53598],{"alt":158,"src":53599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[3284,53601,53603],{"id":53602},"_213-javascript注释","2.1.3 JavaScript注释",[19,53605,53606],{},[4602,53607],{"alt":158,"src":53608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,53610,53611],{},"alt+shift+a一定要记住！",[3284,53613,53615],{"id":53614},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,53617,53618],{},[4602,53619],{"alt":158,"src":53620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[3284,53622,53624],{"id":53623},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[1452,53626,53627],{},[1455,53628,53629],{},"输出语法：",[19,53631,53632],{},"①document.write('要出的内容')",[19,53634,53635],{},"向body内输出内容；",[19,53637,53638],{},"如果输出的内容写的是标签，也会被解析cheng",[19,53640,53641],{},"②alert('要出的内容')",[19,53643,53644],{},"页面弹出警告对话框",[19,53646,53647],{},"③console.log('控制台打印')",[19,53649,53650],{},"控制台输出语法，程序员调试使用",[19,53652,53653],{},"输入log就行，自动生成：",[19,53655,53656],{},[4602,53657],{"alt":158,"src":53658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[1452,53660,53661],{"start":197},[1455,53662,53663],{},"输入语法：",[19,53665,53666],{},[4602,53667],{"alt":158,"src":53668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[3284,53670,53672],{"id":53671},"_2116-字面量","21.1.6 字面量",[19,53674,53675],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,53677,53678],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,53680,53682],{"id":53681},"_22-变量","2.2 变量",[1452,53684,53685],{},[1455,53686,53687],{},"变量声明",[19,53689,53690],{},"let 变量名",[4279,53692,53693,53696],{},[1455,53694,53695],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[1455,53697,53698],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[1452,53700,53701],{"start":197},[1455,53702,53703],{},"变量赋值",[153,53705,53709],{"className":53706,"code":53707,"language":53708,"meta":158,"style":158},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[71,53710,53711,53716],{"__ignoreMap":158},[162,53712,53713],{"class":164,"line":165},[162,53714,53715],{"class":168},"let age\n",[162,53717,53718],{"class":164,"line":197},[162,53719,53720],{"class":168},"age=18\n",[1452,53722,53723,53726],{"start":228},[1455,53724,53725],{},"连这些（变量的初始化）：let age=18",[1455,53727,53728],{},"更新变量",[19,53730,53731],{},[4602,53732],{"alt":158,"src":53733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[1452,53735,53736],{"start":328},[1455,53737,53738],{},"声明多个变量",[19,53740,53741],{},[4602,53742],{"alt":158,"src":53743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[1452,53745,53746],{"start":466},[1455,53747,53748],{},"变量命名规则与规范",[19,53750,53751],{},[4602,53752],{"alt":158,"src":53753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,53755,53756],{},"遵守小驼峰！",[1452,53758,53759],{"start":471},[1455,53760,53761],{},"变量拓展-let和var的区别",[19,53763,53764],{},[4602,53765],{"alt":158,"src":53766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,53768,53770],{"id":53769},"_23-数组","2.3 数组",[153,53772,53774],{"className":53706,"code":53773,"language":53708,"meta":158,"style":158},"let arr = []\n",[71,53775,53776],{"__ignoreMap":158},[162,53777,53778],{"class":164,"line":165},[162,53779,53773],{"class":168},[19,53781,53782],{},[4602,53783],{"alt":158,"src":53784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,53786,53787],{},[4602,53788],{"alt":158,"src":53789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,53791,53793],{"id":53792},"_24-常量","2.4 常量",[19,53795,53796],{},[4602,53797],{"alt":158,"src":53798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,53800,53801],{},"const — 类似于 let ，但是变量的值无法被修改",[14,53803,53805],{"id":53804},"_25-数据类型","2.5 数据类型",[19,53807,53808],{},[4602,53809],{"alt":158,"src":53810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[1452,53812,53813,53816],{},[1455,53814,53815],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[1455,53817,53818],{},"算数运算符：",[19,53820,53821],{},[4602,53822],{"alt":158,"src":53823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[1452,53825,53826],{"start":228},[1455,53827,53828],{},"数字类型（Number）",[19,53830,53831],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,53833,53834],{},[4602,53835],{"alt":158,"src":53836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[1452,53838,53839],{"start":252},[1455,53840,53841],{},"字符串类型（string）",[19,53843,53844],{},[4602,53845],{"alt":158,"src":53846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,53848,53849],{},"反引号也是可以使用的",[19,53851,53852],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,53854,53855],{},"例如：document.write(\"我今年\"+age+\"岁\")",[1452,53857,53858],{"start":328},[1455,53859,53860],{},"模板字符串",[19,53862,53863],{},[4602,53864],{"alt":158,"src":53865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,53867,53868],{},"类似于python的字符串格式化",[1452,53870,53871],{"start":466},[1455,53872,53873],{},"布尔类型",[19,53875,53876],{},"true 和 false",[1452,53878,53879],{"start":471},[1455,53880,53881],{},"未定义类型（underfined）",[19,53883,53884],{},"表示没有赋值",[19,53886,53887],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,53889,53890],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[1452,53892,53893],{"start":687},[1455,53894,53895],{},"null（空类型）",[19,53897,53898],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,53900,53901],{},"赋值了，但是内容为空",[153,53903,53905],{"className":53706,"code":53904,"language":53708,"meta":158,"style":158},"typeof null\n输出的是'object'，是一个对象数据类型\n",[71,53906,53907,53912],{"__ignoreMap":158},[162,53908,53909],{"class":164,"line":165},[162,53910,53911],{"class":168},"typeof null\n",[162,53913,53914],{"class":164,"line":197},[162,53915,53916],{"class":168},"输出的是'object'，是一个对象数据类型\n",[1452,53918,53919],{"start":692},[1455,53920,53921],{},"控制台检测数据类型",[19,53923,53924],{},[4602,53925],{"alt":158,"src":53926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[1452,53928,53929],{"start":698},[1455,53930,53931],{},"类型转换",[19,53933,53934],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,53936,53937],{},"转换方式：隐式转换和显示转换",[19,53939,53940],{},"①隐式转换",[4279,53942,53943,53946,53949,53952],{},[1455,53944,53945],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[1455,53947,53948],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[1455,53950,53951],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[1455,53953,53954],{},"任何数据和字符串相加结果都是字符串",[19,53956,53957],{},"②显示转换",[19,53959,53960],{},[4602,53961],{"alt":158,"src":53962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,53964,53965],{},[4602,53966],{"alt":158,"src":53967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,53969,53970],{},"在输入的时候要用好隐式转换，简单写起来",[19,53972,53973],{},"let num = +prompt(’请输入数字：‘)",[19,53975,53976],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,53978,53979],{},"console.log(parseInt('12.333px'))",[19,53981,53982],{},"输出为：12",[19,53984,53985],{},"console.log(parseInt('a'a'a12.333px'))",[19,53987,53988],{},"输出：NaN",[14,53990,53992],{"id":53991},"_26-运算符","2.6 运算符",[3284,53994,53996],{"id":53995},"_261-赋值运算符","2.6.1 赋值运算符",[19,53998,53999],{},[4602,54000],{"alt":158,"src":54001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[3284,54003,54005],{"id":54004},"_262-一元运算符","2.6.2 一元运算符",[19,54007,54008],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,54010,54011],{},[4602,54012],{"alt":158,"src":54013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,54015,54016],{},[4602,54017],{"alt":158,"src":54018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,54020,54021],{},"两者的区别：",[19,54023,54024],{},[4602,54025],{"alt":158,"src":54026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,54028,54029],{},"前置先自加；后置后加，代码执行完之后再加",[3284,54031,54033],{"id":54032},"_263-比较运算符","2.6.3 比较运算符",[19,54035,54036],{},[4602,54037],{"alt":158,"src":54038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,54040,54041],{},"比较运算符也有隐式转换",[19,54043,54044],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,54046,54047],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,54049,54050],{},"要使用三等，开发的时候",[19,54052,54053],{},"NaN不等于任何人，包括它自己",[19,54055,54056],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,54058,54059],{},"7\u002F10=0.7",[19,54061,54062],{},"最后：0.5+0.2=0.7",[19,54064,54065],{},"字符串比较，比较的是字符对应的ASCII码",[3284,54067,54069],{"id":54068},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,54071,54072],{},[4602,54073],{"alt":158,"src":54074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,54076,54077],{},[4602,54078],{"alt":158,"src":54079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,54081,54082],{},[4602,54083],{"alt":158,"src":54084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,54086,54087],{},"上述题目选D",[19,54089,54090],{},"与真2假1；或真1假2",[3284,54092,54094],{"id":54093},"_265-运算符优先级","2.6.5 运算符优先级",[19,54096,54097],{},[4602,54098],{"alt":158,"src":54099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,54101,54102],{},"先算逻辑与，后算逻辑或",[14,54104,54106],{"id":54105},"_27-语句","2.7 语句",[19,54108,54109],{},"表达式：是可以被求值的代码，会有结果给我们",[19,54111,54112],{},"语句：语句是可以被执行的代码，例如prompt()",[19,54114,54115],{},[4602,54116],{"alt":158,"src":54117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,54119,54120],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,54122,54123],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[3284,54125,54127],{"id":54126},"_271-分支语句","2.7.1 分支语句",[25089,54129,54131],{"id":54130},"_2711-if分支语句","2.7.1.1 if分支语句",[19,54133,54134],{},"if语句单行简单的话，可以不写{}，写在一行就行",[1452,54136,54137],{},[1455,54138,54139],{},"单分支语句",[19,54141,54142],{},[4602,54143],{"alt":158,"src":54144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,54146,54147],{},"除了0，所有数字都为真",[153,54149,54151],{"className":53706,"code":54150,"language":53708,"meta":158,"style":158},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[71,54152,54153,54158,54163,54168,54172],{"__ignoreMap":158},[162,54154,54155],{"class":164,"line":165},[162,54156,54157],{"class":168},"if（0) {\n",[162,54159,54160],{"class":164,"line":197},[162,54161,54162],{"class":168},"    let a=1\n",[162,54164,54165],{"class":164,"line":228},[162,54166,54167],{"class":168},"    alert(typeof a)\n",[162,54169,54170],{"class":164,"line":252},[162,54171,1498],{"class":168},[162,54173,54174],{"class":164,"line":328},[162,54175,54176],{"class":168},"不输出，括号为假\n",[1452,54178,54179],{"start":197},[1455,54180,54181],{},"双分支语句",[19,54183,54184],{},[4602,54185],{"alt":158,"src":54186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[1452,54188,54189],{"start":228},[1455,54190,54191],{},"多分支语句",[19,54193,54194],{},[4602,54195],{"alt":158,"src":54196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[25089,54198,54200],{"id":54199},"_2712-三元运算符","2.7.1.2 三元运算符",[19,54202,54203],{},[4602,54204],{"alt":158,"src":54205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[25089,54207,54209],{"id":54208},"_2713-switch语句","2.7.1.3 switch语句",[19,54211,54212],{},[4602,54213],{"alt":158,"src":54214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,54216,54217],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[3284,54219,54221],{"id":54220},"_272-循环语句","2.7.2 循环语句",[25089,54223,54225],{"id":54224},"_2721-断点演示","2.7.2.1 断点演示",[19,54227,54228],{},[4602,54229],{"alt":158,"src":54230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[25089,54232,54234],{"id":54233},"_2722-while循环","2.7.2.2 while循环",[19,54236,54237],{},[4602,54238],{"alt":158,"src":54239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,54241,54242],{},[4602,54243],{"alt":158,"src":54244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[25089,54246,54248],{"id":54247},"_2723-for循环","2.7.2.3 for循环",[19,54250,54251],{},[4602,54252],{"alt":158,"src":54253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,54255,54256],{},"for(;;) {",[19,54258,976],{},[19,54260,54261],{},"表示无限循环",[19,54263,54264],{},[4602,54265],{"alt":158,"src":54266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[25089,54268,54270],{"id":54269},"_2724-循环的退出","2.7.2.4 循环的退出",[19,54272,54273],{},[4602,54274],{"alt":158,"src":54275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,54277,54279],{"id":54278},"_28-数组","2.8 数组",[3284,54281,54283],{"id":54282},"_281-基础认识","2.8.1 基础认识",[19,54285,54286],{},[4602,54287],{"alt":158,"src":54288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,54290,54291],{},[4602,54292],{"alt":158,"src":54293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,54295,54296],{},[4602,54297],{"alt":158,"src":54298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,54300,54301],{},[4602,54302],{"alt":158,"src":54303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[3284,54305,54307],{"id":54306},"_282-操作数组","2.8.2 操作数组",[19,54309,54310],{},[4602,54311],{"alt":158,"src":54312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[1452,54314,54315],{},[1455,54316,54317],{},"添加元素",[19,54319,54320],{},[4602,54321],{"alt":158,"src":54322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,54324,54325],{},"console.log(arr.push('green'))",[19,54327,54328],{},"输出结果：为新数组的长度",[19,54330,54331],{},[4602,54332],{"alt":158,"src":54333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,54335,54336],{},"push用的非常多，一定要记住",[1452,54338,54339],{},[1455,54340,54341],{},"删除元素",[19,54343,54344],{},[4602,54345],{"alt":158,"src":54346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,54348,54349],{},[4602,54350],{"alt":158,"src":54351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,54353,54354],{},[4602,54355],{"alt":158,"src":54356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[3284,54358,54360],{"id":54359},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[153,54362,54364],{"className":53706,"code":54363,"language":53708,"meta":158,"style":158},"\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",[71,54365,54366,54381,54397,54401,54410,54428,54452,54474,54488,54496,54503,54514,54525,54529,54533,54540,54552,54567,54580,54599,54616,54631,54643,54655,54667,54671,54675,54686,54696,54708,54720,54732,54743,54747,54751,54763,54767,54781,54785,54789,54800,54814,54826,54840,54844,54853,54862,54866,54875,54879,54888,54893,54898,54910,54938,54943,54948,54973,54978,54982,54987,54992,55007,55011,55016,55046,55058,55074,55090,55104,55109,55116,55120,55125,55138,55146,55154,55158],{"__ignoreMap":158},[162,54367,54368,54371,54375,54378],{"class":164,"line":165},[162,54369,54370],{"class":168},"\u003C!",[162,54372,54374],{"class":54373},"s9eBZ","DOCTYPE",[162,54376,54377],{"class":5082}," html",[162,54379,54380],{"class":168},">\n",[162,54382,54383,54385,54387,54390,54392,54395],{"class":164,"line":197},[162,54384,4187],{"class":168},[162,54386,53708],{"class":54373},[162,54388,54389],{"class":5082}," lang",[162,54391,173],{"class":168},[162,54393,54394],{"class":179},"\"en\"",[162,54396,54380],{"class":168},[162,54398,54399],{"class":164,"line":228},[162,54400,301],{"emptyLinePlaceholder":300},[162,54402,54403,54405,54408],{"class":164,"line":252},[162,54404,4187],{"class":168},[162,54406,54407],{"class":54373},"head",[162,54409,54380],{"class":168},[162,54411,54412,54415,54418,54421,54423,54426],{"class":164,"line":328},[162,54413,54414],{"class":168},"    \u003C",[162,54416,54417],{"class":54373},"meta",[162,54419,54420],{"class":5082}," charset",[162,54422,173],{"class":168},[162,54424,54425],{"class":179},"\"UTF-8\"",[162,54427,54380],{"class":168},[162,54429,54430,54432,54434,54437,54439,54442,54445,54447,54450],{"class":164,"line":466},[162,54431,54414],{"class":168},[162,54433,54417],{"class":54373},[162,54435,54436],{"class":5082}," http-equiv",[162,54438,173],{"class":168},[162,54440,54441],{"class":179},"\"X-UA-Compatible\"",[162,54443,54444],{"class":5082}," content",[162,54446,173],{"class":168},[162,54448,54449],{"class":179},"\"IE=edge\"",[162,54451,54380],{"class":168},[162,54453,54454,54456,54458,54460,54462,54465,54467,54469,54472],{"class":164,"line":471},[162,54455,54414],{"class":168},[162,54457,54417],{"class":54373},[162,54459,18013],{"class":5082},[162,54461,173],{"class":168},[162,54463,54464],{"class":179},"\"viewport\"",[162,54466,54444],{"class":5082},[162,54468,173],{"class":168},[162,54470,54471],{"class":179},"\"width=device-width, initial-scale=1.0\"",[162,54473,54380],{"class":168},[162,54475,54476,54478,54481,54484,54486],{"class":164,"line":687},[162,54477,54414],{"class":168},[162,54479,54480],{"class":54373},"title",[162,54482,54483],{"class":168},">Document\u003C\u002F",[162,54485,54480],{"class":54373},[162,54487,54380],{"class":168},[162,54489,54490,54492,54494],{"class":164,"line":692},[162,54491,54414],{"class":168},[162,54493,3219],{"class":54373},[162,54495,54380],{"class":168},[162,54497,54498,54501],{"class":164,"line":698},[162,54499,54500],{"class":54373},"        *",[162,54502,1722],{"class":168},[162,54504,54505,54508,54510,54512],{"class":164,"line":2955},[162,54506,54507],{"class":207},"            margin",[162,54509,1730],{"class":168},[162,54511,312],{"class":207},[162,54513,4433],{"class":168},[162,54515,54516,54519,54521,54523],{"class":164,"line":2960},[162,54517,54518],{"class":207},"            padding",[162,54520,1730],{"class":168},[162,54522,312],{"class":207},[162,54524,4433],{"class":168},[162,54526,54527],{"class":164,"line":2971},[162,54528,5646],{"class":168},[162,54530,54531],{"class":164,"line":2984},[162,54532,301],{"emptyLinePlaceholder":300},[162,54534,54535,54538],{"class":164,"line":2989},[162,54536,54537],{"class":5082},"        .box",[162,54539,1722],{"class":168},[162,54541,54542,54545,54547,54550],{"class":164,"line":3011},[162,54543,54544],{"class":207},"            display",[162,54546,1730],{"class":168},[162,54548,54549],{"class":207},"flex",[162,54551,4433],{"class":168},[162,54553,54554,54557,54559,54562,54565],{"class":164,"line":3022},[162,54555,54556],{"class":207},"            width",[162,54558,1730],{"class":168},[162,54560,54561],{"class":207},"700",[162,54563,54564],{"class":172},"px",[162,54566,4433],{"class":168},[162,54568,54569,54572,54574,54576,54578],{"class":164,"line":3027},[162,54570,54571],{"class":207},"            height",[162,54573,1730],{"class":168},[162,54575,7086],{"class":207},[162,54577,54564],{"class":172},[162,54579,4433],{"class":168},[162,54581,54582,54585,54587,54589,54591,54594,54597],{"class":164,"line":3046},[162,54583,54584],{"class":207},"            border-left",[162,54586,1730],{"class":168},[162,54588,208],{"class":207},[162,54590,54564],{"class":172},[162,54592,54593],{"class":207}," solid",[162,54595,54596],{"class":207}," pink",[162,54598,4433],{"class":168},[162,54600,54601,54604,54606,54608,54610,54612,54614],{"class":164,"line":3052},[162,54602,54603],{"class":207},"            border-bottom",[162,54605,1730],{"class":168},[162,54607,208],{"class":207},[162,54609,54564],{"class":172},[162,54611,54593],{"class":207},[162,54613,54596],{"class":207},[162,54615,4433],{"class":168},[162,54617,54618,54620,54622,54624,54626,54629],{"class":164,"line":3057},[162,54619,54507],{"class":207},[162,54621,1730],{"class":168},[162,54623,3941],{"class":207},[162,54625,54564],{"class":172},[162,54627,54628],{"class":207}," auto",[162,54630,4433],{"class":168},[162,54632,54633,54636,54638,54641],{"class":164,"line":3072},[162,54634,54635],{"class":207},"            justify-content",[162,54637,1730],{"class":168},[162,54639,54640],{"class":207},"space-around",[162,54642,4433],{"class":168},[162,54644,54645,54648,54650,54653],{"class":164,"line":3077},[162,54646,54647],{"class":207},"            align-items",[162,54649,1730],{"class":168},[162,54651,54652],{"class":207},"flex-end",[162,54654,4433],{"class":168},[162,54656,54657,54660,54662,54665],{"class":164,"line":3100},[162,54658,54659],{"class":207},"            text-align",[162,54661,1730],{"class":168},[162,54663,54664],{"class":207},"center",[162,54666,4433],{"class":168},[162,54668,54669],{"class":164,"line":3140},[162,54670,5646],{"class":168},[162,54672,54673],{"class":164,"line":4878},[162,54674,301],{"emptyLinePlaceholder":300},[162,54676,54677,54679,54681,54684],{"class":164,"line":4883},[162,54678,54537],{"class":5082},[162,54680,3000],{"class":172},[162,54682,54683],{"class":54373},"div",[162,54685,1722],{"class":168},[162,54687,54688,54690,54692,54694],{"class":164,"line":4897},[162,54689,54544],{"class":207},[162,54691,1730],{"class":168},[162,54693,54549],{"class":207},[162,54695,4433],{"class":168},[162,54697,54698,54700,54702,54704,54706],{"class":164,"line":4902},[162,54699,54556],{"class":207},[162,54701,1730],{"class":168},[162,54703,3941],{"class":207},[162,54705,54564],{"class":172},[162,54707,4433],{"class":168},[162,54709,54710,54713,54715,54718],{"class":164,"line":5694},[162,54711,54712],{"class":207},"            background-color",[162,54714,1730],{"class":168},[162,54716,54717],{"class":207},"pink",[162,54719,4433],{"class":168},[162,54721,54722,54725,54727,54730],{"class":164,"line":5708},[162,54723,54724],{"class":207},"            flex-direction",[162,54726,1730],{"class":168},[162,54728,54729],{"class":207},"column",[162,54731,4433],{"class":168},[162,54733,54734,54736,54738,54741],{"class":164,"line":5716},[162,54735,54635],{"class":207},[162,54737,1730],{"class":168},[162,54739,54740],{"class":207},"space-between",[162,54742,4433],{"class":168},[162,54744,54745],{"class":164,"line":5721},[162,54746,5646],{"class":168},[162,54748,54749],{"class":164,"line":5727},[162,54750,301],{"emptyLinePlaceholder":300},[162,54752,54753,54755,54758,54761],{"class":164,"line":5733},[162,54754,54537],{"class":5082},[162,54756,54757],{"class":54373}," div",[162,54759,54760],{"class":54373}," span",[162,54762,1722],{"class":168},[162,54764,54765],{"class":164,"line":5738},[162,54766,301],{"emptyLinePlaceholder":300},[162,54768,54769,54772,54774,54777,54779],{"class":164,"line":11052},[162,54770,54771],{"class":207},"            margin-top",[162,54773,1730],{"class":168},[162,54775,54776],{"class":207},"-20",[162,54778,54564],{"class":172},[162,54780,4433],{"class":168},[162,54782,54783],{"class":164,"line":11076},[162,54784,5646],{"class":168},[162,54786,54787],{"class":164,"line":11081},[162,54788,301],{"emptyLinePlaceholder":300},[162,54790,54791,54793,54795,54798],{"class":164,"line":11087},[162,54792,54537],{"class":5082},[162,54794,54757],{"class":54373},[162,54796,54797],{"class":54373}," h4",[162,54799,1722],{"class":168},[162,54801,54802,54805,54807,54810,54812],{"class":164,"line":11114},[162,54803,54804],{"class":207},"            margin-bottom",[162,54806,1730],{"class":168},[162,54808,54809],{"class":207},"-35",[162,54811,54564],{"class":172},[162,54813,4433],{"class":168},[162,54815,54816,54818,54820,54822,54824],{"class":164,"line":11119},[162,54817,54556],{"class":207},[162,54819,1730],{"class":168},[162,54821,3648],{"class":207},[162,54823,54564],{"class":172},[162,54825,4433],{"class":168},[162,54827,54828,54831,54833,54836,54838],{"class":164,"line":11125},[162,54829,54830],{"class":207},"            margin-left",[162,54832,1730],{"class":168},[162,54834,54835],{"class":207},"-10",[162,54837,54564],{"class":172},[162,54839,4433],{"class":168},[162,54841,54842],{"class":164,"line":11137},[162,54843,5646],{"class":168},[162,54845,54846,54849,54851],{"class":164,"line":11149},[162,54847,54848],{"class":168},"    \u003C\u002F",[162,54850,3219],{"class":54373},[162,54852,54380],{"class":168},[162,54854,54855,54858,54860],{"class":164,"line":11161},[162,54856,54857],{"class":168},"\u003C\u002F",[162,54859,54407],{"class":54373},[162,54861,54380],{"class":168},[162,54863,54864],{"class":164,"line":12816},[162,54865,301],{"emptyLinePlaceholder":300},[162,54867,54868,54870,54873],{"class":164,"line":12841},[162,54869,4187],{"class":168},[162,54871,54872],{"class":54373},"body",[162,54874,54380],{"class":168},[162,54876,54877],{"class":164,"line":12864},[162,54878,301],{"emptyLinePlaceholder":300},[162,54880,54881,54883,54886],{"class":164,"line":12888},[162,54882,54414],{"class":168},[162,54884,54885],{"class":54373},"script",[162,54887,54380],{"class":168},[162,54889,54890],{"class":164,"line":12893},[162,54891,54892],{"class":361},"        \u002F\u002F 1. 四次弹框效果\n",[162,54894,54895],{"class":164,"line":12898},[162,54896,54897],{"class":361},"        \u002F\u002F 声明一个新的数组\n",[162,54899,54900,54903,54906,54908],{"class":164,"line":12903},[162,54901,54902],{"class":172},"        let",[162,54904,54905],{"class":168}," arr ",[162,54907,173],{"class":172},[162,54909,260],{"class":168},[162,54911,54912,54914,54916,54919,54921,54923,54925,54927,54929,54932,54934,54936],{"class":164,"line":12912},[162,54913,6517],{"class":172},[162,54915,1003],{"class":168},[162,54917,54918],{"class":172},"let",[162,54920,2642],{"class":168},[162,54922,173],{"class":172},[162,54924,28210],{"class":207},[162,54926,12546],{"class":168},[162,54928,4725],{"class":172},[162,54930,54931],{"class":207}," 4",[162,54933,6328],{"class":168},[162,54935,5410],{"class":172},[162,54937,15537],{"class":168},[162,54939,54940],{"class":164,"line":12917},[162,54941,54942],{"class":361},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[162,54944,54945],{"class":164,"line":12923},[162,54946,54947],{"class":361},"            \u002F\u002F arr.push(num)\n",[162,54949,54950,54953,54956,54958,54961,54963,54966,54968,54971],{"class":164,"line":12944},[162,54951,54952],{"class":168},"            arr.",[162,54954,54955],{"class":5082},"push",[162,54957,604],{"class":168},[162,54959,54960],{"class":5082},"prompt",[162,54962,604],{"class":168},[162,54964,54965],{"class":179},"`请输入第${",[162,54967,3732],{"class":168},[162,54969,54970],{"class":179},"}季度的数据:`",[162,54972,586],{"class":168},[162,54974,54975],{"class":164,"line":12950},[162,54976,54977],{"class":361},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[162,54979,54980],{"class":164,"line":12964},[162,54981,5646],{"class":168},[162,54983,54984],{"class":164,"line":12970},[162,54985,54986],{"class":361},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[162,54988,54989],{"class":164,"line":12997},[162,54990,54991],{"class":361},"        \u002F\u002F 盒子开头\n",[162,54993,54994,54997,55000,55002,55005],{"class":164,"line":13006},[162,54995,54996],{"class":168},"        document.",[162,54998,54999],{"class":5082},"write",[162,55001,604],{"class":168},[162,55003,55004],{"class":179},"` \u003Cdiv class=\"box\">`",[162,55006,434],{"class":168},[162,55008,55009],{"class":164,"line":13012},[162,55010,301],{"emptyLinePlaceholder":300},[162,55012,55013],{"class":164,"line":13020},[162,55014,55015],{"class":361},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[162,55017,55018,55020,55022,55024,55026,55028,55030,55032,55034,55037,55040,55042,55044],{"class":164,"line":13025},[162,55019,6517],{"class":172},[162,55021,1003],{"class":168},[162,55023,54918],{"class":172},[162,55025,2642],{"class":168},[162,55027,173],{"class":172},[162,55029,2717],{"class":207},[162,55031,12546],{"class":168},[162,55033,4187],{"class":172},[162,55035,55036],{"class":168}," arr.",[162,55038,55039],{"class":207},"length",[162,55041,6328],{"class":168},[162,55043,5410],{"class":172},[162,55045,15537],{"class":168},[162,55047,55048,55051,55053,55055],{"class":164,"line":19695},[162,55049,55050],{"class":168},"            document.",[162,55052,54999],{"class":5082},[162,55054,604],{"class":168},[162,55056,55057],{"class":179},"`\n",[162,55059,55060,55063,55065,55067,55069,55071],{"class":164,"line":19701},[162,55061,55062],{"class":179},"              \u003Cdiv style=\"height: ${",[162,55064,6993],{"class":168},[162,55066,4168],{"class":179},[162,55068,3732],{"class":168},[162,55070,3120],{"class":179},[162,55072,55073],{"class":179},"}px;\">\n",[162,55075,55076,55079,55081,55083,55085,55087],{"class":164,"line":19724},[162,55077,55078],{"class":179},"                \u003Cspan>${",[162,55080,6993],{"class":168},[162,55082,4168],{"class":179},[162,55084,3732],{"class":168},[162,55086,3120],{"class":179},[162,55088,55089],{"class":179},"}\u003C\u002Fspan>\n",[162,55091,55092,55095,55097,55099,55101],{"class":164,"line":19730},[162,55093,55094],{"class":179},"                \u003Ch4>第${",[162,55096,3732],{"class":168},[162,55098,1239],{"class":172},[162,55100,28210],{"class":207},[162,55102,55103],{"class":179},"}季度\u003C\u002Fh4>\n",[162,55105,55106],{"class":164,"line":19753},[162,55107,55108],{"class":179},"              \u003C\u002Fdiv>          \n",[162,55110,55111,55114],{"class":164,"line":19767},[162,55112,55113],{"class":179},"            `",[162,55115,434],{"class":168},[162,55117,55118],{"class":164,"line":19787},[162,55119,5646],{"class":168},[162,55121,55122],{"class":164,"line":19793},[162,55123,55124],{"class":361},"        \u002F\u002F 盒子结尾\n",[162,55126,55127,55129,55131,55133,55136],{"class":164,"line":19804},[162,55128,54996],{"class":168},[162,55130,54999],{"class":5082},[162,55132,604],{"class":168},[162,55134,55135],{"class":179},"` \u003C\u002Fdiv>`",[162,55137,434],{"class":168},[162,55139,55140,55142,55144],{"class":164,"line":19827},[162,55141,54848],{"class":168},[162,55143,54885],{"class":54373},[162,55145,54380],{"class":168},[162,55147,55148,55150,55152],{"class":164,"line":19849},[162,55149,54857],{"class":168},[162,55151,54872],{"class":54373},[162,55153,54380],{"class":168},[162,55155,55156],{"class":164,"line":19854},[162,55157,301],{"emptyLinePlaceholder":300},[162,55159,55160,55162,55164],{"class":164,"line":19860},[162,55161,54857],{"class":168},[162,55163,53708],{"class":54373},[162,55165,54380],{"class":168},[3284,55167,55169],{"id":55168},"_284-冒泡排序","2.8.4 冒泡排序",[153,55171,55173],{"className":53706,"code":55172,"language":53708,"meta":158,"style":158},"\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",[71,55174,55175,55185,55199,55203,55211,55226,55246,55258,55266,55270,55278,55286,55317,55350,55387,55392,55411,55416,55429,55444,55460,55464,55469,55473,55483,55492,55500,55504],{"__ignoreMap":158},[162,55176,55177,55179,55181,55183],{"class":164,"line":165},[162,55178,54370],{"class":168},[162,55180,54374],{"class":54373},[162,55182,54377],{"class":5082},[162,55184,54380],{"class":168},[162,55186,55187,55189,55191,55193,55195,55197],{"class":164,"line":197},[162,55188,4187],{"class":168},[162,55190,53708],{"class":54373},[162,55192,54389],{"class":5082},[162,55194,173],{"class":168},[162,55196,54394],{"class":179},[162,55198,54380],{"class":168},[162,55200,55201],{"class":164,"line":228},[162,55202,301],{"emptyLinePlaceholder":300},[162,55204,55205,55207,55209],{"class":164,"line":252},[162,55206,4187],{"class":168},[162,55208,54407],{"class":54373},[162,55210,54380],{"class":168},[162,55212,55213,55216,55218,55220,55222,55224],{"class":164,"line":328},[162,55214,55215],{"class":168},"  \u003C",[162,55217,54417],{"class":54373},[162,55219,54420],{"class":5082},[162,55221,173],{"class":168},[162,55223,54425],{"class":179},[162,55225,54380],{"class":168},[162,55227,55228,55230,55232,55234,55236,55238,55240,55242,55244],{"class":164,"line":466},[162,55229,55215],{"class":168},[162,55231,54417],{"class":54373},[162,55233,18013],{"class":5082},[162,55235,173],{"class":168},[162,55237,54464],{"class":179},[162,55239,54444],{"class":5082},[162,55241,173],{"class":168},[162,55243,54471],{"class":179},[162,55245,54380],{"class":168},[162,55247,55248,55250,55252,55254,55256],{"class":164,"line":471},[162,55249,55215],{"class":168},[162,55251,54480],{"class":54373},[162,55253,54483],{"class":168},[162,55255,54480],{"class":54373},[162,55257,54380],{"class":168},[162,55259,55260,55262,55264],{"class":164,"line":687},[162,55261,54857],{"class":168},[162,55263,54407],{"class":54373},[162,55265,54380],{"class":168},[162,55267,55268],{"class":164,"line":692},[162,55269,301],{"emptyLinePlaceholder":300},[162,55271,55272,55274,55276],{"class":164,"line":698},[162,55273,4187],{"class":168},[162,55275,54872],{"class":54373},[162,55277,54380],{"class":168},[162,55279,55280,55282,55284],{"class":164,"line":2955},[162,55281,55215],{"class":168},[162,55283,54885],{"class":54373},[162,55285,54380],{"class":168},[162,55287,55288,55291,55293,55295,55297,55299,55301,55303,55305,55307,55309,55311,55313,55315],{"class":164,"line":2960},[162,55289,55290],{"class":172},"    let",[162,55292,54905],{"class":168},[162,55294,173],{"class":172},[162,55296,176],{"class":168},[162,55298,637],{"class":207},[162,55300,183],{"class":168},[162,55302,223],{"class":207},[162,55304,183],{"class":168},[162,55306,218],{"class":207},[162,55308,183],{"class":168},[162,55310,213],{"class":207},[162,55312,183],{"class":168},[162,55314,208],{"class":207},[162,55316,194],{"class":168},[162,55318,55319,55321,55323,55325,55327,55329,55331,55333,55335,55337,55339,55342,55344,55346,55348],{"class":164,"line":2971},[162,55320,6315],{"class":172},[162,55322,1003],{"class":168},[162,55324,54918],{"class":172},[162,55326,2642],{"class":168},[162,55328,173],{"class":172},[162,55330,2717],{"class":207},[162,55332,12546],{"class":168},[162,55334,4187],{"class":172},[162,55336,55036],{"class":168},[162,55338,55039],{"class":207},[162,55340,55341],{"class":172}," -",[162,55343,28210],{"class":207},[162,55345,6328],{"class":168},[162,55347,5410],{"class":172},[162,55349,15537],{"class":168},[162,55351,55352,55355,55357,55359,55361,55363,55365,55367,55369,55371,55373,55375,55377,55379,55381,55383,55385],{"class":164,"line":2984},[162,55353,55354],{"class":172},"      for",[162,55356,1003],{"class":168},[162,55358,54918],{"class":172},[162,55360,12600],{"class":168},[162,55362,173],{"class":172},[162,55364,2717],{"class":207},[162,55366,12607],{"class":168},[162,55368,4187],{"class":172},[162,55370,55036],{"class":168},[162,55372,55039],{"class":207},[162,55374,55341],{"class":172},[162,55376,2642],{"class":168},[162,55378,353],{"class":172},[162,55380,28210],{"class":207},[162,55382,12614],{"class":168},[162,55384,5410],{"class":172},[162,55386,15537],{"class":168},[162,55388,55389],{"class":164,"line":2989},[162,55390,55391],{"class":361},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[162,55393,55394,55396,55399,55401,55404,55406,55408],{"class":164,"line":3011},[162,55395,5614],{"class":172},[162,55397,55398],{"class":168}," (arr[j] ",[162,55400,3000],{"class":172},[162,55402,55403],{"class":168}," arr[j ",[162,55405,3771],{"class":172},[162,55407,28210],{"class":207},[162,55409,55410],{"class":168},"]) {\n",[162,55412,55413],{"class":164,"line":3022},[162,55414,55415],{"class":361},"          \u002F\u002F 交换两个变量\n",[162,55417,55418,55421,55424,55426],{"class":164,"line":3027},[162,55419,55420],{"class":172},"          let",[162,55422,55423],{"class":168}," tmp ",[162,55425,173],{"class":172},[162,55427,55428],{"class":168}," arr[j]\n",[162,55430,55431,55434,55436,55438,55440,55442],{"class":164,"line":3046},[162,55432,55433],{"class":168},"          arr[j] ",[162,55435,173],{"class":172},[162,55437,55403],{"class":168},[162,55439,3771],{"class":172},[162,55441,28210],{"class":207},[162,55443,194],{"class":168},[162,55445,55446,55449,55451,55453,55455,55457],{"class":164,"line":3052},[162,55447,55448],{"class":168},"          arr[j ",[162,55450,3771],{"class":172},[162,55452,28210],{"class":207},[162,55454,1204],{"class":168},[162,55456,173],{"class":172},[162,55458,55459],{"class":168}," tmp\n",[162,55461,55462],{"class":164,"line":3057},[162,55463,5646],{"class":168},[162,55465,55466],{"class":164,"line":3072},[162,55467,55468],{"class":168},"      }\n",[162,55470,55471],{"class":164,"line":3077},[162,55472,5305],{"class":168},[162,55474,55475,55478,55480],{"class":164,"line":3100},[162,55476,55477],{"class":168},"    document.",[162,55479,54999],{"class":5082},[162,55481,55482],{"class":168},"(arr)\n",[162,55484,55485,55488,55490],{"class":164,"line":3140},[162,55486,55487],{"class":168},"  \u003C\u002F",[162,55489,54885],{"class":54373},[162,55491,54380],{"class":168},[162,55493,55494,55496,55498],{"class":164,"line":4878},[162,55495,54857],{"class":168},[162,55497,54872],{"class":54373},[162,55499,54380],{"class":168},[162,55501,55502],{"class":164,"line":4883},[162,55503,301],{"emptyLinePlaceholder":300},[162,55505,55506,55508,55510],{"class":164,"line":4897},[162,55507,54857],{"class":168},[162,55509,53708],{"class":54373},[162,55511,54380],{"class":168},[19,55513,55514],{},[4602,55515],{"alt":158,"src":55516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,55518,55519],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,55521,55522],{},"let arr = [4, 2, 5, 1, 3]",[19,55524,55525],{},"\u002F\u002F 1.升序排列写法",[19,55527,55528],{},"arr.sort(function (a, b) {",[19,55530,55531],{},"return a - b",[19,55533,55534],{},"})",[19,55536,55537],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,55539,55540],{},"\u002F\u002F 降序排列写法",[19,55542,55528],{},[19,55544,55545],{},"return b - a",[19,55547,55534],{},[19,55549,55550],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,55552,55554],{"id":55553},"_29-函数","2.9 函数",[19,55556,55557],{},[4602,55558],{"alt":158,"src":55559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,55561,55562],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,55564,55565],{},"函数的声明用function",[19,55567,55568],{},"函数里边可以嵌套函数",[3284,55570,55572],{"id":55571},"_291-函数传参","2.9.1 函数传参",[19,55574,55575],{},[4602,55576],{"alt":158,"src":55577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,55579,55580],{},[4602,55581],{"alt":158,"src":55582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[4279,55584,55585,55588,55591,55594,55597,55600],{},[1455,55586,55587],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[1455,55589,55590],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[1455,55592,55593],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[1455,55595,55596],{},"开发中尽量保持形参和实参个数一致",[1455,55598,55599],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[1455,55601,55602],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,55604,55605],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[3284,55607,55609],{"id":55608},"_292-函数的返回值","2.9.2 函数的返回值",[19,55611,55612],{},[4602,55613],{"alt":158,"src":55614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,55616,55617],{},[4602,55618],{"alt":158,"src":55619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[4279,55621,55622,55625,55628,55631,55634],{},[1455,55623,55624],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[1455,55626,55627],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[1455,55629,55630],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[1455,55632,55633],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[1455,55635,55636],{},"断点调试:进入函数内部看执行过程F11",[3284,55638,55640],{"id":55639},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[153,55642,55644],{"className":53706,"code":55643,"language":53708,"meta":158,"style":158},"    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",[71,55645,55646,55651,55656,55660,55665],{"__ignoreMap":158},[162,55647,55648],{"class":164,"line":165},[162,55649,55650],{"class":168},"    function fn(a, b) {\n",[162,55652,55653],{"class":164,"line":197},[162,55654,55655],{"class":168},"      console.log(a + b);\n",[162,55657,55658],{"class":164,"line":228},[162,55659,5305],{"class":168},[162,55661,55662],{"class":164,"line":252},[162,55663,55664],{"class":168},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[162,55666,55667],{"class":164,"line":328},[162,55668,55669],{"class":168},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[3284,55671,55673],{"id":55672},"_294-作用域","2.9.4 作用域",[4279,55675,55676,55682,55687,55690,55693],{},[1455,55677,55678,55679],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[3453,55680,55681],{},"作用域",[1455,55683,55684],{},[3453,55685,55686],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[1455,55688,55689],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[1455,55691,55692],{},"函数内部可以直接所使用全局变量",[1455,55694,55695],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,55697,17727],{},[153,55699,55701],{"className":53706,"code":55700,"language":53708,"meta":158,"style":158},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[71,55702,55703,55708,55713,55717,55722,55727,55732],{"__ignoreMap":158},[162,55704,55705],{"class":164,"line":165},[162,55706,55707],{"class":168},"    function fun() {\n",[162,55709,55710],{"class":164,"line":197},[162,55711,55712],{"class":168},"      num = 10\n",[162,55714,55715],{"class":164,"line":228},[162,55716,5305],{"class":168},[162,55718,55719],{"class":164,"line":252},[162,55720,55721],{"class":168},"    fun()\n",[162,55723,55724],{"class":164,"line":328},[162,55725,55726],{"class":168},"    console.log(num)\n",[162,55728,55729],{"class":164,"line":466},[162,55730,55731],{"class":168},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[162,55733,55734],{"class":164,"line":471},[162,55735,55736],{"class":168},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[4279,55738,55739,55742],{},[1455,55740,55741],{},"函数内部的形参可以看做是局部变量",[1455,55743,55744],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,55746,55747,55748],{},"变量访问原则： ",[3453,55749,55750],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[3284,55752,55754],{"id":55753},"_295-匿名函数","2.9.5 匿名函数",[19,55756,55757],{},"函数可以分为具名函数和匿名函数",[19,55759,55760],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[1452,55762,55763],{},[1455,55764,55765],{},"函数表达式",[19,55767,55768],{},[4602,55769],{"alt":158,"src":55770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,55772,55773],{},"里边也可以写参数",[19,55775,55776],{},"具名函数调用位置可以随意调整；",[19,55778,55779],{},"匿名函数函数表达式形式只能在声明后才可以使用",[1452,55781,55782],{"start":197},[1455,55783,55784],{},"立即执行函数",[19,55786,55787],{},[4602,55788],{"alt":158,"src":55789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,55791,55792],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,55794,55795],{},"写法：两个小括号，然后在第一个小括号中写function",[19,55797,55798],{},"(function () {})();",[19,55800,55801],{},"不要落下最后的;",[19,55803,55804],{},"立即执行函数必须要加;",[19,55806,55807],{},"分号写前写后都没问题",[19,55809,55810],{},"写前：",[19,55812,55813],{},"(function() {})()",[19,55815,55816],{},";(function () {})();",[19,55818,55819],{},"写后:",[19,55821,55822],{},"(function() {})();",[19,55824,55798],{},[19,55826,55827],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,55829,55830],{},"还有一种写法：",[19,55832,55833],{},"(function(){}());",[19,55835,55836],{},"或者:",[19,55838,55839],{},"!function(){}();",[19,55841,55842],{},"立即执行函数有时候也是可以加名字的：",[19,55844,55845],{},"(function flexible(window,document) {}(window,document));",[19,55847,55848],{},"省一些调用方法",[3284,55850,55852],{"id":55851},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,55854,55855],{},[4602,55856],{"alt":158,"src":55857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,55859,55860],{},"这样就不用非得给x,y初始化了",[19,55862,55863],{},[4602,55864],{"alt":158,"src":55865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,55867,55868],{},"代码执行时先看左边",[19,55870,55871],{},"例如：console.log(false && 3+5)",[19,55873,55874],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,55876,55877],{},"&&都是真时，就返回最后一个真值",[19,55879,55880],{},"console.log(11 && 22)",[19,55882,55883],{},"输出22",[19,55885,55886],{},"逻辑与：遇真则真",[19,55888,17727],{},[19,55890,55891],{},"let age=1",[19,55893,55894],{},"console.log(11 || age++)",[19,55896,55897],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,55899,55900],{},"console.log(11 || 22)",[19,55902,55903],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,55905,55906],{},"||如果都是假的话，就取最后一个假的值了",[3284,55908,55910],{"id":55909},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,55912,55913],{},"显示转换：",[19,55915,55916,55919,55920],{},[3453,55917,55918],{},"记忆","： ",[3453,55921,55922],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,55924,55925],{},"空字符串为假，其他字符串全为真",[19,55927,55928],{},[4602,55929],{"alt":158,"src":55930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,55932,55933],{},"隐式转换：",[19,55935,55936],{},[4602,55937],{"alt":158,"src":55938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,55940,55941],{},"隐式转换:",[19,55943,55944],{},"null+3=3",[19,55946,55947],{},"undefined+3=NaN",[19,55949,55950],{},"null==undefined 输出true,他两个都当0看",[19,55952,55953],{},"null===undefined 输出false",[19,55955,55956],{},"undefined做任何操作都是NaN",[19,55958,55959],{},"NaN不等于NaN，NaN表示计算错误",[14,55961,55963],{"id":55962},"_210-对象","2.10 对象",[3284,55965,55967],{"id":55966},"_2101-对象的介绍","2.10.1 对象的介绍",[19,55969,55970],{},"对象也是一种数据类型，里边的数据是无序的",[19,55972,55973],{},"对象由属性和方法组成",[19,55975,55976],{},[4602,55977],{"alt":158,"src":55978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,55980,55981],{},[4602,55982],{"alt":158,"src":55983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,55985,55986],{},[4602,55987],{"alt":158,"src":55988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[3284,55990,55992],{"id":55991},"_2102-对象属性","2.10.2 对象属性",[19,55994,55995],{},[4602,55996],{"alt":158,"src":55997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[1452,55999,56000],{},[1455,56001,56002],{},"查询对象",[19,56004,56005],{},"对象名.属性 goods.uname",[19,56007,56008],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,56010,56011],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,56013,56014],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,56016,56017],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[1452,56019,56020],{"start":197},[1455,56021,56022],{},"重新赋值",[19,56024,56025],{},"对象名.属性=新值",[1452,56027,56028],{"start":228},[1455,56029,56030],{},"增加新数据",[19,56032,56025],{},[1452,56034,56035],{"start":252},[1455,56036,56037],{},"删除对象中的属性",[19,56039,56040],{},"delete 对象名.属性",[3284,56042,56044],{"id":56043},"_2103-对象方法","2.10.3 对象方法",[19,56046,56047],{},[4602,56048],{"alt":158,"src":56049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,56051,56052],{},"后边跟的是匿名函数",[19,56054,56055],{},"对象外面的叫函数；对象内部的叫方法",[19,56057,56058],{},[4602,56059],{"alt":158,"src":56060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[3284,56062,56064],{"id":56063},"_2104-遍历对象","2.10.4 遍历对象",[19,56066,56067],{},"理解为加括号的python字典遍历",[19,56069,56070],{},[4602,56071],{"alt":158,"src":56072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,56074,56075],{},"k是字符串类型",[19,56077,56078],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[153,56080,56082],{"className":53706,"code":56081,"language":53708,"meta":158,"style":158},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[71,56083,56084,56089,56094,56099,56104],{"__ignoreMap":158},[162,56085,56086],{"class":164,"line":165},[162,56087,56088],{"class":168},"   let arr = [1, 2, 3]\n",[162,56090,56091],{"class":164,"line":197},[162,56092,56093],{"class":168},"    for (let k in arr) {\n",[162,56095,56096],{"class":164,"line":228},[162,56097,56098],{"class":168},"      console.log(k)\n",[162,56100,56101],{"class":164,"line":252},[162,56102,56103],{"class":168},"      console.log(arr[k])\n",[162,56105,56106],{"class":164,"line":328},[162,56107,5305],{"class":168},[19,56109,56110],{},[4602,56111],{"alt":158,"src":56112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,56114,56115],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,56117,56118],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,56120,56121],{},"for in 得到的k是属性名",[54885,56123,56124],{},"\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,56126,56127],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[3284,56129,56131],{"id":56130},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,56133,56134],{},"数组中放对象信息",[153,56136,56140],{"className":56137,"code":56138,"language":56139,"meta":158,"style":158},"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",[71,56141,56142,56150,56155,56160,56165,56170,56175,56180,56185,56190,56195,56200,56205,56209,56213],{"__ignoreMap":158},[162,56143,56144,56146,56148],{"class":164,"line":165},[162,56145,4187],{"class":168},[162,56147,54885],{"class":54373},[162,56149,54380],{"class":168},[162,56151,56152],{"class":164,"line":197},[162,56153,56154],{"class":168},"    let students = [\n",[162,56156,56157],{"class":164,"line":228},[162,56158,56159],{"class":168},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[162,56161,56162],{"class":164,"line":252},[162,56163,56164],{"class":168},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[162,56166,56167],{"class":164,"line":328},[162,56168,56169],{"class":168},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[162,56171,56172],{"class":164,"line":466},[162,56173,56174],{"class":168},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[162,56176,56177],{"class":164,"line":471},[162,56178,56179],{"class":168},"    ]\n",[162,56181,56182],{"class":164,"line":687},[162,56183,56184],{"class":168},"    for (let i = 0; i \u003C students.length; i++) {\n",[162,56186,56187],{"class":164,"line":692},[162,56188,56189],{"class":168},"      for (let k in students[i]) {\n",[162,56191,56192],{"class":164,"line":698},[162,56193,56194],{"class":168},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[162,56196,56197],{"class":164,"line":2955},[162,56198,56199],{"class":168},"        \u002F\u002F输出每个人的名字：\n",[162,56201,56202],{"class":164,"line":2960},[162,56203,56204],{"class":168},"        \u002F\u002Fconsole.log(students[i].name)\n",[162,56206,56207],{"class":164,"line":2971},[162,56208,55468],{"class":168},[162,56210,56211],{"class":164,"line":2984},[162,56212,5305],{"class":168},[162,56214,56215,56217,56219],{"class":164,"line":2989},[162,56216,55487],{"class":168},[162,56218,54885],{"class":54373},[162,56220,54380],{"class":168},[3284,56222,56224],{"id":56223},"_2106-内置对象","2.10.6 内置对象",[19,56226,56227],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[1452,56229,56230],{},[1455,56231,56232],{},"数学对象Math",[19,56234,56235],{},[4602,56236],{"alt":158,"src":56237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,56239,56240],{},[3538,56241,56244],{"href":56242,"rel":56243},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[26956],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,56246,56247],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,56249,56250],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,56252,56253],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,56255,56256],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,56258,56259],{},"null属于对象数据类型",[1452,56261,56262],{"start":197},[1455,56263,56264],{},"生成任意范围随机数",[19,56266,56267],{},[4602,56268],{"alt":158,"src":56269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,56271,56272],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,56274,56275],{},"乘以几就取不到几",[19,56277,56278],{},"取数组中的随机元素：",[19,56280,56281],{},"let arr = ['red', 'green', 'blue']",[19,56283,56284],{},"let random = Math.floor(Math.random() * arr.length)",[19,56286,56287],{},"console.log(arr[random])",[19,56289,56290],{},"这个函数得到的是全闭区间",[19,56292,56293],{},"function getRandom(N, M) {",[19,56295,56296],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,56298,976],{},[19,56300,56301],{},"console.log(getRandom(4, 8))",[3284,56303,56305],{"id":56304},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,56307,56308],{},[4602,56309],{"alt":158,"src":56310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,56312,56313],{},[4602,56314],{"alt":158,"src":56315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,56317,56318],{},[4602,56319],{"alt":158,"src":56320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,56322,56323],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,56325,56326],{},[4602,56327],{"alt":158,"src":56328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,56330,56331],{},[4602,56332],{"alt":158,"src":56333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,56335,56336],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,56338,56339],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,56341,56342],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[3219,56344,56345],{},"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":158,"searchDepth":197,"depth":197,"links":56347},[56348,56356,56357,56358,56359,56360,56367,56371,56377,56386],{"id":53541,"depth":197,"text":53542,"children":56349},[56350,56351,56352,56353,56354,56355],{"id":53545,"depth":228,"text":53546},{"id":53562,"depth":228,"text":53563},{"id":53602,"depth":228,"text":53603},{"id":53614,"depth":228,"text":53615},{"id":53623,"depth":228,"text":53624},{"id":53671,"depth":228,"text":53672},{"id":53681,"depth":197,"text":53682},{"id":53769,"depth":197,"text":53770},{"id":53792,"depth":197,"text":53793},{"id":53804,"depth":197,"text":53805},{"id":53991,"depth":197,"text":53992,"children":56361},[56362,56363,56364,56365,56366],{"id":53995,"depth":228,"text":53996},{"id":54004,"depth":228,"text":54005},{"id":54032,"depth":228,"text":54033},{"id":54068,"depth":228,"text":54069},{"id":54093,"depth":228,"text":54094},{"id":54105,"depth":197,"text":54106,"children":56368},[56369,56370],{"id":54126,"depth":228,"text":54127},{"id":54220,"depth":228,"text":54221},{"id":54278,"depth":197,"text":54279,"children":56372},[56373,56374,56375,56376],{"id":54282,"depth":228,"text":54283},{"id":54306,"depth":228,"text":54307},{"id":54359,"depth":228,"text":54360},{"id":55168,"depth":228,"text":55169},{"id":55553,"depth":197,"text":55554,"children":56378},[56379,56380,56381,56382,56383,56384,56385],{"id":55571,"depth":228,"text":55572},{"id":55608,"depth":228,"text":55609},{"id":55639,"depth":228,"text":55640},{"id":55672,"depth":228,"text":55673},{"id":55753,"depth":228,"text":55754},{"id":55851,"depth":228,"text":55852},{"id":55909,"depth":228,"text":55910},{"id":55962,"depth":197,"text":55963,"children":56387},[56388,56389,56390,56391,56392,56393,56394],{"id":55966,"depth":228,"text":55967},{"id":55991,"depth":228,"text":55992},{"id":56043,"depth":228,"text":56044},{"id":56063,"depth":228,"text":56064},{"id":56130,"depth":228,"text":56131},{"id":56223,"depth":228,"text":56224},{"id":56304,"depth":228,"text":56305},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":53533,"description":3241},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":56401,"title":56402,"body":56403,"description":3241,"extension":3242,"meta":79738,"navigation":300,"path":79739,"seo":79740,"stem":79741,"__hash__":79742},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":56404,"toc":79678},[56405,56408,56411,56414,56419,56422,56425,56428,56432,56436,56442,56447,56455,56462,56465,56469,56474,56479,56484,56487,56490,56501,56504,56508,56511,56514,56519,56524,56529,56532,56535,56627,56630,56635,56638,56643,56646,56649,56654,56657,56662,56666,56669,56683,56687,56692,56695,56698,56702,56707,56710,56714,56718,56723,56727,56732,56735,56738,56741,56744,56747,56750,56755,56760,56788,56791,56794,56797,56802,56805,56808,56811,56814,56818,56847,56851,56856,56861,56864,56867,56870,56875,56990,56995,57000,57161,57166,57169,57173,57178,57183,57186,57189,57192,57195,57198,57201,57204,57207,57210,57213,57216,57219,57222,57225,57227,57230,57233,57236,57241,57245,57642,57645,57651,57655,57660,58941,58946,58949,58952,58955,58960,60156,60160,60166,60171,60174,60179,60184,60188,60192,60197,60200,60205,60208,60211,60215,61123,61126,61130,61351,61354,61357,61360,61586,61589,61813,61816,61820,61825,61828,61831,62059,62062,62095,62098,62102,62107,62111,62114,62117,62120,62123,62126,62129,62132,62137,63417,63421,63424,64516,64520,64523,64526,64529,64532,64536,64539,64542,64544,64552,66032,66036,66039,66042,66045,66254,66257,66261,66265,66270,66275,66278,66281,66286,66290,66295,66298,66407,66411,66416,66421,66424,66427,66431,66436,66441,66446,66449,66452,66463,66466,66471,66476,66479,66482,66555,66559,66564,66567,66569,66580,66584,66589,67915,67918,67921,67924,67926,67929,67932,67935,67938,67941,67944,67947,67950,67953,67956,67959,67962,67964,67966,67969,67973,69067,69070,69073,69089,69103,69106,69111,69117,69122,69126,69130,69135,69139,69144,69586,69591,69594,69598,69603,69606,69609,69613,69618,69622,69627,69632,69636,69641,69646,69649,69654,69659,69663,69668,69673,69777,69780,69784,69789,70155,70158,70161,70164,70167,70170,70173,70176,70179,71475,71479,71484,71489,71492,71495,71498,71501,71503,71508,71513,71516,71520,71525,71530,71535,71538,71541,71544,71547,71550,71555,71558,71562,71567,71572,71576,71581,71584,71589,71592,71595,71598,71601,71604,71609,71612,71615,71618,71621,71625,71630,71633,71637,71642,71645,71648,71652,71681,71684,71688,71692,71697,71701,71706,71709,71712,71715,71718,71721,71724,71727,71730,71733,71736,71739,71742,71745,71748,71752,71757,71762,71765,71769,71773,71778,71781,71785,71788,71791,71796,71801,71806,71811,71816,71819,71822,71827,71832,71836,71841,71844,71849,71852,71855,71858,71861,71866,71869,71878,71882,71887,71890,71893,71897,71900,71905,71909,71912,71918,71924,71928,71954,71957,73516,73519,74015,74018,74023,74028,74033,74037,74042,74047,74052,74056,74061,74064,74067,74070,74073,74077,74080,74085,74088,74093,74097,74102,74105,74110,74115,74120,74123,74126,74131,74136,74139,74142,74146,74149,74154,74157,74162,74165,74170,74175,74180,74183,74188,74253,74256,74267,74271,74276,74448,74452,74457,74460,74463,74466,74470,74481,74485,74488,74493,74498,74501,74504,74507,74510,74513,74515,74518,74521,74524,74529,74532,74537,74540,74544,74547,74550,74564,74568,74571,74626,74631,74634,74637,74642,74645,74649,74654,74784,74788,74793,74798,74879,74884,74888,74891,74896,74901,74907,74910,74913,74916,74920,74925,74928,74939,74943,74960,78007,78011,78014,78017,78020,78041,78045,78048,78056,78059,78064,78067,78070,78075,78080,78084,78105,78109,78114,78117,78120,78123,78126,78130,78135,78138,78142,78147,78150,78155,78158,78163,78166,78171,79374,79378,79383,79386,79391,79675],[10,56406,56402],{"id":56407},"_3web-apis",[19,56409,56410],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,56412,56413],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,56415,56416],{},[4602,56417],{"alt":158,"src":56418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,56420,56421],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,56423,56424],{},"建议数组和对象使用 const 来声明",[19,56426,56427],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,56429,56431],{"id":56430},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[3284,56433,56435],{"id":56434},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,56437,56438,56441],{},[71,56439,56440],{},"document"," = HTML 文件解析后的对象化表示；",[19,56443,56444,56446],{},[71,56445,56440],{}," ≠ HTML 文件本身",[19,56448,56449,56454],{},[3453,56450,56451],{},[71,56452,56453],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,56456,56457,56461],{},[3453,56458,56459],{},[71,56460,56440],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,56463,56464],{},"document实际上为window.document的简写",[3284,56466,56468],{"id":56467},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,56470,56471],{},[4602,56472],{"alt":158,"src":56473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,56475,56476],{},[4602,56477],{"alt":158,"src":56478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,56480,56481],{},[4602,56482],{"alt":158,"src":56483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,56485,56486],{},"console.dir()",[19,56488,56489],{},"dir用来打印对象",[4279,56491,56492,56495,56498],{},[1455,56493,56494],{},"任何一个标签，都是一个对象",[1455,56496,56497],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[1455,56499,56500],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,56502,56503],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[3284,56505,56507],{"id":56506},"_312-获取dom对象","3.1.2 获取DoM对象",[19,56509,56510],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,56512,56513],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,56515,56516],{},[3453,56517,56518],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[1452,56520,56521],{},[1455,56522,56523],{},"利用CSS选择器来获取标签元素",[19,56525,56526],{},[4602,56527],{"alt":158,"src":56528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,56530,56531],{},"里边的选择器必须必须加引号！！！",[19,56533,56534],{},"只选择第一个元素",[153,56536,56538],{"className":56137,"code":56537,"language":56139,"meta":158,"style":158},"\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",[71,56539,56540,56548,56569,56588,56596,56601,56606,56611,56619],{"__ignoreMap":158},[162,56541,56542,56544,56546],{"class":164,"line":165},[162,56543,4187],{"class":168},[162,56545,54872],{"class":54373},[162,56547,54380],{"class":168},[162,56549,56550,56552,56554,56557,56559,56562,56565,56567],{"class":164,"line":197},[162,56551,55215],{"class":168},[162,56553,54683],{"class":54373},[162,56555,56556],{"class":5082}," class",[162,56558,173],{"class":168},[162,56560,56561],{"class":179},"\"box\"",[162,56563,56564],{"class":168},">123\u003C\u002F",[162,56566,54683],{"class":54373},[162,56568,54380],{"class":168},[162,56570,56571,56573,56575,56577,56579,56581,56584,56586],{"class":164,"line":228},[162,56572,55215],{"class":168},[162,56574,54683],{"class":54373},[162,56576,56556],{"class":5082},[162,56578,173],{"class":168},[162,56580,56561],{"class":179},[162,56582,56583],{"class":168},">456\u003C\u002F",[162,56585,54683],{"class":54373},[162,56587,54380],{"class":168},[162,56589,56590,56592,56594],{"class":164,"line":252},[162,56591,55215],{"class":168},[162,56593,54885],{"class":54373},[162,56595,54380],{"class":168},[162,56597,56598],{"class":164,"line":328},[162,56599,56600],{"class":168},"    \u002F\u002F 1.获取匹配的第一个元素\n",[162,56602,56603],{"class":164,"line":466},[162,56604,56605],{"class":168},"    const box = document.querySelector('div')\n",[162,56607,56608],{"class":164,"line":471},[162,56609,56610],{"class":168},"    console.dir(box)\n",[162,56612,56613,56615,56617],{"class":164,"line":687},[162,56614,55487],{"class":168},[162,56616,54885],{"class":54373},[162,56618,54380],{"class":168},[162,56620,56621,56623,56625],{"class":164,"line":692},[162,56622,54857],{"class":168},[162,56624,54872],{"class":54373},[162,56626,54380],{"class":168},[19,56628,56629],{},"只选123，不选456",[19,56631,56632],{},[4602,56633],{"alt":158,"src":56634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,56636,56637],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,56639,56640],{},[4602,56641],{"alt":158,"src":56642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,56644,56645],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,56647,56648],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[1452,56650,56651],{"start":197},[1455,56652,56653],{},"其他方法来获取标签元素",[19,56655,56656],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,56658,56659],{},[4602,56660],{"alt":158,"src":56661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[3284,56663,56665],{"id":56664},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,56667,56668],{},"设置修改DOM元素内容有两种方式：",[4279,56670,56671,56674,56677,56680],{},[1455,56672,56673],{},"元素.innerText=''",[1455,56675,56676],{},"元素.innerHTML=''",[1455,56678,56679],{},"不写字符串输出数字也是可以的",[1455,56681,56682],{},"元素.innerHtml=1",[25089,56684,56686],{"id":56685},"_3131-innertext","3.1.3.1 innerText",[19,56688,56689],{},[4602,56690],{"alt":158,"src":56691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,56693,56694],{},"思路：实现了修改盒子中的内容！",[19,56696,56697],{},"它只显示纯文本，不解析标签",[25089,56699,56701],{"id":56700},"_3132-innerhtml","3.1.3.2 innerHTML",[19,56703,56704],{},[4602,56705],{"alt":158,"src":56706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,56708,56709],{},"相比于innerText，他的强大之处在于可以解析标签",[3284,56711,56713],{"id":56712},"_314-操作元素属性","3.1.4 操作元素属性",[25089,56715,56717],{"id":56716},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,56719,56720],{},[4602,56721],{"alt":158,"src":56722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[25089,56724,56726],{"id":56725},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,56728,56729],{},[4602,56730],{"alt":158,"src":56731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,56733,56734],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,56736,56737],{},"div.style.backgroundColor = 'hotpink'",[19,56739,56740],{},"如果按照css的写法，-表示减，就会出错",[19,56742,56743],{},"body元素不需要再获取，直接用就行！！！！！！",[19,56745,56746],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,56748,56749],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,56751,56752],{},[4602,56753],{"alt":158,"src":56754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,56756,56757],{},[4602,56758],{"alt":158,"src":56759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[1452,56761,56762,56765,56768,56771,56774,56777],{},[1455,56763,56764],{},"className这个方式就是修改很多样式的时候来使用的！",[1455,56766,56767],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[1455,56769,56770],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[1455,56772,56773],{},"className为属性名，如果还用class的话就导致与关键字冲突",[1455,56775,56776],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[1455,56778,56779,56780,56785],{},"解析标签的时候就变为了",[54683,56781],{"className":56782},[56783,56784],"nav","box",[56786,56787],"br",{},[19,56789,56790],{},"例子：",[54683,56792],{"className":56793},[56783],[54885,56795,56796],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,56798,56799],{},[4602,56800],{"alt":158,"src":56801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,56803,56804],{},"追加和删除类名用classList",[19,56806,56807],{},"常用于类似于开关的操作",[19,56809,56810],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,56812,56813],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[25089,56815,56817],{"id":56816},"_3143-牢记点","3.1.4.3 牢记点",[1452,56819,56820,56823,56826,56829,56832,56835,56838,56841,56844],{},[1455,56821,56822],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[1455,56824,56825],{},"使用style属性操作css时不要忘记引号",[1455,56827,56828],{},"使用className或者classList时也不要忘记引号",[1455,56830,56831],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[1455,56833,56834],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[1455,56836,56837],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[1455,56839,56840],{},"若： let arr=['1','2',3] arr[0]=1",[1455,56842,56843],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[1455,56845,56846],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[3284,56848,56850],{"id":56849},"_315-操作表单元素","3.1.5 操作表单元素",[1452,56852,56853],{},[1455,56854,56855],{},"天生的属性",[19,56857,56858],{},[4602,56859],{"alt":158,"src":56860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,56862,56863],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,56865,56866],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,56868,56869],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,56871,56872],{},[4602,56873],{"alt":158,"src":56874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[153,56876,56878],{"className":53706,"code":56877,"language":53708,"meta":158,"style":158},"在复选框中如果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",[71,56879,56880,56885,56917,56922,56927,56932,56937,56941,56946,56951,56968,56980,56985],{"__ignoreMap":158},[162,56881,56882],{"class":164,"line":165},[162,56883,56884],{"class":168},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[162,56886,56887,56889,56892,56895,56897,56900,56902,56904,56906,56908,56910,56912,56915],{"class":164,"line":197},[162,56888,4187],{"class":168},[162,56890,56891],{"class":54373},"input",[162,56893,56894],{"class":5082}," type",[162,56896,173],{"class":168},[162,56898,56899],{"class":179},"\"checkbox\"",[162,56901,18013],{"class":5082},[162,56903,173],{"class":168},[162,56905,10756],{"class":179},[162,56907,18052],{"class":5082},[162,56909,173],{"class":168},[162,56911,10756],{"class":179},[162,56913,56914],{"class":5082}," checked",[162,56916,54380],{"class":168},[162,56918,56919],{"class":164,"line":228},[162,56920,56921],{"class":168},"不选的话：\n",[162,56923,56924],{"class":164,"line":252},[162,56925,56926],{"class":168},"const input = document.querySelector('input')\n",[162,56928,56929],{"class":164,"line":328},[162,56930,56931],{"class":168},"input.checked=false\n",[162,56933,56934],{"class":164,"line":466},[162,56935,56936],{"class":168},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[162,56938,56939],{"class":164,"line":471},[162,56940,301],{"emptyLinePlaceholder":300},[162,56942,56943],{"class":164,"line":687},[162,56944,56945],{"class":168},"禁用按钮：\n",[162,56947,56948],{"class":164,"line":692},[162,56949,56950],{"class":168},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[162,56952,56953,56955,56958,56961,56964,56966],{"class":164,"line":698},[162,56954,4187],{"class":168},[162,56956,56957],{"class":54373},"button",[162,56959,56960],{"class":5082}," disabled",[162,56962,56963],{"class":168},">点击\u003C\u002F",[162,56965,56957],{"class":54373},[162,56967,54380],{"class":168},[162,56969,56970,56972,56974,56976,56978],{"class":164,"line":2955},[162,56971,4187],{"class":168},[162,56973,56957],{"class":54373},[162,56975,56963],{"class":168},[162,56977,56957],{"class":54373},[162,56979,54380],{"class":168},[162,56981,56982],{"class":164,"line":2960},[162,56983,56984],{"class":168},"const bt = document.querySelector('button')\n",[162,56986,56987],{"class":164,"line":2971},[162,56988,56989],{"class":168},"bt.disabled = false\n",[1452,56991,56992],{"start":197},[1455,56993,56994],{},"自定义属性",[19,56996,56997],{},[4602,56998],{"alt":158,"src":56999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[153,57001,57003],{"className":56137,"code":57002,"language":56139,"meta":158,"style":158},"\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",[71,57004,57005,57013,57041,57060,57079,57098,57117,57125,57130,57135,57140,57145,57153],{"__ignoreMap":158},[162,57006,57007,57009,57011],{"class":164,"line":165},[162,57008,4187],{"class":168},[162,57010,54872],{"class":54373},[162,57012,54380],{"class":168},[162,57014,57015,57017,57019,57022,57024,57026,57029,57031,57034,57037,57039],{"class":164,"line":197},[162,57016,55215],{"class":168},[162,57018,54683],{"class":54373},[162,57020,57021],{"class":5082}," data-id",[162,57023,173],{"class":168},[162,57025,6792],{"class":179},[162,57027,57028],{"class":5082}," data-spm",[162,57030,173],{"class":168},[162,57032,57033],{"class":179},"\"我不知道\"",[162,57035,57036],{"class":168},">1\u003C\u002F",[162,57038,54683],{"class":54373},[162,57040,54380],{"class":168},[162,57042,57043,57045,57047,57049,57051,57053,57056,57058],{"class":164,"line":228},[162,57044,55215],{"class":168},[162,57046,54683],{"class":54373},[162,57048,57021],{"class":5082},[162,57050,173],{"class":168},[162,57052,6815],{"class":179},[162,57054,57055],{"class":168},">2\u003C\u002F",[162,57057,54683],{"class":54373},[162,57059,54380],{"class":168},[162,57061,57062,57064,57066,57068,57070,57072,57075,57077],{"class":164,"line":252},[162,57063,55215],{"class":168},[162,57065,54683],{"class":54373},[162,57067,57021],{"class":5082},[162,57069,173],{"class":168},[162,57071,6828],{"class":179},[162,57073,57074],{"class":168},">3\u003C\u002F",[162,57076,54683],{"class":54373},[162,57078,54380],{"class":168},[162,57080,57081,57083,57085,57087,57089,57091,57094,57096],{"class":164,"line":328},[162,57082,55215],{"class":168},[162,57084,54683],{"class":54373},[162,57086,57021],{"class":5082},[162,57088,173],{"class":168},[162,57090,6841],{"class":179},[162,57092,57093],{"class":168},">4\u003C\u002F",[162,57095,54683],{"class":54373},[162,57097,54380],{"class":168},[162,57099,57100,57102,57104,57106,57108,57110,57113,57115],{"class":164,"line":466},[162,57101,55215],{"class":168},[162,57103,54683],{"class":54373},[162,57105,57021],{"class":5082},[162,57107,173],{"class":168},[162,57109,6861],{"class":179},[162,57111,57112],{"class":168},">5\u003C\u002F",[162,57114,54683],{"class":54373},[162,57116,54380],{"class":168},[162,57118,57119,57121,57123],{"class":164,"line":471},[162,57120,55215],{"class":168},[162,57122,54885],{"class":54373},[162,57124,54380],{"class":168},[162,57126,57127],{"class":164,"line":687},[162,57128,57129],{"class":168},"    const one = document.querySelector('div')\n",[162,57131,57132],{"class":164,"line":692},[162,57133,57134],{"class":168},"    console.log(one.dataset)\n",[162,57136,57137],{"class":164,"line":698},[162,57138,57139],{"class":168},"    console.log(one.dataset.id)\n",[162,57141,57142],{"class":164,"line":2955},[162,57143,57144],{"class":168},"    console.log(one.dataset.spm)\n",[162,57146,57147,57149,57151],{"class":164,"line":2960},[162,57148,55487],{"class":168},[162,57150,54885],{"class":54373},[162,57152,54380],{"class":168},[162,57154,57155,57157,57159],{"class":164,"line":2971},[162,57156,54857],{"class":168},[162,57158,54872],{"class":54373},[162,57160,54380],{"class":168},[19,57162,57163],{},[4602,57164],{"alt":158,"src":57165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,57167,57168],{},"document.querySelector选择的是第一个对象（元素）",[3284,57170,57172],{"id":57171},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,57174,57175],{},[4602,57176],{"alt":158,"src":57177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,57179,57180],{},[4602,57181],{"alt":158,"src":57182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,57184,57185],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[54885,57187,57188],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,57190,57191],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[54885,57193,57194],{},"\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,57196,57197],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,57199,57200],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,57202,57203],{},"单位为毫秒！！！",[19,57205,57206],{},"可以搭配匿名函数来用！！！",[19,57208,57209],{},"setInterval(function () {",[19,57211,57212],{},"alert('两秒执行一次')",[19,57214,57215],{},"}, 2000)",[19,57217,57218],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,57220,57221],{},"function fn() {",[19,57223,57224],{},"document.write(1)",[19,57226,976],{},[19,57228,57229],{},"setInterval(fn, 1000)",[19,57231,57232],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,57234,57235],{},"setInterval('fn()', 1000)",[19,57237,57238],{},[4602,57239],{"alt":158,"src":57240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[25089,57242,57244],{"id":57243},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[153,57246,57248],{"className":53706,"code":57247,"language":53708,"meta":158,"style":158},"\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",[71,57249,57250,57260,57274,57278,57286,57300,57320,57332,57340,57344,57352,57389,57394,57399,57404,57412,57420,57442,57450,57455,57477,57482,57487,57498,57503,57523,57531,57546,57561,57572,57577,57587,57597,57601,57610,57614,57622,57630,57634],{"__ignoreMap":158},[162,57251,57252,57254,57256,57258],{"class":164,"line":165},[162,57253,54370],{"class":168},[162,57255,54374],{"class":54373},[162,57257,54377],{"class":5082},[162,57259,54380],{"class":168},[162,57261,57262,57264,57266,57268,57270,57272],{"class":164,"line":197},[162,57263,4187],{"class":168},[162,57265,53708],{"class":54373},[162,57267,54389],{"class":5082},[162,57269,173],{"class":168},[162,57271,54394],{"class":179},[162,57273,54380],{"class":168},[162,57275,57276],{"class":164,"line":228},[162,57277,301],{"emptyLinePlaceholder":300},[162,57279,57280,57282,57284],{"class":164,"line":252},[162,57281,4187],{"class":168},[162,57283,54407],{"class":54373},[162,57285,54380],{"class":168},[162,57287,57288,57290,57292,57294,57296,57298],{"class":164,"line":328},[162,57289,55215],{"class":168},[162,57291,54417],{"class":54373},[162,57293,54420],{"class":5082},[162,57295,173],{"class":168},[162,57297,54425],{"class":179},[162,57299,54380],{"class":168},[162,57301,57302,57304,57306,57308,57310,57312,57314,57316,57318],{"class":164,"line":466},[162,57303,55215],{"class":168},[162,57305,54417],{"class":54373},[162,57307,18013],{"class":5082},[162,57309,173],{"class":168},[162,57311,54464],{"class":179},[162,57313,54444],{"class":5082},[162,57315,173],{"class":168},[162,57317,54471],{"class":179},[162,57319,54380],{"class":168},[162,57321,57322,57324,57326,57328,57330],{"class":164,"line":471},[162,57323,55215],{"class":168},[162,57325,54480],{"class":54373},[162,57327,54483],{"class":168},[162,57329,54480],{"class":54373},[162,57331,54380],{"class":168},[162,57333,57334,57336,57338],{"class":164,"line":687},[162,57335,54857],{"class":168},[162,57337,54407],{"class":54373},[162,57339,54380],{"class":168},[162,57341,57342],{"class":164,"line":692},[162,57343,301],{"emptyLinePlaceholder":300},[162,57345,57346,57348,57350],{"class":164,"line":698},[162,57347,4187],{"class":168},[162,57349,54872],{"class":54373},[162,57351,54380],{"class":168},[162,57353,57354,57356,57359,57361,57363,57365,57367,57369,57371,57374,57376,57379,57382,57384,57387],{"class":164,"line":2955},[162,57355,55215],{"class":168},[162,57357,57358],{"class":54373},"textarea",[162,57360,18013],{"class":5082},[162,57362,173],{"class":168},[162,57364,10756],{"class":179},[162,57366,18052],{"class":5082},[162,57368,173],{"class":168},[162,57370,10756],{"class":179},[162,57372,57373],{"class":5082}," cols",[162,57375,173],{"class":168},[162,57377,57378],{"class":179},"\"30\"",[162,57380,57381],{"class":5082}," rows",[162,57383,173],{"class":168},[162,57385,57386],{"class":179},"\"10\"",[162,57388,54380],{"class":168},[162,57390,57391],{"class":164,"line":2960},[162,57392,57393],{"class":168},"        用户注册协议\n",[162,57395,57396],{"class":164,"line":2971},[162,57397,57398],{"class":168},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[162,57400,57401],{"class":164,"line":2984},[162,57402,57403],{"class":168},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[162,57405,57406,57408,57410],{"class":164,"line":2989},[162,57407,54848],{"class":168},[162,57409,57358],{"class":54373},[162,57411,54380],{"class":168},[162,57413,57414,57416,57418],{"class":164,"line":3011},[162,57415,55215],{"class":168},[162,57417,56786],{"class":54373},[162,57419,54380],{"class":168},[162,57421,57422,57424,57426,57428,57430,57433,57435,57438,57440],{"class":164,"line":3022},[162,57423,55215],{"class":168},[162,57425,56957],{"class":54373},[162,57427,56556],{"class":5082},[162,57429,173],{"class":168},[162,57431,57432],{"class":179},"\"btn\"",[162,57434,56960],{"class":5082},[162,57436,57437],{"class":168},">我已经阅读用户协议(5)\u003C\u002F",[162,57439,56957],{"class":54373},[162,57441,54380],{"class":168},[162,57443,57444,57446,57448],{"class":164,"line":3027},[162,57445,55215],{"class":168},[162,57447,54885],{"class":54373},[162,57449,54380],{"class":168},[162,57451,57452],{"class":164,"line":3046},[162,57453,57454],{"class":361},"    \u002F\u002F 1. 获取元素\n",[162,57456,57457,57459,57462,57464,57467,57470,57472,57475],{"class":164,"line":3052},[162,57458,14317],{"class":172},[162,57460,57461],{"class":207}," btn",[162,57463,16659],{"class":172},[162,57465,57466],{"class":168}," document.",[162,57468,57469],{"class":5082},"querySelector",[162,57471,604],{"class":168},[162,57473,57474],{"class":179},"'.btn'",[162,57476,434],{"class":168},[162,57478,57479],{"class":164,"line":3057},[162,57480,57481],{"class":361},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[162,57483,57484],{"class":164,"line":3072},[162,57485,57486],{"class":361},"    \u002F\u002F 2. 倒计时\n",[162,57488,57489,57491,57493,57495],{"class":164,"line":3077},[162,57490,55290],{"class":172},[162,57492,2642],{"class":168},[162,57494,173],{"class":172},[162,57496,57497],{"class":207}," 5\n",[162,57499,57500],{"class":164,"line":3100},[162,57501,57502],{"class":361},"    \u002F\u002F 2.1 开启定时器\n",[162,57504,57505,57507,57510,57512,57515,57517,57520],{"class":164,"line":3140},[162,57506,55290],{"class":172},[162,57508,57509],{"class":168}," n ",[162,57511,173],{"class":172},[162,57513,57514],{"class":5082}," setInterval",[162,57516,604],{"class":168},[162,57518,57519],{"class":172},"function",[162,57521,57522],{"class":168}," () {\n",[162,57524,57525,57528],{"class":164,"line":4878},[162,57526,57527],{"class":168},"      i",[162,57529,57530],{"class":172},"--\n",[162,57532,57533,57536,57538,57541,57543],{"class":164,"line":4883},[162,57534,57535],{"class":168},"      btn.innerHTML ",[162,57537,173],{"class":172},[162,57539,57540],{"class":179}," `我已经阅读用户协议(${",[162,57542,3732],{"class":168},[162,57544,57545],{"class":179},"})`\n",[162,57547,57548,57551,57554,57557,57559],{"class":164,"line":4897},[162,57549,57550],{"class":172},"      if",[162,57552,57553],{"class":168}," (i ",[162,57555,57556],{"class":172},"===",[162,57558,2717],{"class":207},[162,57560,15537],{"class":168},[162,57562,57563,57566,57569],{"class":164,"line":4902},[162,57564,57565],{"class":5082},"        clearInterval",[162,57567,57568],{"class":168},"(n)  ",[162,57570,57571],{"class":361},"\u002F\u002F 关闭定时器\n",[162,57573,57574],{"class":164,"line":5694},[162,57575,57576],{"class":361},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[162,57578,57579,57582,57584],{"class":164,"line":5708},[162,57580,57581],{"class":168},"        btn.disabled ",[162,57583,173],{"class":172},[162,57585,57586],{"class":207}," false\n",[162,57588,57589,57592,57594],{"class":164,"line":5716},[162,57590,57591],{"class":168},"        btn.innerHTML ",[162,57593,173],{"class":172},[162,57595,57596],{"class":179}," '同意'\n",[162,57598,57599],{"class":164,"line":5721},[162,57600,55468],{"class":168},[162,57602,57603,57606,57608],{"class":164,"line":5727},[162,57604,57605],{"class":168},"    }, ",[162,57607,9516],{"class":207},[162,57609,434],{"class":168},[162,57611,57612],{"class":164,"line":5733},[162,57613,301],{"emptyLinePlaceholder":300},[162,57615,57616,57618,57620],{"class":164,"line":5738},[162,57617,55487],{"class":168},[162,57619,54885],{"class":54373},[162,57621,54380],{"class":168},[162,57623,57624,57626,57628],{"class":164,"line":11052},[162,57625,54857],{"class":168},[162,57627,54872],{"class":54373},[162,57629,54380],{"class":168},[162,57631,57632],{"class":164,"line":11076},[162,57633,301],{"emptyLinePlaceholder":300},[162,57635,57636,57638,57640],{"class":164,"line":11081},[162,57637,54857],{"class":168},[162,57639,53708],{"class":54373},[162,57641,54380],{"class":168},[19,57643,57644],{},"不要一直想着用死循环,避免死循环",[19,57646,57647,57650],{},[71,57648,57649],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[25089,57652,57654],{"id":57653},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[1452,57656,57657],{},[1455,57658,57659],{},"法1",[153,57661,57663],{"className":53706,"code":57662,"language":53708,"meta":158,"style":158},"\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",[71,57664,57665,57675,57689,57693,57701,57715,57735,57747,57755,57761,57772,57783,57787,57791,57798,57810,57814,57818,57825,57837,57851,57864,57878,57882,57886,57893,57904,57915,57926,57938,57950,57962,57966,57970,57978,57988,58001,58013,58026,58030,58034,58041,58051,58063,58075,58086,58097,58107,58119,58131,58135,58139,58148,58160,58172,58200,58213,58217,58221,58228,58239,58243,58251,58259,58263,58271,58285,58300,58324,58332,58347,58360,58368,58389,58401,58413,58425,58437,58449,58461,58473,58482,58490,58498,58506,58517,58540,58559,58578,58597,58616,58635,58654,58674,58678,58698,58717,58737,58758,58769,58786,58796,58806,58816,58821,58826,58831,58836,58861,58874,58878,58901,58905,58913,58921,58929,58933],{"__ignoreMap":158},[162,57666,57667,57669,57671,57673],{"class":164,"line":165},[162,57668,54370],{"class":168},[162,57670,54374],{"class":54373},[162,57672,54377],{"class":5082},[162,57674,54380],{"class":168},[162,57676,57677,57679,57681,57683,57685,57687],{"class":164,"line":197},[162,57678,4187],{"class":168},[162,57680,53708],{"class":54373},[162,57682,54389],{"class":5082},[162,57684,173],{"class":168},[162,57686,54394],{"class":179},[162,57688,54380],{"class":168},[162,57690,57691],{"class":164,"line":228},[162,57692,301],{"emptyLinePlaceholder":300},[162,57694,57695,57697,57699],{"class":164,"line":252},[162,57696,4187],{"class":168},[162,57698,54407],{"class":54373},[162,57700,54380],{"class":168},[162,57702,57703,57705,57707,57709,57711,57713],{"class":164,"line":328},[162,57704,55215],{"class":168},[162,57706,54417],{"class":54373},[162,57708,54420],{"class":5082},[162,57710,173],{"class":168},[162,57712,54425],{"class":179},[162,57714,54380],{"class":168},[162,57716,57717,57719,57721,57723,57725,57727,57729,57731,57733],{"class":164,"line":466},[162,57718,55215],{"class":168},[162,57720,54417],{"class":54373},[162,57722,18013],{"class":5082},[162,57724,173],{"class":168},[162,57726,54464],{"class":179},[162,57728,54444],{"class":5082},[162,57730,173],{"class":168},[162,57732,54471],{"class":179},[162,57734,54380],{"class":168},[162,57736,57737,57739,57741,57743,57745],{"class":164,"line":471},[162,57738,55215],{"class":168},[162,57740,54480],{"class":54373},[162,57742,54483],{"class":168},[162,57744,54480],{"class":54373},[162,57746,54380],{"class":168},[162,57748,57749,57751,57753],{"class":164,"line":687},[162,57750,55215],{"class":168},[162,57752,3219],{"class":54373},[162,57754,54380],{"class":168},[162,57756,57757,57759],{"class":164,"line":692},[162,57758,9509],{"class":54373},[162,57760,1722],{"class":168},[162,57762,57763,57766,57768,57770],{"class":164,"line":698},[162,57764,57765],{"class":207},"      padding",[162,57767,1730],{"class":168},[162,57769,312],{"class":207},[162,57771,4433],{"class":168},[162,57773,57774,57777,57779,57781],{"class":164,"line":2955},[162,57775,57776],{"class":207},"      margin",[162,57778,1730],{"class":168},[162,57780,312],{"class":207},[162,57782,4433],{"class":168},[162,57784,57785],{"class":164,"line":2960},[162,57786,5305],{"class":168},[162,57788,57789],{"class":164,"line":2971},[162,57790,301],{"emptyLinePlaceholder":300},[162,57792,57793,57796],{"class":164,"line":2984},[162,57794,57795],{"class":54373},"    li",[162,57797,1722],{"class":168},[162,57799,57800,57803,57805,57808],{"class":164,"line":2989},[162,57801,57802],{"class":207},"      list-style",[162,57804,1730],{"class":168},[162,57806,57807],{"class":207},"none",[162,57809,4433],{"class":168},[162,57811,57812],{"class":164,"line":3011},[162,57813,5305],{"class":168},[162,57815,57816],{"class":164,"line":3022},[162,57817,301],{"emptyLinePlaceholder":300},[162,57819,57820,57823],{"class":164,"line":3027},[162,57821,57822],{"class":5082},"    .box",[162,57824,1722],{"class":168},[162,57826,57827,57830,57832,57835],{"class":164,"line":3046},[162,57828,57829],{"class":207},"      position",[162,57831,1730],{"class":168},[162,57833,57834],{"class":207},"relative",[162,57836,4433],{"class":168},[162,57838,57839,57842,57844,57847,57849],{"class":164,"line":3052},[162,57840,57841],{"class":207},"      width",[162,57843,1730],{"class":168},[162,57845,57846],{"class":207},"976",[162,57848,54564],{"class":172},[162,57850,4433],{"class":168},[162,57852,57853,57856,57858,57860,57862],{"class":164,"line":3057},[162,57854,57855],{"class":207},"      height",[162,57857,1730],{"class":168},[162,57859,4678],{"class":207},[162,57861,54564],{"class":172},[162,57863,4433],{"class":168},[162,57865,57866,57868,57870,57872,57874,57876],{"class":164,"line":3072},[162,57867,57776],{"class":207},[162,57869,1730],{"class":168},[162,57871,3608],{"class":207},[162,57873,54564],{"class":172},[162,57875,54628],{"class":207},[162,57877,4433],{"class":168},[162,57879,57880],{"class":164,"line":3077},[162,57881,5305],{"class":168},[162,57883,57884],{"class":164,"line":3100},[162,57885,301],{"emptyLinePlaceholder":300},[162,57887,57888,57891],{"class":164,"line":3140},[162,57889,57890],{"class":5082},"    .slider-footer",[162,57892,1722],{"class":168},[162,57894,57895,57897,57899,57902],{"class":164,"line":4878},[162,57896,57829],{"class":207},[162,57898,1730],{"class":168},[162,57900,57901],{"class":207},"absolute",[162,57903,4433],{"class":168},[162,57905,57906,57909,57911,57913],{"class":164,"line":4883},[162,57907,57908],{"class":207},"      left",[162,57910,1730],{"class":168},[162,57912,312],{"class":207},[162,57914,4433],{"class":168},[162,57916,57917,57920,57922,57924],{"class":164,"line":4897},[162,57918,57919],{"class":207},"      bottom",[162,57921,1730],{"class":168},[162,57923,312],{"class":207},[162,57925,4433],{"class":168},[162,57927,57928,57930,57932,57934,57936],{"class":164,"line":4902},[162,57929,57841],{"class":207},[162,57931,1730],{"class":168},[162,57933,3608],{"class":207},[162,57935,2708],{"class":172},[162,57937,4433],{"class":168},[162,57939,57940,57942,57944,57946,57948],{"class":164,"line":5694},[162,57941,57855],{"class":207},[162,57943,1730],{"class":168},[162,57945,3863],{"class":207},[162,57947,2708],{"class":172},[162,57949,4433],{"class":168},[162,57951,57952,57955,57957,57960],{"class":164,"line":5708},[162,57953,57954],{"class":207},"      background-color",[162,57956,1730],{"class":168},[162,57958,57959],{"class":207},"skyblue",[162,57961,4433],{"class":168},[162,57963,57964],{"class":164,"line":5716},[162,57965,5305],{"class":168},[162,57967,57968],{"class":164,"line":5721},[162,57969,301],{"emptyLinePlaceholder":300},[162,57971,57972,57974,57976],{"class":164,"line":5727},[162,57973,57890],{"class":5082},[162,57975,9931],{"class":54373},[162,57977,1722],{"class":168},[162,57979,57980,57982,57984,57986],{"class":164,"line":5733},[162,57981,57829],{"class":207},[162,57983,1730],{"class":168},[162,57985,57901],{"class":207},[162,57987,4433],{"class":168},[162,57989,57990,57993,57995,57997,57999],{"class":164,"line":5738},[162,57991,57992],{"class":207},"      font-size",[162,57994,1730],{"class":168},[162,57996,4178],{"class":207},[162,57998,54564],{"class":172},[162,58000,4433],{"class":168},[162,58002,58003,58005,58007,58009,58011],{"class":164,"line":11052},[162,58004,57908],{"class":207},[162,58006,1730],{"class":168},[162,58008,1011],{"class":207},[162,58010,54564],{"class":172},[162,58012,4433],{"class":168},[162,58014,58015,58018,58020,58022,58024],{"class":164,"line":11076},[162,58016,58017],{"class":207},"      top",[162,58019,1730],{"class":168},[162,58021,637],{"class":207},[162,58023,54564],{"class":172},[162,58025,4433],{"class":168},[162,58027,58028],{"class":164,"line":11081},[162,58029,5305],{"class":168},[162,58031,58032],{"class":164,"line":11087},[162,58033,301],{"emptyLinePlaceholder":300},[162,58035,58036,58039],{"class":164,"line":11114},[162,58037,58038],{"class":54373},"    ul",[162,58040,1722],{"class":168},[162,58042,58043,58045,58047,58049],{"class":164,"line":11119},[162,58044,57829],{"class":207},[162,58046,1730],{"class":168},[162,58048,57901],{"class":207},[162,58050,4433],{"class":168},[162,58052,58053,58055,58057,58059,58061],{"class":164,"line":11125},[162,58054,58017],{"class":207},[162,58056,1730],{"class":168},[162,58058,4063],{"class":207},[162,58060,54564],{"class":172},[162,58062,4433],{"class":168},[162,58064,58065,58067,58069,58071,58073],{"class":164,"line":11137},[162,58066,57908],{"class":207},[162,58068,1730],{"class":168},[162,58070,1011],{"class":207},[162,58072,54564],{"class":172},[162,58074,4433],{"class":168},[162,58076,58077,58080,58082,58084],{"class":164,"line":11149},[162,58078,58079],{"class":207},"      display",[162,58081,1730],{"class":168},[162,58083,54549],{"class":207},[162,58085,4433],{"class":168},[162,58087,58088,58091,58093,58095],{"class":164,"line":11161},[162,58089,58090],{"class":207},"      justify-content",[162,58092,1730],{"class":168},[162,58094,54740],{"class":207},[162,58096,4433],{"class":168},[162,58098,58099,58101,58103,58105],{"class":164,"line":12816},[162,58100,57829],{"class":207},[162,58102,1730],{"class":168},[162,58104,57901],{"class":207},[162,58106,4433],{"class":168},[162,58108,58109,58111,58113,58115,58117],{"class":164,"line":12841},[162,58110,57841],{"class":207},[162,58112,1730],{"class":168},[162,58114,7105],{"class":207},[162,58116,54564],{"class":172},[162,58118,4433],{"class":168},[162,58120,58121,58123,58125,58127,58129],{"class":164,"line":12864},[162,58122,57855],{"class":207},[162,58124,1730],{"class":168},[162,58126,1011],{"class":207},[162,58128,54564],{"class":172},[162,58130,4433],{"class":168},[162,58132,58133],{"class":164,"line":12888},[162,58134,5305],{"class":168},[162,58136,58137],{"class":164,"line":12893},[162,58138,301],{"emptyLinePlaceholder":300},[162,58140,58141,58143,58146],{"class":164,"line":12898},[162,58142,58038],{"class":54373},[162,58144,58145],{"class":54373}," li",[162,58147,1722],{"class":168},[162,58149,58150,58152,58154,58156,58158],{"class":164,"line":12903},[162,58151,57841],{"class":207},[162,58153,1730],{"class":168},[162,58155,1011],{"class":207},[162,58157,54564],{"class":172},[162,58159,4433],{"class":168},[162,58161,58162,58164,58166,58168,58170],{"class":164,"line":12912},[162,58163,57855],{"class":207},[162,58165,1730],{"class":168},[162,58167,1011],{"class":207},[162,58169,54564],{"class":172},[162,58171,4433],{"class":168},[162,58173,58174,58176,58178,58181,58183,58185,58187,58189,58191,58193,58195,58198],{"class":164,"line":12917},[162,58175,57954],{"class":207},[162,58177,1730],{"class":168},[162,58179,58180],{"class":207},"rgba",[162,58182,604],{"class":168},[162,58184,312],{"class":207},[162,58186,183],{"class":168},[162,58188,312],{"class":207},[162,58190,183],{"class":168},[162,58192,312],{"class":207},[162,58194,183],{"class":168},[162,58196,58197],{"class":207},".4",[162,58199,5836],{"class":168},[162,58201,58202,58205,58207,58209,58211],{"class":164,"line":12923},[162,58203,58204],{"class":207},"      border-radius",[162,58206,1730],{"class":168},[162,58208,1006],{"class":207},[162,58210,54564],{"class":172},[162,58212,4433],{"class":168},[162,58214,58215],{"class":164,"line":12944},[162,58216,5305],{"class":168},[162,58218,58219],{"class":164,"line":12950},[162,58220,301],{"emptyLinePlaceholder":300},[162,58222,58223,58226],{"class":164,"line":12964},[162,58224,58225],{"class":5082},"    .activate",[162,58227,1722],{"class":168},[162,58229,58230,58232,58234,58237],{"class":164,"line":12970},[162,58231,57954],{"class":207},[162,58233,1730],{"class":168},[162,58235,58236],{"class":207},"#f7f7f7",[162,58238,4433],{"class":168},[162,58240,58241],{"class":164,"line":12997},[162,58242,5305],{"class":168},[162,58244,58245,58247,58249],{"class":164,"line":13006},[162,58246,55487],{"class":168},[162,58248,3219],{"class":54373},[162,58250,54380],{"class":168},[162,58252,58253,58255,58257],{"class":164,"line":13012},[162,58254,54857],{"class":168},[162,58256,54407],{"class":54373},[162,58258,54380],{"class":168},[162,58260,58261],{"class":164,"line":13020},[162,58262,301],{"emptyLinePlaceholder":300},[162,58264,58265,58267,58269],{"class":164,"line":13025},[162,58266,4187],{"class":168},[162,58268,54872],{"class":54373},[162,58270,54380],{"class":168},[162,58272,58273,58275,58277,58279,58281,58283],{"class":164,"line":19695},[162,58274,55215],{"class":168},[162,58276,54683],{"class":54373},[162,58278,56556],{"class":5082},[162,58280,173],{"class":168},[162,58282,56561],{"class":179},[162,58284,54380],{"class":168},[162,58286,58287,58289,58291,58293,58295,58298],{"class":164,"line":19701},[162,58288,54414],{"class":168},[162,58290,54683],{"class":54373},[162,58292,56556],{"class":5082},[162,58294,173],{"class":168},[162,58296,58297],{"class":179},"\"slider-wrapper\"",[162,58299,54380],{"class":168},[162,58301,58302,58305,58307,58310,58312,58315,58318,58320,58322],{"class":164,"line":19724},[162,58303,58304],{"class":168},"      \u003C",[162,58306,4602],{"class":54373},[162,58308,58309],{"class":5082}," src",[162,58311,173],{"class":168},[162,58313,58314],{"class":179},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[162,58316,58317],{"class":5082}," alt",[162,58319,173],{"class":168},[162,58321,10756],{"class":179},[162,58323,54380],{"class":168},[162,58325,58326,58328,58330],{"class":164,"line":19730},[162,58327,54848],{"class":168},[162,58329,54683],{"class":54373},[162,58331,54380],{"class":168},[162,58333,58334,58336,58338,58340,58342,58345],{"class":164,"line":19753},[162,58335,54414],{"class":168},[162,58337,54683],{"class":54373},[162,58339,56556],{"class":5082},[162,58341,173],{"class":168},[162,58343,58344],{"class":179},"\"slider-footer\"",[162,58346,54380],{"class":168},[162,58348,58349,58351,58353,58356,58358],{"class":164,"line":19767},[162,58350,58304],{"class":168},[162,58352,19],{"class":54373},[162,58354,58355],{"class":168},">对人类来说会不会太超前了?\u003C\u002F",[162,58357,19],{"class":54373},[162,58359,54380],{"class":168},[162,58361,58362,58364,58366],{"class":164,"line":19787},[162,58363,58304],{"class":168},[162,58365,4279],{"class":54373},[162,58367,54380],{"class":168},[162,58369,58370,58373,58375,58377,58379,58382,58385,58387],{"class":164,"line":19793},[162,58371,58372],{"class":168},"        \u003C",[162,58374,1455],{"class":54373},[162,58376,56556],{"class":5082},[162,58378,173],{"class":168},[162,58380,58381],{"class":179},"\"activate\"",[162,58383,58384],{"class":168},">\u003C\u002F",[162,58386,1455],{"class":54373},[162,58388,54380],{"class":168},[162,58390,58391,58393,58395,58397,58399],{"class":164,"line":19804},[162,58392,58372],{"class":168},[162,58394,1455],{"class":54373},[162,58396,58384],{"class":168},[162,58398,1455],{"class":54373},[162,58400,54380],{"class":168},[162,58402,58403,58405,58407,58409,58411],{"class":164,"line":19827},[162,58404,58372],{"class":168},[162,58406,1455],{"class":54373},[162,58408,58384],{"class":168},[162,58410,1455],{"class":54373},[162,58412,54380],{"class":168},[162,58414,58415,58417,58419,58421,58423],{"class":164,"line":19849},[162,58416,58372],{"class":168},[162,58418,1455],{"class":54373},[162,58420,58384],{"class":168},[162,58422,1455],{"class":54373},[162,58424,54380],{"class":168},[162,58426,58427,58429,58431,58433,58435],{"class":164,"line":19854},[162,58428,58372],{"class":168},[162,58430,1455],{"class":54373},[162,58432,58384],{"class":168},[162,58434,1455],{"class":54373},[162,58436,54380],{"class":168},[162,58438,58439,58441,58443,58445,58447],{"class":164,"line":19860},[162,58440,58372],{"class":168},[162,58442,1455],{"class":54373},[162,58444,58384],{"class":168},[162,58446,1455],{"class":54373},[162,58448,54380],{"class":168},[162,58450,58451,58453,58455,58457,58459],{"class":164,"line":19874},[162,58452,58372],{"class":168},[162,58454,1455],{"class":54373},[162,58456,58384],{"class":168},[162,58458,1455],{"class":54373},[162,58460,54380],{"class":168},[162,58462,58463,58465,58467,58469,58471],{"class":164,"line":19887},[162,58464,58372],{"class":168},[162,58466,1455],{"class":54373},[162,58468,58384],{"class":168},[162,58470,1455],{"class":54373},[162,58472,54380],{"class":168},[162,58474,58475,58478,58480],{"class":164,"line":19892},[162,58476,58477],{"class":168},"      \u003C\u002F",[162,58479,4279],{"class":54373},[162,58481,54380],{"class":168},[162,58483,58484,58486,58488],{"class":164,"line":19906},[162,58485,54848],{"class":168},[162,58487,54683],{"class":54373},[162,58489,54380],{"class":168},[162,58491,58492,58494,58496],{"class":164,"line":19911},[162,58493,55487],{"class":168},[162,58495,54683],{"class":54373},[162,58497,54380],{"class":168},[162,58499,58500,58502,58504],{"class":164,"line":19917},[162,58501,55215],{"class":168},[162,58503,54885],{"class":54373},[162,58505,54380],{"class":168},[162,58507,58508,58510,58513,58515],{"class":164,"line":19922},[162,58509,14317],{"class":172},[162,58511,58512],{"class":207}," arrImage",[162,58514,16659],{"class":172},[162,58516,2030],{"class":168},[162,58518,58519,58522,58525,58528,58531,58534,58537],{"class":164,"line":19936},[162,58520,58521],{"class":168},"      { url: ",[162,58523,58524],{"class":179},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[162,58526,58527],{"class":168},", title: ",[162,58529,58530],{"class":179},"'对人类来说会不会太超前了?'",[162,58532,58533],{"class":168},", color: ",[162,58535,58536],{"class":179},"'rgba(100,67,68)'",[162,58538,58539],{"class":168}," },\n",[162,58541,58542,58544,58547,58549,58552,58554,58557],{"class":164,"line":19941},[162,58543,58521],{"class":168},[162,58545,58546],{"class":179},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[162,58548,58527],{"class":168},[162,58550,58551],{"class":179},"'开启剑与雪的黑暗传说!'",[162,58553,58533],{"class":168},[162,58555,58556],{"class":179},"'rgba(43,35,26)'",[162,58558,58539],{"class":168},[162,58560,58561,58563,58566,58568,58571,58573,58576],{"class":164,"line":19946},[162,58562,58521],{"class":168},[162,58564,58565],{"class":179},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[162,58567,58527],{"class":168},[162,58569,58570],{"class":179},"'真正的jo厨出现了!'",[162,58572,58533],{"class":168},[162,58574,58575],{"class":179},"'rgba(36,31,33)'",[162,58577,58539],{"class":168},[162,58579,58580,58582,58585,58587,58590,58592,58595],{"class":164,"line":19960},[162,58581,58521],{"class":168},[162,58583,58584],{"class":179},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[162,58586,58527],{"class":168},[162,58588,58589],{"class":179},"'李玉刚:让世界通过b站看到东方大国文化'",[162,58591,58533],{"class":168},[162,58593,58594],{"class":179},"'rgba(139,98,66)'",[162,58596,58539],{"class":168},[162,58598,58599,58601,58604,58606,58609,58611,58614],{"class":164,"line":19972},[162,58600,58521],{"class":168},[162,58602,58603],{"class":179},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[162,58605,58527],{"class":168},[162,58607,58608],{"class":179},"'快来分享你的寒假日常吧'",[162,58610,58533],{"class":168},[162,58612,58613],{"class":179},"'rgba(67,90,92)'",[162,58615,58539],{"class":168},[162,58617,58618,58620,58623,58625,58628,58630,58633],{"class":164,"line":19977},[162,58619,58521],{"class":168},[162,58621,58622],{"class":179},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[162,58624,58527],{"class":168},[162,58626,58627],{"class":179},"'哔哩哔哩小年YEAR'",[162,58629,58533],{"class":168},[162,58631,58632],{"class":179},"'rgba(166,131,143)'",[162,58634,58539],{"class":168},[162,58636,58637,58639,58642,58644,58647,58649,58652],{"class":164,"line":19990},[162,58638,58521],{"class":168},[162,58640,58641],{"class":179},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[162,58643,58527],{"class":168},[162,58645,58646],{"class":179},"'一站式解决你的电脑配置问题'",[162,58648,58533],{"class":168},[162,58650,58651],{"class":179},"'rgba(53,29,25)'",[162,58653,58539],{"class":168},[162,58655,58656,58658,58661,58663,58666,58668,58671],{"class":164,"line":19995},[162,58657,58521],{"class":168},[162,58659,58660],{"class":179},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[162,58662,58527],{"class":168},[162,58664,58665],{"class":179},"'谁不想和小猫咪贴贴呢?'",[162,58667,58533],{"class":168},[162,58669,58670],{"class":179},"'rgba(99,72,114)'",[162,58672,58673],{"class":168}," }\n",[162,58675,58676],{"class":164,"line":20000},[162,58677,56179],{"class":168},[162,58679,58680,58682,58685,58687,58689,58691,58693,58696],{"class":164,"line":20005},[162,58681,14317],{"class":172},[162,58683,58684],{"class":207}," img",[162,58686,16659],{"class":172},[162,58688,57466],{"class":168},[162,58690,57469],{"class":5082},[162,58692,604],{"class":168},[162,58694,58695],{"class":179},"'.slider-wrapper img'",[162,58697,434],{"class":168},[162,58699,58700,58702,58704,58706,58708,58710,58712,58715],{"class":164,"line":20018},[162,58701,14317],{"class":172},[162,58703,9931],{"class":207},[162,58705,16659],{"class":172},[162,58707,57466],{"class":168},[162,58709,57469],{"class":5082},[162,58711,604],{"class":168},[162,58713,58714],{"class":179},"'.slider-footer p'",[162,58716,434],{"class":168},[162,58718,58719,58721,58724,58726,58728,58730,58732,58735],{"class":164,"line":20023},[162,58720,14317],{"class":172},[162,58722,58723],{"class":207}," color",[162,58725,16659],{"class":172},[162,58727,57466],{"class":168},[162,58729,57469],{"class":5082},[162,58731,604],{"class":168},[162,58733,58734],{"class":179},"'.slider-footer'",[162,58736,434],{"class":168},[162,58738,58739,58741,58744,58746,58748,58751,58753,58756],{"class":164,"line":35709},[162,58740,14317],{"class":172},[162,58742,58743],{"class":207}," lis",[162,58745,16659],{"class":172},[162,58747,57466],{"class":168},[162,58749,58750],{"class":5082},"querySelectorAll",[162,58752,604],{"class":168},[162,58754,58755],{"class":179},"'.slider-footer ul li'",[162,58757,434],{"class":168},[162,58759,58760,58762,58764,58766],{"class":164,"line":35715},[162,58761,55290],{"class":172},[162,58763,2642],{"class":168},[162,58765,173],{"class":172},[162,58767,58768],{"class":207}," 1\n",[162,58770,58771,58773,58776,58778,58780,58782,58784],{"class":164,"line":35721},[162,58772,55290],{"class":172},[162,58774,58775],{"class":168}," timer ",[162,58777,173],{"class":172},[162,58779,57514],{"class":5082},[162,58781,604],{"class":168},[162,58783,57519],{"class":172},[162,58785,57522],{"class":168},[162,58787,58788,58791,58793],{"class":164,"line":35727},[162,58789,58790],{"class":168},"      img.src ",[162,58792,173],{"class":172},[162,58794,58795],{"class":168}," arrImage[i].url\n",[162,58797,58798,58801,58803],{"class":164,"line":35733},[162,58799,58800],{"class":168},"      p.innerHTML ",[162,58802,173],{"class":172},[162,58804,58805],{"class":168}," arrImage[i].title\n",[162,58807,58808,58811,58813],{"class":164,"line":35744},[162,58809,58810],{"class":168},"      color.style.backgroundColor ",[162,58812,173],{"class":172},[162,58814,58815],{"class":168}," arrImage[i].color\n",[162,58817,58818],{"class":164,"line":35750},[162,58819,58820],{"class":361},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[162,58822,58823],{"class":164,"line":35770},[162,58824,58825],{"class":361},"      \u002F\u002F li.classList.add('activate')\n",[162,58827,58828],{"class":164,"line":35776},[162,58829,58830],{"class":361},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[162,58832,58833],{"class":164,"line":35787},[162,58834,58835],{"class":361},"      \u002F\u002F lis[i].classList.remove('activate')\n",[162,58837,58838,58841,58843,58845,58848,58851,58854,58856,58859],{"class":164,"line":35793},[162,58839,58840],{"class":168},"      document.",[162,58842,57469],{"class":5082},[162,58844,604],{"class":168},[162,58846,58847],{"class":179},"'.activate'",[162,58849,58850],{"class":168},")?.classList.",[162,58852,58853],{"class":5082},"toggle",[162,58855,604],{"class":168},[162,58857,58858],{"class":179},"'activate'",[162,58860,434],{"class":168},[162,58862,58863,58866,58868,58870,58872],{"class":164,"line":35799},[162,58864,58865],{"class":168},"      lis[i].classList.",[162,58867,8441],{"class":5082},[162,58869,604],{"class":168},[162,58871,58858],{"class":179},[162,58873,434],{"class":168},[162,58875,58876],{"class":164,"line":35805},[162,58877,301],{"emptyLinePlaceholder":300},[162,58879,58880,58883,58885,58887,58889,58891,58893,58895,58898],{"class":164,"line":35811},[162,58881,58882],{"class":168},"      i ",[162,58884,173],{"class":172},[162,58886,57553],{"class":168},[162,58888,3771],{"class":172},[162,58890,28210],{"class":207},[162,58892,1823],{"class":168},[162,58894,2708],{"class":172},[162,58896,58897],{"class":168}," arrImage.",[162,58899,58900],{"class":207},"length\n",[162,58902,58903],{"class":164,"line":35817},[162,58904,301],{"emptyLinePlaceholder":300},[162,58906,58907,58909,58911],{"class":164,"line":35823},[162,58908,57605],{"class":168},[162,58910,9516],{"class":207},[162,58912,434],{"class":168},[162,58914,58915,58917,58919],{"class":164,"line":35829},[162,58916,55487],{"class":168},[162,58918,54885],{"class":54373},[162,58920,54380],{"class":168},[162,58922,58923,58925,58927],{"class":164,"line":35849},[162,58924,54857],{"class":168},[162,58926,54872],{"class":54373},[162,58928,54380],{"class":168},[162,58930,58931],{"class":164,"line":35855},[162,58932,301],{"emptyLinePlaceholder":300},[162,58934,58935,58937,58939],{"class":164,"line":35871},[162,58936,54857],{"class":168},[162,58938,53708],{"class":54373},[162,58940,54380],{"class":168},[19,58942,58943],{},[4602,58944],{"alt":158,"src":58945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,58947,58948],{},"?.就是短路保护,确保输出正常进行",[19,58950,58951],{},"不要忘记取余%,有时候可以用",[19,58953,58954],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[1452,58956,58957],{"start":197},[1455,58958,58959],{},"法2",[153,58961,58963],{"className":53706,"code":58962,"language":53708,"meta":158,"style":158},"\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",[71,58964,58965,58975,58989,58993,59001,59015,59035,59047,59055,59061,59071,59081,59085,59089,59095,59105,59109,59113,59119,59129,59141,59153,59167,59171,59175,59181,59191,59201,59211,59223,59235,59245,59249,59253,59261,59271,59283,59295,59307,59311,59315,59321,59331,59343,59355,59365,59375,59385,59397,59409,59413,59417,59425,59437,59449,59475,59487,59491,59495,59501,59511,59515,59523,59531,59535,59543,59557,59571,59591,59599,59613,59625,59633,59651,59663,59675,59687,59699,59711,59723,59735,59743,59751,59759,59767,59778,59794,59810,59826,59842,59858,59874,59890,59906,59910,59915,59933,59951,59961,59966,59971,59982,59988,60003,60012,60016,60021,60030,60035,60044,60049,60054,60059,60082,60112,60116,60124,60128,60136,60144,60148],{"__ignoreMap":158},[162,58966,58967,58969,58971,58973],{"class":164,"line":165},[162,58968,54370],{"class":168},[162,58970,54374],{"class":54373},[162,58972,54377],{"class":5082},[162,58974,54380],{"class":168},[162,58976,58977,58979,58981,58983,58985,58987],{"class":164,"line":197},[162,58978,4187],{"class":168},[162,58980,53708],{"class":54373},[162,58982,54389],{"class":5082},[162,58984,173],{"class":168},[162,58986,54394],{"class":179},[162,58988,54380],{"class":168},[162,58990,58991],{"class":164,"line":228},[162,58992,301],{"emptyLinePlaceholder":300},[162,58994,58995,58997,58999],{"class":164,"line":252},[162,58996,4187],{"class":168},[162,58998,54407],{"class":54373},[162,59000,54380],{"class":168},[162,59002,59003,59005,59007,59009,59011,59013],{"class":164,"line":328},[162,59004,55215],{"class":168},[162,59006,54417],{"class":54373},[162,59008,54420],{"class":5082},[162,59010,173],{"class":168},[162,59012,54425],{"class":179},[162,59014,54380],{"class":168},[162,59016,59017,59019,59021,59023,59025,59027,59029,59031,59033],{"class":164,"line":466},[162,59018,55215],{"class":168},[162,59020,54417],{"class":54373},[162,59022,18013],{"class":5082},[162,59024,173],{"class":168},[162,59026,54464],{"class":179},[162,59028,54444],{"class":5082},[162,59030,173],{"class":168},[162,59032,54471],{"class":179},[162,59034,54380],{"class":168},[162,59036,59037,59039,59041,59043,59045],{"class":164,"line":471},[162,59038,55215],{"class":168},[162,59040,54480],{"class":54373},[162,59042,54483],{"class":168},[162,59044,54480],{"class":54373},[162,59046,54380],{"class":168},[162,59048,59049,59051,59053],{"class":164,"line":687},[162,59050,55215],{"class":168},[162,59052,3219],{"class":54373},[162,59054,54380],{"class":168},[162,59056,59057,59059],{"class":164,"line":692},[162,59058,9509],{"class":54373},[162,59060,1722],{"class":168},[162,59062,59063,59065,59067,59069],{"class":164,"line":698},[162,59064,57765],{"class":207},[162,59066,1730],{"class":168},[162,59068,312],{"class":207},[162,59070,4433],{"class":168},[162,59072,59073,59075,59077,59079],{"class":164,"line":2955},[162,59074,57776],{"class":207},[162,59076,1730],{"class":168},[162,59078,312],{"class":207},[162,59080,4433],{"class":168},[162,59082,59083],{"class":164,"line":2960},[162,59084,5305],{"class":168},[162,59086,59087],{"class":164,"line":2971},[162,59088,301],{"emptyLinePlaceholder":300},[162,59090,59091,59093],{"class":164,"line":2984},[162,59092,57795],{"class":54373},[162,59094,1722],{"class":168},[162,59096,59097,59099,59101,59103],{"class":164,"line":2989},[162,59098,57802],{"class":207},[162,59100,1730],{"class":168},[162,59102,57807],{"class":207},[162,59104,4433],{"class":168},[162,59106,59107],{"class":164,"line":3011},[162,59108,5305],{"class":168},[162,59110,59111],{"class":164,"line":3022},[162,59112,301],{"emptyLinePlaceholder":300},[162,59114,59115,59117],{"class":164,"line":3027},[162,59116,57822],{"class":5082},[162,59118,1722],{"class":168},[162,59120,59121,59123,59125,59127],{"class":164,"line":3046},[162,59122,57829],{"class":207},[162,59124,1730],{"class":168},[162,59126,57834],{"class":207},[162,59128,4433],{"class":168},[162,59130,59131,59133,59135,59137,59139],{"class":164,"line":3052},[162,59132,57841],{"class":207},[162,59134,1730],{"class":168},[162,59136,57846],{"class":207},[162,59138,54564],{"class":172},[162,59140,4433],{"class":168},[162,59142,59143,59145,59147,59149,59151],{"class":164,"line":3057},[162,59144,57855],{"class":207},[162,59146,1730],{"class":168},[162,59148,4678],{"class":207},[162,59150,54564],{"class":172},[162,59152,4433],{"class":168},[162,59154,59155,59157,59159,59161,59163,59165],{"class":164,"line":3072},[162,59156,57776],{"class":207},[162,59158,1730],{"class":168},[162,59160,3608],{"class":207},[162,59162,54564],{"class":172},[162,59164,54628],{"class":207},[162,59166,4433],{"class":168},[162,59168,59169],{"class":164,"line":3077},[162,59170,5305],{"class":168},[162,59172,59173],{"class":164,"line":3100},[162,59174,301],{"emptyLinePlaceholder":300},[162,59176,59177,59179],{"class":164,"line":3140},[162,59178,57890],{"class":5082},[162,59180,1722],{"class":168},[162,59182,59183,59185,59187,59189],{"class":164,"line":4878},[162,59184,57829],{"class":207},[162,59186,1730],{"class":168},[162,59188,57901],{"class":207},[162,59190,4433],{"class":168},[162,59192,59193,59195,59197,59199],{"class":164,"line":4883},[162,59194,57908],{"class":207},[162,59196,1730],{"class":168},[162,59198,312],{"class":207},[162,59200,4433],{"class":168},[162,59202,59203,59205,59207,59209],{"class":164,"line":4897},[162,59204,57919],{"class":207},[162,59206,1730],{"class":168},[162,59208,312],{"class":207},[162,59210,4433],{"class":168},[162,59212,59213,59215,59217,59219,59221],{"class":164,"line":4902},[162,59214,57841],{"class":207},[162,59216,1730],{"class":168},[162,59218,3608],{"class":207},[162,59220,2708],{"class":172},[162,59222,4433],{"class":168},[162,59224,59225,59227,59229,59231,59233],{"class":164,"line":5694},[162,59226,57855],{"class":207},[162,59228,1730],{"class":168},[162,59230,3863],{"class":207},[162,59232,2708],{"class":172},[162,59234,4433],{"class":168},[162,59236,59237,59239,59241,59243],{"class":164,"line":5708},[162,59238,57954],{"class":207},[162,59240,1730],{"class":168},[162,59242,57959],{"class":207},[162,59244,4433],{"class":168},[162,59246,59247],{"class":164,"line":5716},[162,59248,5305],{"class":168},[162,59250,59251],{"class":164,"line":5721},[162,59252,301],{"emptyLinePlaceholder":300},[162,59254,59255,59257,59259],{"class":164,"line":5727},[162,59256,57890],{"class":5082},[162,59258,9931],{"class":54373},[162,59260,1722],{"class":168},[162,59262,59263,59265,59267,59269],{"class":164,"line":5733},[162,59264,57829],{"class":207},[162,59266,1730],{"class":168},[162,59268,57901],{"class":207},[162,59270,4433],{"class":168},[162,59272,59273,59275,59277,59279,59281],{"class":164,"line":5738},[162,59274,57992],{"class":207},[162,59276,1730],{"class":168},[162,59278,4178],{"class":207},[162,59280,54564],{"class":172},[162,59282,4433],{"class":168},[162,59284,59285,59287,59289,59291,59293],{"class":164,"line":11052},[162,59286,57908],{"class":207},[162,59288,1730],{"class":168},[162,59290,1011],{"class":207},[162,59292,54564],{"class":172},[162,59294,4433],{"class":168},[162,59296,59297,59299,59301,59303,59305],{"class":164,"line":11076},[162,59298,58017],{"class":207},[162,59300,1730],{"class":168},[162,59302,637],{"class":207},[162,59304,54564],{"class":172},[162,59306,4433],{"class":168},[162,59308,59309],{"class":164,"line":11081},[162,59310,5305],{"class":168},[162,59312,59313],{"class":164,"line":11087},[162,59314,301],{"emptyLinePlaceholder":300},[162,59316,59317,59319],{"class":164,"line":11114},[162,59318,58038],{"class":54373},[162,59320,1722],{"class":168},[162,59322,59323,59325,59327,59329],{"class":164,"line":11119},[162,59324,57829],{"class":207},[162,59326,1730],{"class":168},[162,59328,57901],{"class":207},[162,59330,4433],{"class":168},[162,59332,59333,59335,59337,59339,59341],{"class":164,"line":11125},[162,59334,58017],{"class":207},[162,59336,1730],{"class":168},[162,59338,4063],{"class":207},[162,59340,54564],{"class":172},[162,59342,4433],{"class":168},[162,59344,59345,59347,59349,59351,59353],{"class":164,"line":11137},[162,59346,57908],{"class":207},[162,59348,1730],{"class":168},[162,59350,1011],{"class":207},[162,59352,54564],{"class":172},[162,59354,4433],{"class":168},[162,59356,59357,59359,59361,59363],{"class":164,"line":11149},[162,59358,58079],{"class":207},[162,59360,1730],{"class":168},[162,59362,54549],{"class":207},[162,59364,4433],{"class":168},[162,59366,59367,59369,59371,59373],{"class":164,"line":11161},[162,59368,58090],{"class":207},[162,59370,1730],{"class":168},[162,59372,54740],{"class":207},[162,59374,4433],{"class":168},[162,59376,59377,59379,59381,59383],{"class":164,"line":12816},[162,59378,57829],{"class":207},[162,59380,1730],{"class":168},[162,59382,57901],{"class":207},[162,59384,4433],{"class":168},[162,59386,59387,59389,59391,59393,59395],{"class":164,"line":12841},[162,59388,57841],{"class":207},[162,59390,1730],{"class":168},[162,59392,7105],{"class":207},[162,59394,54564],{"class":172},[162,59396,4433],{"class":168},[162,59398,59399,59401,59403,59405,59407],{"class":164,"line":12864},[162,59400,57855],{"class":207},[162,59402,1730],{"class":168},[162,59404,1011],{"class":207},[162,59406,54564],{"class":172},[162,59408,4433],{"class":168},[162,59410,59411],{"class":164,"line":12888},[162,59412,5305],{"class":168},[162,59414,59415],{"class":164,"line":12893},[162,59416,301],{"emptyLinePlaceholder":300},[162,59418,59419,59421,59423],{"class":164,"line":12898},[162,59420,58038],{"class":54373},[162,59422,58145],{"class":54373},[162,59424,1722],{"class":168},[162,59426,59427,59429,59431,59433,59435],{"class":164,"line":12903},[162,59428,57841],{"class":207},[162,59430,1730],{"class":168},[162,59432,1011],{"class":207},[162,59434,54564],{"class":172},[162,59436,4433],{"class":168},[162,59438,59439,59441,59443,59445,59447],{"class":164,"line":12912},[162,59440,57855],{"class":207},[162,59442,1730],{"class":168},[162,59444,1011],{"class":207},[162,59446,54564],{"class":172},[162,59448,4433],{"class":168},[162,59450,59451,59453,59455,59457,59459,59461,59463,59465,59467,59469,59471,59473],{"class":164,"line":12917},[162,59452,57954],{"class":207},[162,59454,1730],{"class":168},[162,59456,58180],{"class":207},[162,59458,604],{"class":168},[162,59460,312],{"class":207},[162,59462,183],{"class":168},[162,59464,312],{"class":207},[162,59466,183],{"class":168},[162,59468,312],{"class":207},[162,59470,183],{"class":168},[162,59472,58197],{"class":207},[162,59474,5836],{"class":168},[162,59476,59477,59479,59481,59483,59485],{"class":164,"line":12923},[162,59478,58204],{"class":207},[162,59480,1730],{"class":168},[162,59482,1006],{"class":207},[162,59484,54564],{"class":172},[162,59486,4433],{"class":168},[162,59488,59489],{"class":164,"line":12944},[162,59490,5305],{"class":168},[162,59492,59493],{"class":164,"line":12950},[162,59494,301],{"emptyLinePlaceholder":300},[162,59496,59497,59499],{"class":164,"line":12964},[162,59498,58225],{"class":5082},[162,59500,1722],{"class":168},[162,59502,59503,59505,59507,59509],{"class":164,"line":12970},[162,59504,57954],{"class":207},[162,59506,1730],{"class":168},[162,59508,58236],{"class":207},[162,59510,4433],{"class":168},[162,59512,59513],{"class":164,"line":12997},[162,59514,5305],{"class":168},[162,59516,59517,59519,59521],{"class":164,"line":13006},[162,59518,55487],{"class":168},[162,59520,3219],{"class":54373},[162,59522,54380],{"class":168},[162,59524,59525,59527,59529],{"class":164,"line":13012},[162,59526,54857],{"class":168},[162,59528,54407],{"class":54373},[162,59530,54380],{"class":168},[162,59532,59533],{"class":164,"line":13020},[162,59534,301],{"emptyLinePlaceholder":300},[162,59536,59537,59539,59541],{"class":164,"line":13025},[162,59538,4187],{"class":168},[162,59540,54872],{"class":54373},[162,59542,54380],{"class":168},[162,59544,59545,59547,59549,59551,59553,59555],{"class":164,"line":19695},[162,59546,55215],{"class":168},[162,59548,54683],{"class":54373},[162,59550,56556],{"class":5082},[162,59552,173],{"class":168},[162,59554,56561],{"class":179},[162,59556,54380],{"class":168},[162,59558,59559,59561,59563,59565,59567,59569],{"class":164,"line":19701},[162,59560,54414],{"class":168},[162,59562,54683],{"class":54373},[162,59564,56556],{"class":5082},[162,59566,173],{"class":168},[162,59568,58297],{"class":179},[162,59570,54380],{"class":168},[162,59572,59573,59575,59577,59579,59581,59583,59585,59587,59589],{"class":164,"line":19724},[162,59574,58304],{"class":168},[162,59576,4602],{"class":54373},[162,59578,58309],{"class":5082},[162,59580,173],{"class":168},[162,59582,58314],{"class":179},[162,59584,58317],{"class":5082},[162,59586,173],{"class":168},[162,59588,10756],{"class":179},[162,59590,54380],{"class":168},[162,59592,59593,59595,59597],{"class":164,"line":19730},[162,59594,54848],{"class":168},[162,59596,54683],{"class":54373},[162,59598,54380],{"class":168},[162,59600,59601,59603,59605,59607,59609,59611],{"class":164,"line":19753},[162,59602,54414],{"class":168},[162,59604,54683],{"class":54373},[162,59606,56556],{"class":5082},[162,59608,173],{"class":168},[162,59610,58344],{"class":179},[162,59612,54380],{"class":168},[162,59614,59615,59617,59619,59621,59623],{"class":164,"line":19767},[162,59616,58304],{"class":168},[162,59618,19],{"class":54373},[162,59620,58355],{"class":168},[162,59622,19],{"class":54373},[162,59624,54380],{"class":168},[162,59626,59627,59629,59631],{"class":164,"line":19787},[162,59628,58304],{"class":168},[162,59630,4279],{"class":54373},[162,59632,54380],{"class":168},[162,59634,59635,59637,59639,59641,59643,59645,59647,59649],{"class":164,"line":19793},[162,59636,58372],{"class":168},[162,59638,1455],{"class":54373},[162,59640,56556],{"class":5082},[162,59642,173],{"class":168},[162,59644,58381],{"class":179},[162,59646,58384],{"class":168},[162,59648,1455],{"class":54373},[162,59650,54380],{"class":168},[162,59652,59653,59655,59657,59659,59661],{"class":164,"line":19804},[162,59654,58372],{"class":168},[162,59656,1455],{"class":54373},[162,59658,58384],{"class":168},[162,59660,1455],{"class":54373},[162,59662,54380],{"class":168},[162,59664,59665,59667,59669,59671,59673],{"class":164,"line":19827},[162,59666,58372],{"class":168},[162,59668,1455],{"class":54373},[162,59670,58384],{"class":168},[162,59672,1455],{"class":54373},[162,59674,54380],{"class":168},[162,59676,59677,59679,59681,59683,59685],{"class":164,"line":19849},[162,59678,58372],{"class":168},[162,59680,1455],{"class":54373},[162,59682,58384],{"class":168},[162,59684,1455],{"class":54373},[162,59686,54380],{"class":168},[162,59688,59689,59691,59693,59695,59697],{"class":164,"line":19854},[162,59690,58372],{"class":168},[162,59692,1455],{"class":54373},[162,59694,58384],{"class":168},[162,59696,1455],{"class":54373},[162,59698,54380],{"class":168},[162,59700,59701,59703,59705,59707,59709],{"class":164,"line":19860},[162,59702,58372],{"class":168},[162,59704,1455],{"class":54373},[162,59706,58384],{"class":168},[162,59708,1455],{"class":54373},[162,59710,54380],{"class":168},[162,59712,59713,59715,59717,59719,59721],{"class":164,"line":19874},[162,59714,58372],{"class":168},[162,59716,1455],{"class":54373},[162,59718,58384],{"class":168},[162,59720,1455],{"class":54373},[162,59722,54380],{"class":168},[162,59724,59725,59727,59729,59731,59733],{"class":164,"line":19887},[162,59726,58372],{"class":168},[162,59728,1455],{"class":54373},[162,59730,58384],{"class":168},[162,59732,1455],{"class":54373},[162,59734,54380],{"class":168},[162,59736,59737,59739,59741],{"class":164,"line":19892},[162,59738,58477],{"class":168},[162,59740,4279],{"class":54373},[162,59742,54380],{"class":168},[162,59744,59745,59747,59749],{"class":164,"line":19906},[162,59746,54848],{"class":168},[162,59748,54683],{"class":54373},[162,59750,54380],{"class":168},[162,59752,59753,59755,59757],{"class":164,"line":19911},[162,59754,55487],{"class":168},[162,59756,54683],{"class":54373},[162,59758,54380],{"class":168},[162,59760,59761,59763,59765],{"class":164,"line":19917},[162,59762,55215],{"class":168},[162,59764,54885],{"class":54373},[162,59766,54380],{"class":168},[162,59768,59769,59771,59774,59776],{"class":164,"line":19922},[162,59770,14317],{"class":172},[162,59772,59773],{"class":207}," sliderData",[162,59775,16659],{"class":172},[162,59777,2030],{"class":168},[162,59779,59780,59782,59784,59786,59788,59790,59792],{"class":164,"line":19936},[162,59781,58521],{"class":168},[162,59783,58524],{"class":179},[162,59785,58527],{"class":168},[162,59787,58530],{"class":179},[162,59789,58533],{"class":168},[162,59791,58536],{"class":179},[162,59793,58539],{"class":168},[162,59795,59796,59798,59800,59802,59804,59806,59808],{"class":164,"line":19941},[162,59797,58521],{"class":168},[162,59799,58546],{"class":179},[162,59801,58527],{"class":168},[162,59803,58551],{"class":179},[162,59805,58533],{"class":168},[162,59807,58556],{"class":179},[162,59809,58539],{"class":168},[162,59811,59812,59814,59816,59818,59820,59822,59824],{"class":164,"line":19946},[162,59813,58521],{"class":168},[162,59815,58565],{"class":179},[162,59817,58527],{"class":168},[162,59819,58570],{"class":179},[162,59821,58533],{"class":168},[162,59823,58575],{"class":179},[162,59825,58539],{"class":168},[162,59827,59828,59830,59832,59834,59836,59838,59840],{"class":164,"line":19960},[162,59829,58521],{"class":168},[162,59831,58584],{"class":179},[162,59833,58527],{"class":168},[162,59835,58589],{"class":179},[162,59837,58533],{"class":168},[162,59839,58594],{"class":179},[162,59841,58539],{"class":168},[162,59843,59844,59846,59848,59850,59852,59854,59856],{"class":164,"line":19972},[162,59845,58521],{"class":168},[162,59847,58603],{"class":179},[162,59849,58527],{"class":168},[162,59851,58608],{"class":179},[162,59853,58533],{"class":168},[162,59855,58613],{"class":179},[162,59857,58539],{"class":168},[162,59859,59860,59862,59864,59866,59868,59870,59872],{"class":164,"line":19977},[162,59861,58521],{"class":168},[162,59863,58622],{"class":179},[162,59865,58527],{"class":168},[162,59867,58627],{"class":179},[162,59869,58533],{"class":168},[162,59871,58632],{"class":179},[162,59873,58539],{"class":168},[162,59875,59876,59878,59880,59882,59884,59886,59888],{"class":164,"line":19990},[162,59877,58521],{"class":168},[162,59879,58641],{"class":179},[162,59881,58527],{"class":168},[162,59883,58646],{"class":179},[162,59885,58533],{"class":168},[162,59887,58651],{"class":179},[162,59889,58539],{"class":168},[162,59891,59892,59894,59896,59898,59900,59902,59904],{"class":164,"line":19995},[162,59893,58521],{"class":168},[162,59895,58660],{"class":179},[162,59897,58527],{"class":168},[162,59899,58665],{"class":179},[162,59901,58533],{"class":168},[162,59903,58670],{"class":179},[162,59905,58673],{"class":168},[162,59907,59908],{"class":164,"line":20000},[162,59909,56179],{"class":168},[162,59911,59912],{"class":164,"line":20005},[162,59913,59914],{"class":361},"    \u002F\u002F 1.获取元素\n",[162,59916,59917,59919,59921,59923,59925,59927,59929,59931],{"class":164,"line":20018},[162,59918,14317],{"class":172},[162,59920,58684],{"class":207},[162,59922,16659],{"class":172},[162,59924,57466],{"class":168},[162,59926,57469],{"class":5082},[162,59928,604],{"class":168},[162,59930,58695],{"class":179},[162,59932,434],{"class":168},[162,59934,59935,59937,59939,59941,59943,59945,59947,59949],{"class":164,"line":20023},[162,59936,14317],{"class":172},[162,59938,9931],{"class":207},[162,59940,16659],{"class":172},[162,59942,57466],{"class":168},[162,59944,57469],{"class":5082},[162,59946,604],{"class":168},[162,59948,58714],{"class":179},[162,59950,434],{"class":168},[162,59952,59953,59955,59957,59959],{"class":164,"line":35709},[162,59954,55290],{"class":172},[162,59956,2642],{"class":168},[162,59958,173],{"class":172},[162,59960,902],{"class":207},[162,59962,59963],{"class":164,"line":35715},[162,59964,59965],{"class":361},"    \u002F\u002F 2.开启定时器\n",[162,59967,59968],{"class":164,"line":35721},[162,59969,59970],{"class":361},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[162,59972,59973,59976,59978,59980],{"class":164,"line":35727},[162,59974,59975],{"class":5082},"    setInterval",[162,59977,604],{"class":168},[162,59979,57519],{"class":172},[162,59981,57522],{"class":168},[162,59983,59984,59986],{"class":164,"line":35733},[162,59985,57527],{"class":168},[162,59987,5819],{"class":172},[162,59989,59990,59992,59994,59996,59999,60001],{"class":164,"line":35744},[162,59991,57550],{"class":172},[162,59993,57553],{"class":168},[162,59995,3038],{"class":172},[162,59997,59998],{"class":168}," sliderData.",[162,60000,55039],{"class":207},[162,60002,15537],{"class":168},[162,60004,60005,60008,60010],{"class":164,"line":35750},[162,60006,60007],{"class":168},"        i ",[162,60009,173],{"class":172},[162,60011,902],{"class":207},[162,60013,60014],{"class":164,"line":35770},[162,60015,55468],{"class":168},[162,60017,60018],{"class":164,"line":35776},[162,60019,60020],{"class":361},"      \u002F\u002F 更换图片路径\n",[162,60022,60023,60025,60027],{"class":164,"line":35787},[162,60024,58790],{"class":168},[162,60026,173],{"class":172},[162,60028,60029],{"class":168}," sliderData[i].url\n",[162,60031,60032],{"class":164,"line":35793},[162,60033,60034],{"class":361},"      \u002F\u002F 把文字写到p里面\n",[162,60036,60037,60039,60041],{"class":164,"line":35799},[162,60038,58800],{"class":168},[162,60040,173],{"class":172},[162,60042,60043],{"class":168}," sliderData[i].title\n",[162,60045,60046],{"class":164,"line":35805},[162,60047,60048],{"class":361},"      \u002F\u002F 小圆点\n",[162,60050,60051],{"class":164,"line":35811},[162,60052,60053],{"class":361},"      \u002F\u002F 先删除以前的active\n",[162,60055,60056],{"class":164,"line":35817},[162,60057,60058],{"class":361},"      \u002F\u002F 只让当前li添加active\n",[162,60060,60061,60063,60065,60067,60070,60073,60076,60078,60080],{"class":164,"line":35823},[162,60062,58840],{"class":168},[162,60064,57469],{"class":5082},[162,60066,604],{"class":168},[162,60068,60069],{"class":179},"'.slider-footer .activate'",[162,60071,60072],{"class":168},").classList.",[162,60074,60075],{"class":5082},"remove",[162,60077,604],{"class":168},[162,60079,58858],{"class":179},[162,60081,434],{"class":168},[162,60083,60084,60086,60088,60090,60093,60095,60097,60099,60102,60104,60106,60108,60110],{"class":164,"line":35829},[162,60085,58840],{"class":168},[162,60087,57469],{"class":5082},[162,60089,604],{"class":168},[162,60091,60092],{"class":179},"`.slider-footer ul li:nth-child(${",[162,60094,3732],{"class":168},[162,60096,1239],{"class":172},[162,60098,28210],{"class":207},[162,60100,60101],{"class":179},"})`",[162,60103,60072],{"class":168},[162,60105,8441],{"class":5082},[162,60107,604],{"class":168},[162,60109,58858],{"class":179},[162,60111,434],{"class":168},[162,60113,60114],{"class":164,"line":35849},[162,60115,301],{"emptyLinePlaceholder":300},[162,60117,60118,60120,60122],{"class":164,"line":35855},[162,60119,57605],{"class":168},[162,60121,9516],{"class":207},[162,60123,434],{"class":168},[162,60125,60126],{"class":164,"line":35871},[162,60127,301],{"emptyLinePlaceholder":300},[162,60129,60130,60132,60134],{"class":164,"line":35877},[162,60131,55487],{"class":168},[162,60133,54885],{"class":54373},[162,60135,54380],{"class":168},[162,60137,60138,60140,60142],{"class":164,"line":35891},[162,60139,54857],{"class":168},[162,60141,54872],{"class":54373},[162,60143,54380],{"class":168},[162,60145,60146],{"class":164,"line":35897},[162,60147,301],{"emptyLinePlaceholder":300},[162,60149,60150,60152,60154],{"class":164,"line":35912},[162,60151,54857],{"class":168},[162,60153,53708],{"class":54373},[162,60155,54380],{"class":168},[3284,60157,60159],{"id":60158},"_317-重要知识点","3.1.7 重要知识点",[19,60161,60162,60163],{},"浏览器在渲染文本时， ",[3453,60164,60165],{},"没有空格或换行符就没有“断行点”",[19,60167,60168],{},[4602,60169],{"alt":158,"src":60170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,60172,60173],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,60175,60176],{},[4602,60177],{"alt":158,"src":60178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,60180,60181],{},[4602,60182],{"alt":158,"src":60183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,60185,60187],{"id":60186},"_32-dom事件基础","3.2 DOM事件基础",[3284,60189,60191],{"id":60190},"_321-事件监听","3.2.1 事件监听",[19,60193,60194],{},[4602,60195],{"alt":158,"src":60196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,60198,60199],{},"事件监听有响应的发生",[19,60201,60202],{},[4602,60203],{"alt":158,"src":60204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,60206,60207],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,60209,60210],{},"对于有名函数,要执行的函数名后边不要加()",[3284,60212,60214],{"id":60213},"_322-随机点名案例","3.2.2 随机点名案例",[153,60216,60218],{"className":53706,"code":60217,"language":53708,"meta":158,"style":158},"\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",[71,60219,60220,60230,60244,60248,60256,60270,60290,60302,60310,60316,60326,60336,60340,60344,60351,60362,60366,60370,60376,60388,60402,60412,60424,60437,60441,60445,60452,60456,60469,60481,60493,60497,60501,60505,60512,60522,60526,60530,60539,60551,60563,60578,60582,60590,60598,60602,60610,60623,60637,60650,60670,60678,60693,60713,60733,60741,60745,60753,60758,60794,60814,60819,60838,60843,60854,60859,60870,60875,60894,60909,60914,60940,60950,60959,60964,60980,60985,60990,60995,61010,61014,61018,61023,61042,61059,61067,61072,61087,61091,61095,61103,61111,61115],{"__ignoreMap":158},[162,60221,60222,60224,60226,60228],{"class":164,"line":165},[162,60223,54370],{"class":168},[162,60225,54374],{"class":54373},[162,60227,54377],{"class":5082},[162,60229,54380],{"class":168},[162,60231,60232,60234,60236,60238,60240,60242],{"class":164,"line":197},[162,60233,4187],{"class":168},[162,60235,53708],{"class":54373},[162,60237,54389],{"class":5082},[162,60239,173],{"class":168},[162,60241,54394],{"class":179},[162,60243,54380],{"class":168},[162,60245,60246],{"class":164,"line":228},[162,60247,301],{"emptyLinePlaceholder":300},[162,60249,60250,60252,60254],{"class":164,"line":252},[162,60251,4187],{"class":168},[162,60253,54407],{"class":54373},[162,60255,54380],{"class":168},[162,60257,60258,60260,60262,60264,60266,60268],{"class":164,"line":328},[162,60259,55215],{"class":168},[162,60261,54417],{"class":54373},[162,60263,54420],{"class":5082},[162,60265,173],{"class":168},[162,60267,54425],{"class":179},[162,60269,54380],{"class":168},[162,60271,60272,60274,60276,60278,60280,60282,60284,60286,60288],{"class":164,"line":466},[162,60273,55215],{"class":168},[162,60275,54417],{"class":54373},[162,60277,18013],{"class":5082},[162,60279,173],{"class":168},[162,60281,54464],{"class":179},[162,60283,54444],{"class":5082},[162,60285,173],{"class":168},[162,60287,54471],{"class":179},[162,60289,54380],{"class":168},[162,60291,60292,60294,60296,60298,60300],{"class":164,"line":471},[162,60293,55215],{"class":168},[162,60295,54480],{"class":54373},[162,60297,54483],{"class":168},[162,60299,54480],{"class":54373},[162,60301,54380],{"class":168},[162,60303,60304,60306,60308],{"class":164,"line":687},[162,60305,55215],{"class":168},[162,60307,3219],{"class":54373},[162,60309,54380],{"class":168},[162,60311,60312,60314],{"class":164,"line":692},[162,60313,9509],{"class":54373},[162,60315,1722],{"class":168},[162,60317,60318,60320,60322,60324],{"class":164,"line":698},[162,60319,57776],{"class":207},[162,60321,1730],{"class":168},[162,60323,312],{"class":207},[162,60325,4433],{"class":168},[162,60327,60328,60330,60332,60334],{"class":164,"line":2955},[162,60329,57765],{"class":207},[162,60331,1730],{"class":168},[162,60333,312],{"class":207},[162,60335,4433],{"class":168},[162,60337,60338],{"class":164,"line":2960},[162,60339,5305],{"class":168},[162,60341,60342],{"class":164,"line":2971},[162,60343,301],{"emptyLinePlaceholder":300},[162,60345,60346,60349],{"class":164,"line":2984},[162,60347,60348],{"class":54373},"    h2",[162,60350,1722],{"class":168},[162,60352,60353,60356,60358,60360],{"class":164,"line":2989},[162,60354,60355],{"class":207},"      text-align",[162,60357,1730],{"class":168},[162,60359,54664],{"class":207},[162,60361,4433],{"class":168},[162,60363,60364],{"class":164,"line":3011},[162,60365,5305],{"class":168},[162,60367,60368],{"class":164,"line":3022},[162,60369,301],{"emptyLinePlaceholder":300},[162,60371,60372,60374],{"class":164,"line":3027},[162,60373,57822],{"class":5082},[162,60375,1722],{"class":168},[162,60377,60378,60380,60382,60384,60386],{"class":164,"line":3046},[162,60379,57841],{"class":207},[162,60381,1730],{"class":168},[162,60383,4678],{"class":207},[162,60385,54564],{"class":172},[162,60387,4433],{"class":168},[162,60389,60390,60392,60394,60396,60398,60400],{"class":164,"line":3052},[162,60391,57776],{"class":207},[162,60393,1730],{"class":168},[162,60395,3941],{"class":207},[162,60397,54564],{"class":172},[162,60399,54628],{"class":207},[162,60401,4433],{"class":168},[162,60403,60404,60406,60408,60410],{"class":164,"line":3057},[162,60405,58079],{"class":207},[162,60407,1730],{"class":168},[162,60409,54549],{"class":207},[162,60411,4433],{"class":168},[162,60413,60414,60416,60418,60420,60422],{"class":164,"line":3072},[162,60415,57992],{"class":207},[162,60417,1730],{"class":168},[162,60419,4106],{"class":207},[162,60421,54564],{"class":172},[162,60423,4433],{"class":168},[162,60425,60426,60429,60431,60433,60435],{"class":164,"line":3077},[162,60427,60428],{"class":207},"      line-height",[162,60430,1730],{"class":168},[162,60432,3693],{"class":207},[162,60434,54564],{"class":172},[162,60436,4433],{"class":168},[162,60438,60439],{"class":164,"line":3100},[162,60440,5305],{"class":168},[162,60442,60443],{"class":164,"line":3140},[162,60444,301],{"emptyLinePlaceholder":300},[162,60446,60447,60450],{"class":164,"line":4878},[162,60448,60449],{"class":5082},"    .qs",[162,60451,1722],{"class":168},[162,60453,60454],{"class":164,"line":4883},[162,60455,301],{"emptyLinePlaceholder":300},[162,60457,60458,60460,60462,60465,60467],{"class":164,"line":4897},[162,60459,57841],{"class":207},[162,60461,1730],{"class":168},[162,60463,60464],{"class":207},"450",[162,60466,54564],{"class":172},[162,60468,4433],{"class":168},[162,60470,60471,60473,60475,60477,60479],{"class":164,"line":4902},[162,60472,57855],{"class":207},[162,60474,1730],{"class":168},[162,60476,3693],{"class":207},[162,60478,54564],{"class":172},[162,60480,4433],{"class":168},[162,60482,60483,60486,60488,60491],{"class":164,"line":5694},[162,60484,60485],{"class":207},"      color",[162,60487,1730],{"class":168},[162,60489,60490],{"class":207},"red",[162,60492,4433],{"class":168},[162,60494,60495],{"class":164,"line":5708},[162,60496,301],{"emptyLinePlaceholder":300},[162,60498,60499],{"class":164,"line":5716},[162,60500,5305],{"class":168},[162,60502,60503],{"class":164,"line":5721},[162,60504,301],{"emptyLinePlaceholder":300},[162,60506,60507,60510],{"class":164,"line":5727},[162,60508,60509],{"class":5082},"    .btns",[162,60511,1722],{"class":168},[162,60513,60514,60516,60518,60520],{"class":164,"line":5733},[162,60515,60355],{"class":207},[162,60517,1730],{"class":168},[162,60519,54664],{"class":207},[162,60521,4433],{"class":168},[162,60523,60524],{"class":164,"line":5738},[162,60525,5305],{"class":168},[162,60527,60528],{"class":164,"line":11052},[162,60529,301],{"emptyLinePlaceholder":300},[162,60531,60532,60534,60537],{"class":164,"line":11076},[162,60533,60509],{"class":5082},[162,60535,60536],{"class":54373}," button",[162,60538,1722],{"class":168},[162,60540,60541,60543,60545,60547,60549],{"class":164,"line":11081},[162,60542,57841],{"class":207},[162,60544,1730],{"class":168},[162,60546,4098],{"class":207},[162,60548,54564],{"class":172},[162,60550,4433],{"class":168},[162,60552,60553,60555,60557,60559,60561],{"class":164,"line":11087},[162,60554,57855],{"class":207},[162,60556,1730],{"class":168},[162,60558,3571],{"class":207},[162,60560,54564],{"class":172},[162,60562,4433],{"class":168},[162,60564,60565,60567,60569,60571,60574,60576],{"class":164,"line":11114},[162,60566,57776],{"class":207},[162,60568,1730],{"class":168},[162,60570,312],{"class":207},[162,60572,60573],{"class":207}," 50",[162,60575,54564],{"class":172},[162,60577,4433],{"class":168},[162,60579,60580],{"class":164,"line":11119},[162,60581,5305],{"class":168},[162,60583,60584,60586,60588],{"class":164,"line":11125},[162,60585,55487],{"class":168},[162,60587,3219],{"class":54373},[162,60589,54380],{"class":168},[162,60591,60592,60594,60596],{"class":164,"line":11137},[162,60593,54857],{"class":168},[162,60595,54407],{"class":54373},[162,60597,54380],{"class":168},[162,60599,60600],{"class":164,"line":11149},[162,60601,301],{"emptyLinePlaceholder":300},[162,60603,60604,60606,60608],{"class":164,"line":11161},[162,60605,4187],{"class":168},[162,60607,54872],{"class":54373},[162,60609,54380],{"class":168},[162,60611,60612,60614,60616,60619,60621],{"class":164,"line":12816},[162,60613,55215],{"class":168},[162,60615,14],{"class":54373},[162,60617,60618],{"class":168},">随机点名\u003C\u002F",[162,60620,14],{"class":54373},[162,60622,54380],{"class":168},[162,60624,60625,60627,60629,60631,60633,60635],{"class":164,"line":12841},[162,60626,55215],{"class":168},[162,60628,54683],{"class":54373},[162,60630,56556],{"class":5082},[162,60632,173],{"class":168},[162,60634,56561],{"class":179},[162,60636,54380],{"class":168},[162,60638,60639,60641,60643,60646,60648],{"class":164,"line":12864},[162,60640,54414],{"class":168},[162,60642,162],{"class":54373},[162,60644,60645],{"class":168},">名字是：\u003C\u002F",[162,60647,162],{"class":54373},[162,60649,54380],{"class":168},[162,60651,60652,60654,60656,60658,60660,60663,60666,60668],{"class":164,"line":12888},[162,60653,54414],{"class":168},[162,60655,54683],{"class":54373},[162,60657,56556],{"class":5082},[162,60659,173],{"class":168},[162,60661,60662],{"class":179},"\"qs\"",[162,60664,60665],{"class":168},">这里显示姓名\u003C\u002F",[162,60667,54683],{"class":54373},[162,60669,54380],{"class":168},[162,60671,60672,60674,60676],{"class":164,"line":12893},[162,60673,55487],{"class":168},[162,60675,54683],{"class":54373},[162,60677,54380],{"class":168},[162,60679,60680,60682,60684,60686,60688,60691],{"class":164,"line":12898},[162,60681,55215],{"class":168},[162,60683,54683],{"class":54373},[162,60685,56556],{"class":5082},[162,60687,173],{"class":168},[162,60689,60690],{"class":179},"\"btns\"",[162,60692,54380],{"class":168},[162,60694,60695,60697,60699,60701,60703,60706,60709,60711],{"class":164,"line":12903},[162,60696,54414],{"class":168},[162,60698,56957],{"class":54373},[162,60700,56556],{"class":5082},[162,60702,173],{"class":168},[162,60704,60705],{"class":179},"\"start\"",[162,60707,60708],{"class":168},">开始\u003C\u002F",[162,60710,56957],{"class":54373},[162,60712,54380],{"class":168},[162,60714,60715,60717,60719,60721,60723,60726,60729,60731],{"class":164,"line":12912},[162,60716,54414],{"class":168},[162,60718,56957],{"class":54373},[162,60720,56556],{"class":5082},[162,60722,173],{"class":168},[162,60724,60725],{"class":179},"\"end\"",[162,60727,60728],{"class":168},">结束\u003C\u002F",[162,60730,56957],{"class":54373},[162,60732,54380],{"class":168},[162,60734,60735,60737,60739],{"class":164,"line":12917},[162,60736,55487],{"class":168},[162,60738,54683],{"class":54373},[162,60740,54380],{"class":168},[162,60742,60743],{"class":164,"line":12923},[162,60744,301],{"emptyLinePlaceholder":300},[162,60746,60747,60749,60751],{"class":164,"line":12944},[162,60748,55215],{"class":168},[162,60750,54885],{"class":54373},[162,60752,54380],{"class":168},[162,60754,60755],{"class":164,"line":12950},[162,60756,60757],{"class":361},"    \u002F\u002F 数据数组\n",[162,60759,60760,60762,60765,60767,60769,60772,60774,60777,60779,60782,60784,60787,60789,60792],{"class":164,"line":12964},[162,60761,14317],{"class":172},[162,60763,60764],{"class":207}," arr",[162,60766,16659],{"class":172},[162,60768,176],{"class":168},[162,60770,60771],{"class":179},"'马超'",[162,60773,183],{"class":168},[162,60775,60776],{"class":179},"'黄忠'",[162,60778,183],{"class":168},[162,60780,60781],{"class":179},"'赵云'",[162,60783,183],{"class":168},[162,60785,60786],{"class":179},"'关羽'",[162,60788,183],{"class":168},[162,60790,60791],{"class":179},"'张飞'",[162,60793,194],{"class":168},[162,60795,60796,60798,60801,60803,60805,60807,60809,60812],{"class":164,"line":12970},[162,60797,14317],{"class":172},[162,60799,60800],{"class":207}," qs",[162,60802,16659],{"class":172},[162,60804,57466],{"class":168},[162,60806,57469],{"class":5082},[162,60808,604],{"class":168},[162,60810,60811],{"class":179},"'.qs'",[162,60813,434],{"class":168},[162,60815,60816],{"class":164,"line":12997},[162,60817,60818],{"class":361},"    \u002F\u002F 1.业务1.开始按钮模块\n",[162,60820,60821,60823,60825,60827,60829,60831,60833,60836],{"class":164,"line":13006},[162,60822,14317],{"class":172},[162,60824,7296],{"class":207},[162,60826,16659],{"class":172},[162,60828,57466],{"class":168},[162,60830,57469],{"class":5082},[162,60832,604],{"class":168},[162,60834,60835],{"class":179},"'.start'",[162,60837,434],{"class":168},[162,60839,60840],{"class":164,"line":13012},[162,60841,60842],{"class":361},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[162,60844,60845,60847,60850,60852],{"class":164,"line":13020},[162,60846,55290],{"class":172},[162,60848,60849],{"class":168}," timerId ",[162,60851,173],{"class":172},[162,60853,902],{"class":207},[162,60855,60856],{"class":164,"line":13025},[162,60857,60858],{"class":361},"    \u002F\u002F 随机号要全局变量\n",[162,60860,60861,60863,60866,60868],{"class":164,"line":19695},[162,60862,55290],{"class":172},[162,60864,60865],{"class":168}," random ",[162,60867,173],{"class":172},[162,60869,902],{"class":207},[162,60871,60872],{"class":164,"line":19701},[162,60873,60874],{"class":361},"    \u002F\u002F 1.1 添加点击事件\n",[162,60876,60877,60880,60883,60885,60888,60890,60892],{"class":164,"line":19724},[162,60878,60879],{"class":168},"    start.",[162,60881,60882],{"class":5082},"addEventListener",[162,60884,604],{"class":168},[162,60886,60887],{"class":179},"'click'",[162,60889,183],{"class":168},[162,60891,57519],{"class":172},[162,60893,57522],{"class":168},[162,60895,60896,60899,60901,60903,60905,60907],{"class":164,"line":19730},[162,60897,60898],{"class":168},"      timerId ",[162,60900,173],{"class":172},[162,60902,57514],{"class":5082},[162,60904,604],{"class":168},[162,60906,57519],{"class":172},[162,60908,57522],{"class":168},[162,60910,60911],{"class":164,"line":19753},[162,60912,60913],{"class":361},"        \u002F\u002F 随机数\n",[162,60915,60916,60919,60921,60924,60927,60930,60932,60934,60936,60938],{"class":164,"line":19767},[162,60917,60918],{"class":168},"        random ",[162,60920,173],{"class":172},[162,60922,60923],{"class":5082}," parseInt",[162,60925,60926],{"class":168},"(Math.",[162,60928,60929],{"class":5082},"random",[162,60931,16145],{"class":168},[162,60933,3745],{"class":172},[162,60935,55036],{"class":168},[162,60937,55039],{"class":207},[162,60939,434],{"class":168},[162,60941,60942,60945,60947],{"class":164,"line":19787},[162,60943,60944],{"class":168},"        qs.innerHTML ",[162,60946,173],{"class":172},[162,60948,60949],{"class":168}," arr[random]\n",[162,60951,60952,60955,60957],{"class":164,"line":19793},[162,60953,60954],{"class":168},"      }, ",[162,60956,3571],{"class":207},[162,60958,434],{"class":168},[162,60960,60961],{"class":164,"line":19804},[162,60962,60963],{"class":361},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[162,60965,60966,60968,60971,60973,60976,60978],{"class":164,"line":19827},[162,60967,57550],{"class":172},[162,60969,60970],{"class":168}," (arr.",[162,60972,55039],{"class":207},[162,60974,60975],{"class":172}," ===",[162,60977,28210],{"class":207},[162,60979,15537],{"class":168},[162,60981,60982],{"class":164,"line":19849},[162,60983,60984],{"class":361},"        \u002F\u002F start.disabled = true\n",[162,60986,60987],{"class":164,"line":19854},[162,60988,60989],{"class":361},"        \u002F\u002F end.disabled = true\n",[162,60991,60992],{"class":164,"line":19860},[162,60993,60994],{"class":361},"        \u002F\u002F 可以合起来写\n",[162,60996,60997,61000,61002,61005,61007],{"class":164,"line":19874},[162,60998,60999],{"class":168},"        start.disabled ",[162,61001,173],{"class":172},[162,61003,61004],{"class":168}," end.disabled ",[162,61006,173],{"class":172},[162,61008,61009],{"class":207}," true\n",[162,61011,61012],{"class":164,"line":19887},[162,61013,55468],{"class":168},[162,61015,61016],{"class":164,"line":19892},[162,61017,36536],{"class":168},[162,61019,61020],{"class":164,"line":19906},[162,61021,61022],{"class":361},"    \u002F\u002F 1.2 关闭按钮模块\n",[162,61024,61025,61027,61029,61031,61033,61035,61037,61040],{"class":164,"line":19911},[162,61026,14317],{"class":172},[162,61028,7312],{"class":207},[162,61030,16659],{"class":172},[162,61032,57466],{"class":168},[162,61034,57469],{"class":5082},[162,61036,604],{"class":168},[162,61038,61039],{"class":179},"'.end'",[162,61041,434],{"class":168},[162,61043,61044,61047,61049,61051,61053,61055,61057],{"class":164,"line":19917},[162,61045,61046],{"class":168},"    end.",[162,61048,60882],{"class":5082},[162,61050,604],{"class":168},[162,61052,60887],{"class":179},[162,61054,183],{"class":168},[162,61056,57519],{"class":172},[162,61058,57522],{"class":168},[162,61060,61061,61064],{"class":164,"line":19922},[162,61062,61063],{"class":5082},"      clearInterval",[162,61065,61066],{"class":168},"(timerId)\n",[162,61068,61069],{"class":164,"line":19936},[162,61070,61071],{"class":361},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[162,61073,61074,61077,61080,61083,61085],{"class":164,"line":19941},[162,61075,61076],{"class":168},"      arr.",[162,61078,61079],{"class":5082},"splice",[162,61081,61082],{"class":168},"(random, ",[162,61084,208],{"class":207},[162,61086,434],{"class":168},[162,61088,61089],{"class":164,"line":19946},[162,61090,36536],{"class":168},[162,61092,61093],{"class":164,"line":19960},[162,61094,301],{"emptyLinePlaceholder":300},[162,61096,61097,61099,61101],{"class":164,"line":19972},[162,61098,55487],{"class":168},[162,61100,54885],{"class":54373},[162,61102,54380],{"class":168},[162,61104,61105,61107,61109],{"class":164,"line":19977},[162,61106,54857],{"class":168},[162,61108,54872],{"class":54373},[162,61110,54380],{"class":168},[162,61112,61113],{"class":164,"line":19990},[162,61114,301],{"emptyLinePlaceholder":300},[162,61116,61117,61119,61121],{"class":164,"line":19995},[162,61118,54857],{"class":168},[162,61120,53708],{"class":54373},[162,61122,54380],{"class":168},[19,61124,61125],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[3284,61127,61129],{"id":61128},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[153,61131,61133],{"className":53706,"code":61132,"language":53708,"meta":158,"style":158},"\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",[71,61134,61135,61145,61159,61163,61171,61185,61205,61217,61225,61229,61237,61249,61257,61276,61293,61309,61319,61323,61331,61339,61343],{"__ignoreMap":158},[162,61136,61137,61139,61141,61143],{"class":164,"line":165},[162,61138,54370],{"class":168},[162,61140,54374],{"class":54373},[162,61142,54377],{"class":5082},[162,61144,54380],{"class":168},[162,61146,61147,61149,61151,61153,61155,61157],{"class":164,"line":197},[162,61148,4187],{"class":168},[162,61150,53708],{"class":54373},[162,61152,54389],{"class":5082},[162,61154,173],{"class":168},[162,61156,54394],{"class":179},[162,61158,54380],{"class":168},[162,61160,61161],{"class":164,"line":228},[162,61162,301],{"emptyLinePlaceholder":300},[162,61164,61165,61167,61169],{"class":164,"line":252},[162,61166,4187],{"class":168},[162,61168,54407],{"class":54373},[162,61170,54380],{"class":168},[162,61172,61173,61175,61177,61179,61181,61183],{"class":164,"line":328},[162,61174,55215],{"class":168},[162,61176,54417],{"class":54373},[162,61178,54420],{"class":5082},[162,61180,173],{"class":168},[162,61182,54425],{"class":179},[162,61184,54380],{"class":168},[162,61186,61187,61189,61191,61193,61195,61197,61199,61201,61203],{"class":164,"line":466},[162,61188,55215],{"class":168},[162,61190,54417],{"class":54373},[162,61192,18013],{"class":5082},[162,61194,173],{"class":168},[162,61196,54464],{"class":179},[162,61198,54444],{"class":5082},[162,61200,173],{"class":168},[162,61202,54471],{"class":179},[162,61204,54380],{"class":168},[162,61206,61207,61209,61211,61213,61215],{"class":164,"line":471},[162,61208,55215],{"class":168},[162,61210,54480],{"class":54373},[162,61212,54483],{"class":168},[162,61214,54480],{"class":54373},[162,61216,54380],{"class":168},[162,61218,61219,61221,61223],{"class":164,"line":687},[162,61220,54857],{"class":168},[162,61222,54407],{"class":54373},[162,61224,54380],{"class":168},[162,61226,61227],{"class":164,"line":692},[162,61228,301],{"emptyLinePlaceholder":300},[162,61230,61231,61233,61235],{"class":164,"line":698},[162,61232,4187],{"class":168},[162,61234,54872],{"class":54373},[162,61236,54380],{"class":168},[162,61238,61239,61241,61243,61245,61247],{"class":164,"line":2955},[162,61240,55215],{"class":168},[162,61242,56957],{"class":54373},[162,61244,56963],{"class":168},[162,61246,56957],{"class":54373},[162,61248,54380],{"class":168},[162,61250,61251,61253,61255],{"class":164,"line":2960},[162,61252,55215],{"class":168},[162,61254,54885],{"class":54373},[162,61256,54380],{"class":168},[162,61258,61259,61261,61263,61265,61267,61269,61271,61274],{"class":164,"line":2971},[162,61260,14317],{"class":172},[162,61262,57461],{"class":207},[162,61264,16659],{"class":172},[162,61266,57466],{"class":168},[162,61268,57469],{"class":5082},[162,61270,604],{"class":168},[162,61272,61273],{"class":179},"'button'",[162,61275,434],{"class":168},[162,61277,61278,61281,61283,61285,61287,61289,61291],{"class":164,"line":2984},[162,61279,61280],{"class":168},"    btn.",[162,61282,60882],{"class":5082},[162,61284,604],{"class":168},[162,61286,60887],{"class":179},[162,61288,183],{"class":168},[162,61290,57519],{"class":172},[162,61292,57522],{"class":168},[162,61294,61295,61298,61300,61302,61305,61307],{"class":164,"line":2989},[162,61296,61297],{"class":172},"      const",[162,61299,5358],{"class":207},[162,61301,16659],{"class":172},[162,61303,61304],{"class":168}," Math.",[162,61306,60929],{"class":5082},[162,61308,1526],{"class":168},[162,61310,61311,61314,61317],{"class":164,"line":3011},[162,61312,61313],{"class":168},"      console.",[162,61315,61316],{"class":5082},"log",[162,61318,3328],{"class":168},[162,61320,61321],{"class":164,"line":3022},[162,61322,36536],{"class":168},[162,61324,61325,61327,61329],{"class":164,"line":3027},[162,61326,55487],{"class":168},[162,61328,54885],{"class":54373},[162,61330,54380],{"class":168},[162,61332,61333,61335,61337],{"class":164,"line":3046},[162,61334,54857],{"class":168},[162,61336,54872],{"class":54373},[162,61338,54380],{"class":168},[162,61340,61341],{"class":164,"line":3052},[162,61342,301],{"emptyLinePlaceholder":300},[162,61344,61345,61347,61349],{"class":164,"line":3057},[162,61346,54857],{"class":168},[162,61348,53708],{"class":54373},[162,61350,54380],{"class":168},[19,61352,61353],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,61355,61356],{},"常量不可以重新赋值",[19,61358,61359],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[153,61361,61363],{"className":53706,"code":61362,"language":53708,"meta":158,"style":158},"\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",[71,61364,61365,61375,61389,61393,61401,61415,61435,61447,61455,61459,61467,61479,61487,61498,61516,61532,61546,61554,61558,61566,61574,61578],{"__ignoreMap":158},[162,61366,61367,61369,61371,61373],{"class":164,"line":165},[162,61368,54370],{"class":168},[162,61370,54374],{"class":54373},[162,61372,54377],{"class":5082},[162,61374,54380],{"class":168},[162,61376,61377,61379,61381,61383,61385,61387],{"class":164,"line":197},[162,61378,4187],{"class":168},[162,61380,53708],{"class":54373},[162,61382,54389],{"class":5082},[162,61384,173],{"class":168},[162,61386,54394],{"class":179},[162,61388,54380],{"class":168},[162,61390,61391],{"class":164,"line":228},[162,61392,301],{"emptyLinePlaceholder":300},[162,61394,61395,61397,61399],{"class":164,"line":252},[162,61396,4187],{"class":168},[162,61398,54407],{"class":54373},[162,61400,54380],{"class":168},[162,61402,61403,61405,61407,61409,61411,61413],{"class":164,"line":328},[162,61404,55215],{"class":168},[162,61406,54417],{"class":54373},[162,61408,54420],{"class":5082},[162,61410,173],{"class":168},[162,61412,54425],{"class":179},[162,61414,54380],{"class":168},[162,61416,61417,61419,61421,61423,61425,61427,61429,61431,61433],{"class":164,"line":466},[162,61418,55215],{"class":168},[162,61420,54417],{"class":54373},[162,61422,18013],{"class":5082},[162,61424,173],{"class":168},[162,61426,54464],{"class":179},[162,61428,54444],{"class":5082},[162,61430,173],{"class":168},[162,61432,54471],{"class":179},[162,61434,54380],{"class":168},[162,61436,61437,61439,61441,61443,61445],{"class":164,"line":471},[162,61438,55215],{"class":168},[162,61440,54480],{"class":54373},[162,61442,54483],{"class":168},[162,61444,54480],{"class":54373},[162,61446,54380],{"class":168},[162,61448,61449,61451,61453],{"class":164,"line":687},[162,61450,54857],{"class":168},[162,61452,54407],{"class":54373},[162,61454,54380],{"class":168},[162,61456,61457],{"class":164,"line":692},[162,61458,301],{"emptyLinePlaceholder":300},[162,61460,61461,61463,61465],{"class":164,"line":698},[162,61462,4187],{"class":168},[162,61464,54872],{"class":54373},[162,61466,54380],{"class":168},[162,61468,61469,61471,61473,61475,61477],{"class":164,"line":2955},[162,61470,55215],{"class":168},[162,61472,56957],{"class":54373},[162,61474,56963],{"class":168},[162,61476,56957],{"class":54373},[162,61478,54380],{"class":168},[162,61480,61481,61483,61485],{"class":164,"line":2960},[162,61482,55215],{"class":168},[162,61484,54885],{"class":54373},[162,61486,54380],{"class":168},[162,61488,61489,61491,61493,61495],{"class":164,"line":2971},[162,61490,14317],{"class":172},[162,61492,5358],{"class":207},[162,61494,16659],{"class":172},[162,61496,61497],{"class":207}," 10\n",[162,61499,61500,61502,61504,61506,61508,61510,61512,61514],{"class":164,"line":2984},[162,61501,14317],{"class":172},[162,61503,57461],{"class":207},[162,61505,16659],{"class":172},[162,61507,57466],{"class":168},[162,61509,57469],{"class":5082},[162,61511,604],{"class":168},[162,61513,61273],{"class":179},[162,61515,434],{"class":168},[162,61517,61518,61520,61522,61524,61526,61528,61530],{"class":164,"line":2989},[162,61519,61280],{"class":168},[162,61521,60882],{"class":5082},[162,61523,604],{"class":168},[162,61525,60887],{"class":179},[162,61527,183],{"class":168},[162,61529,57519],{"class":172},[162,61531,57522],{"class":168},[162,61533,61534,61536,61538,61540,61542,61544],{"class":164,"line":3011},[162,61535,61297],{"class":172},[162,61537,5358],{"class":207},[162,61539,16659],{"class":172},[162,61541,61304],{"class":168},[162,61543,60929],{"class":5082},[162,61545,1526],{"class":168},[162,61547,61548,61550,61552],{"class":164,"line":3022},[162,61549,61313],{"class":168},[162,61551,61316],{"class":5082},[162,61553,3328],{"class":168},[162,61555,61556],{"class":164,"line":3027},[162,61557,36536],{"class":168},[162,61559,61560,61562,61564],{"class":164,"line":3046},[162,61561,55487],{"class":168},[162,61563,54885],{"class":54373},[162,61565,54380],{"class":168},[162,61567,61568,61570,61572],{"class":164,"line":3052},[162,61569,54857],{"class":168},[162,61571,54872],{"class":54373},[162,61573,54380],{"class":168},[162,61575,61576],{"class":164,"line":3057},[162,61577,301],{"emptyLinePlaceholder":300},[162,61579,61580,61582,61584],{"class":164,"line":3072},[162,61581,54857],{"class":168},[162,61583,53708],{"class":54373},[162,61585,54380],{"class":168},[19,61587,61588],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[153,61590,61592],{"className":53706,"code":61591,"language":53708,"meta":158,"style":158},"\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",[71,61593,61594,61604,61618,61622,61630,61644,61664,61676,61684,61688,61696,61708,61716,61726,61744,61760,61773,61781,61785,61793,61801,61805],{"__ignoreMap":158},[162,61595,61596,61598,61600,61602],{"class":164,"line":165},[162,61597,54370],{"class":168},[162,61599,54374],{"class":54373},[162,61601,54377],{"class":5082},[162,61603,54380],{"class":168},[162,61605,61606,61608,61610,61612,61614,61616],{"class":164,"line":197},[162,61607,4187],{"class":168},[162,61609,53708],{"class":54373},[162,61611,54389],{"class":5082},[162,61613,173],{"class":168},[162,61615,54394],{"class":179},[162,61617,54380],{"class":168},[162,61619,61620],{"class":164,"line":228},[162,61621,301],{"emptyLinePlaceholder":300},[162,61623,61624,61626,61628],{"class":164,"line":252},[162,61625,4187],{"class":168},[162,61627,54407],{"class":54373},[162,61629,54380],{"class":168},[162,61631,61632,61634,61636,61638,61640,61642],{"class":164,"line":328},[162,61633,55215],{"class":168},[162,61635,54417],{"class":54373},[162,61637,54420],{"class":5082},[162,61639,173],{"class":168},[162,61641,54425],{"class":179},[162,61643,54380],{"class":168},[162,61645,61646,61648,61650,61652,61654,61656,61658,61660,61662],{"class":164,"line":466},[162,61647,55215],{"class":168},[162,61649,54417],{"class":54373},[162,61651,18013],{"class":5082},[162,61653,173],{"class":168},[162,61655,54464],{"class":179},[162,61657,54444],{"class":5082},[162,61659,173],{"class":168},[162,61661,54471],{"class":179},[162,61663,54380],{"class":168},[162,61665,61666,61668,61670,61672,61674],{"class":164,"line":471},[162,61667,55215],{"class":168},[162,61669,54480],{"class":54373},[162,61671,54483],{"class":168},[162,61673,54480],{"class":54373},[162,61675,54380],{"class":168},[162,61677,61678,61680,61682],{"class":164,"line":687},[162,61679,54857],{"class":168},[162,61681,54407],{"class":54373},[162,61683,54380],{"class":168},[162,61685,61686],{"class":164,"line":692},[162,61687,301],{"emptyLinePlaceholder":300},[162,61689,61690,61692,61694],{"class":164,"line":698},[162,61691,4187],{"class":168},[162,61693,54872],{"class":54373},[162,61695,54380],{"class":168},[162,61697,61698,61700,61702,61704,61706],{"class":164,"line":2955},[162,61699,55215],{"class":168},[162,61701,56957],{"class":54373},[162,61703,56963],{"class":168},[162,61705,56957],{"class":54373},[162,61707,54380],{"class":168},[162,61709,61710,61712,61714],{"class":164,"line":2960},[162,61711,55215],{"class":168},[162,61713,54885],{"class":54373},[162,61715,54380],{"class":168},[162,61717,61718,61720,61722,61724],{"class":164,"line":2971},[162,61719,14317],{"class":172},[162,61721,5358],{"class":207},[162,61723,16659],{"class":172},[162,61725,61497],{"class":207},[162,61727,61728,61730,61732,61734,61736,61738,61740,61742],{"class":164,"line":2984},[162,61729,14317],{"class":172},[162,61731,57461],{"class":207},[162,61733,16659],{"class":172},[162,61735,57466],{"class":168},[162,61737,57469],{"class":5082},[162,61739,604],{"class":168},[162,61741,61273],{"class":179},[162,61743,434],{"class":168},[162,61745,61746,61748,61750,61752,61754,61756,61758],{"class":164,"line":2989},[162,61747,61280],{"class":168},[162,61749,60882],{"class":5082},[162,61751,604],{"class":168},[162,61753,60887],{"class":179},[162,61755,183],{"class":168},[162,61757,57519],{"class":172},[162,61759,57522],{"class":168},[162,61761,61762,61765,61767,61769,61771],{"class":164,"line":3011},[162,61763,61764],{"class":168},"      num ",[162,61766,173],{"class":172},[162,61768,61304],{"class":168},[162,61770,60929],{"class":5082},[162,61772,1526],{"class":168},[162,61774,61775,61777,61779],{"class":164,"line":3022},[162,61776,61313],{"class":168},[162,61778,61316],{"class":5082},[162,61780,3328],{"class":168},[162,61782,61783],{"class":164,"line":3027},[162,61784,36536],{"class":168},[162,61786,61787,61789,61791],{"class":164,"line":3046},[162,61788,55487],{"class":168},[162,61790,54885],{"class":54373},[162,61792,54380],{"class":168},[162,61794,61795,61797,61799],{"class":164,"line":3052},[162,61796,54857],{"class":168},[162,61798,54872],{"class":54373},[162,61800,54380],{"class":168},[162,61802,61803],{"class":164,"line":3057},[162,61804,301],{"emptyLinePlaceholder":300},[162,61806,61807,61809,61811],{"class":164,"line":3072},[162,61808,54857],{"class":168},[162,61810,53708],{"class":54373},[162,61812,54380],{"class":168},[19,61814,61815],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[3284,61817,61819],{"id":61818},"_324-事件监听版本","3.2.4 事件监听版本",[19,61821,61822],{},[4602,61823],{"alt":158,"src":61824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,61826,61827],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,61829,61830],{},"这种方式会覆盖前边的事件监听:",[153,61832,61834],{"className":53706,"code":61833,"language":53708,"meta":158,"style":158},"\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",[71,61835,61836,61846,61860,61864,61872,61886,61906,61918,61926,61930,61938,61950,61958,61976,61990,62001,62005,62017,62027,62031,62039,62047,62051],{"__ignoreMap":158},[162,61837,61838,61840,61842,61844],{"class":164,"line":165},[162,61839,54370],{"class":168},[162,61841,54374],{"class":54373},[162,61843,54377],{"class":5082},[162,61845,54380],{"class":168},[162,61847,61848,61850,61852,61854,61856,61858],{"class":164,"line":197},[162,61849,4187],{"class":168},[162,61851,53708],{"class":54373},[162,61853,54389],{"class":5082},[162,61855,173],{"class":168},[162,61857,54394],{"class":179},[162,61859,54380],{"class":168},[162,61861,61862],{"class":164,"line":228},[162,61863,301],{"emptyLinePlaceholder":300},[162,61865,61866,61868,61870],{"class":164,"line":252},[162,61867,4187],{"class":168},[162,61869,54407],{"class":54373},[162,61871,54380],{"class":168},[162,61873,61874,61876,61878,61880,61882,61884],{"class":164,"line":328},[162,61875,55215],{"class":168},[162,61877,54417],{"class":54373},[162,61879,54420],{"class":5082},[162,61881,173],{"class":168},[162,61883,54425],{"class":179},[162,61885,54380],{"class":168},[162,61887,61888,61890,61892,61894,61896,61898,61900,61902,61904],{"class":164,"line":466},[162,61889,55215],{"class":168},[162,61891,54417],{"class":54373},[162,61893,18013],{"class":5082},[162,61895,173],{"class":168},[162,61897,54464],{"class":179},[162,61899,54444],{"class":5082},[162,61901,173],{"class":168},[162,61903,54471],{"class":179},[162,61905,54380],{"class":168},[162,61907,61908,61910,61912,61914,61916],{"class":164,"line":471},[162,61909,55215],{"class":168},[162,61911,54480],{"class":54373},[162,61913,54483],{"class":168},[162,61915,54480],{"class":54373},[162,61917,54380],{"class":168},[162,61919,61920,61922,61924],{"class":164,"line":687},[162,61921,54857],{"class":168},[162,61923,54407],{"class":54373},[162,61925,54380],{"class":168},[162,61927,61928],{"class":164,"line":692},[162,61929,301],{"emptyLinePlaceholder":300},[162,61931,61932,61934,61936],{"class":164,"line":698},[162,61933,4187],{"class":168},[162,61935,54872],{"class":54373},[162,61937,54380],{"class":168},[162,61939,61940,61942,61944,61946,61948],{"class":164,"line":2955},[162,61941,55215],{"class":168},[162,61943,56957],{"class":54373},[162,61945,56963],{"class":168},[162,61947,56957],{"class":54373},[162,61949,54380],{"class":168},[162,61951,61952,61954,61956],{"class":164,"line":2960},[162,61953,55215],{"class":168},[162,61955,54885],{"class":54373},[162,61957,54380],{"class":168},[162,61959,61960,61962,61964,61966,61968,61970,61972,61974],{"class":164,"line":2971},[162,61961,14317],{"class":172},[162,61963,57461],{"class":207},[162,61965,16659],{"class":172},[162,61967,57466],{"class":168},[162,61969,57469],{"class":5082},[162,61971,604],{"class":168},[162,61973,61273],{"class":179},[162,61975,434],{"class":168},[162,61977,61978,61980,61983,61985,61988],{"class":164,"line":2984},[162,61979,61280],{"class":168},[162,61981,61982],{"class":5082},"onclick",[162,61984,16659],{"class":172},[162,61986,61987],{"class":172}," function",[162,61989,57522],{"class":168},[162,61991,61992,61995,61997,61999],{"class":164,"line":2989},[162,61993,61994],{"class":5082},"      alert",[162,61996,604],{"class":168},[162,61998,3762],{"class":207},[162,62000,434],{"class":168},[162,62002,62003],{"class":164,"line":3011},[162,62004,5305],{"class":168},[162,62006,62007,62009,62011,62013,62015],{"class":164,"line":3022},[162,62008,61280],{"class":168},[162,62010,61982],{"class":5082},[162,62012,16659],{"class":172},[162,62014,61987],{"class":172},[162,62016,57522],{"class":168},[162,62018,62019,62021,62023,62025],{"class":164,"line":3027},[162,62020,61994],{"class":5082},[162,62022,604],{"class":168},[162,62024,4032],{"class":207},[162,62026,434],{"class":168},[162,62028,62029],{"class":164,"line":3046},[162,62030,5305],{"class":168},[162,62032,62033,62035,62037],{"class":164,"line":3052},[162,62034,55487],{"class":168},[162,62036,54885],{"class":54373},[162,62038,54380],{"class":168},[162,62040,62041,62043,62045],{"class":164,"line":3057},[162,62042,54857],{"class":168},[162,62044,54872],{"class":54373},[162,62046,54380],{"class":168},[162,62048,62049],{"class":164,"line":3072},[162,62050,301],{"emptyLinePlaceholder":300},[162,62052,62053,62055,62057],{"class":164,"line":3077},[162,62054,54857],{"class":168},[162,62056,53708],{"class":54373},[162,62058,54380],{"class":168},[19,62060,62061],{},"只要点击就输出结果为22,前边11被覆盖了",[153,62063,62065],{"className":53706,"code":62064,"language":53708,"meta":158,"style":158},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[71,62066,62067,62072,62077,62081,62086,62091],{"__ignoreMap":158},[162,62068,62069],{"class":164,"line":165},[162,62070,62071],{"class":168},"  btn.addEventListener('click', function () {\n",[162,62073,62074],{"class":164,"line":197},[162,62075,62076],{"class":168},"      alert(11)\n",[162,62078,62079],{"class":164,"line":228},[162,62080,36536],{"class":168},[162,62082,62083],{"class":164,"line":252},[162,62084,62085],{"class":168},"    btn.addEventListener('click', function () {\n",[162,62087,62088],{"class":164,"line":328},[162,62089,62090],{"class":168},"      alert(22)\n",[162,62092,62093],{"class":164,"line":466},[162,62094,36536],{"class":168},[19,62096,62097],{},"点击第一次输出11,第二次点击为22",[3284,62099,62101],{"id":62100},"_325-事件类型","3.2.5 事件类型",[19,62103,62104],{},[4602,62105],{"alt":158,"src":62106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[25089,62108,62110],{"id":62109},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,62112,62113],{},"补充知识:",[19,62115,62116],{},"轮播图自动播放模块,可以使用",[19,62118,62119],{},"let timerId = setInterval(function () {",[19,62121,62122],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,62124,62125],{},"用js方法模拟进行点击事件,click必须加()",[19,62127,62128],{},"next.click()",[19,62130,62131],{},"}, 1000)",[19,62133,62134],{},[4602,62135],{"alt":158,"src":62136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[153,62138,62140],{"className":56137,"code":62139,"language":56139,"meta":158,"style":158},"\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",[71,62141,62142,62146,62156,62170,62174,62182,62197,62217,62237,62250,62258,62263,62268,62272,62276,62281,62286,62291,62296,62300,62304,62309,62314,62319,62323,62327,62332,62336,62341,62346,62350,62354,62359,62364,62369,62374,62379,62383,62387,62392,62397,62402,62407,62412,62416,62420,62425,62430,62435,62440,62445,62450,62455,62460,62465,62470,62474,62478,62483,62488,62492,62496,62501,62506,62510,62515,62520,62524,62528,62533,62537,62542,62547,62551,62556,62560,62564,62569,62574,62579,62584,62589,62594,62599,62603,62607,62611,62616,62621,62626,62631,62635,62643,62651,62655,62663,62678,62692,62713,62721,62735,62748,62763,62782,62794,62806,62818,62830,62842,62854,62866,62874,62889,62913,62937,62945,62953,62961,62969,62974,62979,62984,62989,62994,62999,63004,63009,63014,63019,63023,63028,63033,63038,63043,63048,63053,63058,63063,63068,63072,63077,63082,63087,63092,63097,63102,63107,63112,63117,63122,63127,63132,63136,63140,63145,63150,63155,63159,63164,63169,63174,63179,63184,63188,63193,63197,63201,63205,63209,63213,63217,63222,63227,63232,63237,63242,63247,63252,63257,63262,63266,63270,63275,63280,63285,63290,63295,63299,63304,63309,63314,63319,63324,63329,63333,63337,63342,63346,63351,63355,63360,63365,63370,63375,63380,63385,63389,63397,63405,63409],{"__ignoreMap":158},[162,62143,62144],{"class":164,"line":165},[162,62145,301],{"emptyLinePlaceholder":300},[162,62147,62148,62150,62152,62154],{"class":164,"line":197},[162,62149,54370],{"class":168},[162,62151,54374],{"class":172},[162,62153,54377],{"class":207},[162,62155,54380],{"class":168},[162,62157,62158,62160,62162,62164,62166,62168],{"class":164,"line":228},[162,62159,4187],{"class":168},[162,62161,53708],{"class":54373},[162,62163,54389],{"class":5082},[162,62165,173],{"class":168},[162,62167,54394],{"class":179},[162,62169,54380],{"class":168},[162,62171,62172],{"class":164,"line":252},[162,62173,301],{"emptyLinePlaceholder":300},[162,62175,62176,62178,62180],{"class":164,"line":328},[162,62177,4187],{"class":168},[162,62179,54407],{"class":54373},[162,62181,54380],{"class":168},[162,62183,62184,62186,62188,62190,62192,62194],{"class":164,"line":466},[162,62185,55215],{"class":168},[162,62187,54417],{"class":54373},[162,62189,54420],{"class":5082},[162,62191,173],{"class":168},[162,62193,54425],{"class":179},[162,62195,62196],{"class":168}," \u002F>\n",[162,62198,62199,62201,62203,62205,62207,62209,62211,62213,62215],{"class":164,"line":471},[162,62200,55215],{"class":168},[162,62202,54417],{"class":54373},[162,62204,54436],{"class":5082},[162,62206,173],{"class":168},[162,62208,54441],{"class":179},[162,62210,54444],{"class":5082},[162,62212,173],{"class":168},[162,62214,54449],{"class":179},[162,62216,62196],{"class":168},[162,62218,62219,62221,62223,62225,62227,62229,62231,62233,62235],{"class":164,"line":687},[162,62220,55215],{"class":168},[162,62222,54417],{"class":54373},[162,62224,18013],{"class":5082},[162,62226,173],{"class":168},[162,62228,54464],{"class":179},[162,62230,54444],{"class":5082},[162,62232,173],{"class":168},[162,62234,54471],{"class":179},[162,62236,62196],{"class":168},[162,62238,62239,62241,62243,62246,62248],{"class":164,"line":692},[162,62240,55215],{"class":168},[162,62242,54480],{"class":54373},[162,62244,62245],{"class":168},">轮播图点击切换\u003C\u002F",[162,62247,54480],{"class":54373},[162,62249,54380],{"class":168},[162,62251,62252,62254,62256],{"class":164,"line":698},[162,62253,55215],{"class":168},[162,62255,3219],{"class":54373},[162,62257,54380],{"class":168},[162,62259,62260],{"class":164,"line":2955},[162,62261,62262],{"class":168},"    * {\n",[162,62264,62265],{"class":164,"line":2960},[162,62266,62267],{"class":168},"      box-sizing: border-box;\n",[162,62269,62270],{"class":164,"line":2971},[162,62271,5305],{"class":168},[162,62273,62274],{"class":164,"line":2984},[162,62275,301],{"emptyLinePlaceholder":300},[162,62277,62278],{"class":164,"line":2989},[162,62279,62280],{"class":168},"    .slider {\n",[162,62282,62283],{"class":164,"line":3011},[162,62284,62285],{"class":168},"      width: 560px;\n",[162,62287,62288],{"class":164,"line":3022},[162,62289,62290],{"class":168},"      height: 400px;\n",[162,62292,62293],{"class":164,"line":3027},[162,62294,62295],{"class":168},"      overflow: hidden;\n",[162,62297,62298],{"class":164,"line":3046},[162,62299,5305],{"class":168},[162,62301,62302],{"class":164,"line":3052},[162,62303,301],{"emptyLinePlaceholder":300},[162,62305,62306],{"class":164,"line":3057},[162,62307,62308],{"class":168},"    .slider-wrapper {\n",[162,62310,62311],{"class":164,"line":3072},[162,62312,62313],{"class":168},"      width: 100%;\n",[162,62315,62316],{"class":164,"line":3077},[162,62317,62318],{"class":168},"      height: 320px;\n",[162,62320,62321],{"class":164,"line":3100},[162,62322,5305],{"class":168},[162,62324,62325],{"class":164,"line":3140},[162,62326,301],{"emptyLinePlaceholder":300},[162,62328,62329],{"class":164,"line":4878},[162,62330,62331],{"class":168},"    .slider-wrapper img {\n",[162,62333,62334],{"class":164,"line":4883},[162,62335,62313],{"class":168},[162,62337,62338],{"class":164,"line":4897},[162,62339,62340],{"class":168},"      height: 100%;\n",[162,62342,62343],{"class":164,"line":4902},[162,62344,62345],{"class":168},"      display: block;\n",[162,62347,62348],{"class":164,"line":5694},[162,62349,5305],{"class":168},[162,62351,62352],{"class":164,"line":5708},[162,62353,301],{"emptyLinePlaceholder":300},[162,62355,62356],{"class":164,"line":5716},[162,62357,62358],{"class":168},"    .slider-footer {\n",[162,62360,62361],{"class":164,"line":5721},[162,62362,62363],{"class":168},"      height: 80px;\n",[162,62365,62366],{"class":164,"line":5727},[162,62367,62368],{"class":168},"      background-color: rgb(100, 67, 68);\n",[162,62370,62371],{"class":164,"line":5733},[162,62372,62373],{"class":168},"      padding: 12px 12px 0 12px;\n",[162,62375,62376],{"class":164,"line":5738},[162,62377,62378],{"class":168},"      position: relative;\n",[162,62380,62381],{"class":164,"line":11052},[162,62382,5305],{"class":168},[162,62384,62385],{"class":164,"line":11076},[162,62386,301],{"emptyLinePlaceholder":300},[162,62388,62389],{"class":164,"line":11081},[162,62390,62391],{"class":168},"    .slider-footer .toggle {\n",[162,62393,62394],{"class":164,"line":11087},[162,62395,62396],{"class":168},"      position: absolute;\n",[162,62398,62399],{"class":164,"line":11114},[162,62400,62401],{"class":168},"      right: 0;\n",[162,62403,62404],{"class":164,"line":11119},[162,62405,62406],{"class":168},"      top: 12px;\n",[162,62408,62409],{"class":164,"line":11125},[162,62410,62411],{"class":168},"      display: flex;\n",[162,62413,62414],{"class":164,"line":11137},[162,62415,5305],{"class":168},[162,62417,62418],{"class":164,"line":11149},[162,62419,301],{"emptyLinePlaceholder":300},[162,62421,62422],{"class":164,"line":11161},[162,62423,62424],{"class":168},"    .slider-footer .toggle button {\n",[162,62426,62427],{"class":164,"line":12816},[162,62428,62429],{"class":168},"      margin-right: 12px;\n",[162,62431,62432],{"class":164,"line":12841},[162,62433,62434],{"class":168},"      width: 28px;\n",[162,62436,62437],{"class":164,"line":12864},[162,62438,62439],{"class":168},"      height: 28px;\n",[162,62441,62442],{"class":164,"line":12888},[162,62443,62444],{"class":168},"      appearance: none;\n",[162,62446,62447],{"class":164,"line":12893},[162,62448,62449],{"class":168},"      border: none;\n",[162,62451,62452],{"class":164,"line":12898},[162,62453,62454],{"class":168},"      background: rgba(255, 255, 255, 0.1);\n",[162,62456,62457],{"class":164,"line":12903},[162,62458,62459],{"class":168},"      color: #fff;\n",[162,62461,62462],{"class":164,"line":12912},[162,62463,62464],{"class":168},"      border-radius: 4px;\n",[162,62466,62467],{"class":164,"line":12917},[162,62468,62469],{"class":168},"      cursor: pointer;\n",[162,62471,62472],{"class":164,"line":12923},[162,62473,5305],{"class":168},[162,62475,62476],{"class":164,"line":12944},[162,62477,301],{"emptyLinePlaceholder":300},[162,62479,62480],{"class":164,"line":12950},[162,62481,62482],{"class":168},"    .slider-footer .toggle button:hover {\n",[162,62484,62485],{"class":164,"line":12964},[162,62486,62487],{"class":168},"      background: rgba(255, 255, 255, 0.2);\n",[162,62489,62490],{"class":164,"line":12970},[162,62491,5305],{"class":168},[162,62493,62494],{"class":164,"line":12997},[162,62495,301],{"emptyLinePlaceholder":300},[162,62497,62498],{"class":164,"line":13006},[162,62499,62500],{"class":168},"    .slider-footer p {\n",[162,62502,62503],{"class":164,"line":13012},[162,62504,62505],{"class":168},"      margin: 0;\n",[162,62507,62508],{"class":164,"line":13020},[162,62509,62459],{"class":168},[162,62511,62512],{"class":164,"line":13025},[162,62513,62514],{"class":168},"      font-size: 18px;\n",[162,62516,62517],{"class":164,"line":19695},[162,62518,62519],{"class":168},"      margin-bottom: 10px;\n",[162,62521,62522],{"class":164,"line":19701},[162,62523,5305],{"class":168},[162,62525,62526],{"class":164,"line":19724},[162,62527,301],{"emptyLinePlaceholder":300},[162,62529,62530],{"class":164,"line":19730},[162,62531,62532],{"class":168},"    .slider-indicator {\n",[162,62534,62535],{"class":164,"line":19753},[162,62536,62505],{"class":168},[162,62538,62539],{"class":164,"line":19767},[162,62540,62541],{"class":168},"      padding: 0;\n",[162,62543,62544],{"class":164,"line":19787},[162,62545,62546],{"class":168},"      list-style: none;\n",[162,62548,62549],{"class":164,"line":19793},[162,62550,62411],{"class":168},[162,62552,62553],{"class":164,"line":19804},[162,62554,62555],{"class":168},"      align-items: center;\n",[162,62557,62558],{"class":164,"line":19827},[162,62559,5305],{"class":168},[162,62561,62562],{"class":164,"line":19849},[162,62563,301],{"emptyLinePlaceholder":300},[162,62565,62566],{"class":164,"line":19854},[162,62567,62568],{"class":168},"    .slider-indicator li {\n",[162,62570,62571],{"class":164,"line":19860},[162,62572,62573],{"class":168},"      width: 8px;\n",[162,62575,62576],{"class":164,"line":19874},[162,62577,62578],{"class":168},"      height: 8px;\n",[162,62580,62581],{"class":164,"line":19887},[162,62582,62583],{"class":168},"      margin: 4px;\n",[162,62585,62586],{"class":164,"line":19892},[162,62587,62588],{"class":168},"      border-radius: 50%;\n",[162,62590,62591],{"class":164,"line":19906},[162,62592,62593],{"class":168},"      background: #fff;\n",[162,62595,62596],{"class":164,"line":19911},[162,62597,62598],{"class":168},"      opacity: 0.4;\n",[162,62600,62601],{"class":164,"line":19917},[162,62602,62469],{"class":168},[162,62604,62605],{"class":164,"line":19922},[162,62606,5305],{"class":168},[162,62608,62609],{"class":164,"line":19936},[162,62610,301],{"emptyLinePlaceholder":300},[162,62612,62613],{"class":164,"line":19941},[162,62614,62615],{"class":168},"    .slider-indicator li.active {\n",[162,62617,62618],{"class":164,"line":19946},[162,62619,62620],{"class":168},"      width: 12px;\n",[162,62622,62623],{"class":164,"line":19960},[162,62624,62625],{"class":168},"      height: 12px;\n",[162,62627,62628],{"class":164,"line":19972},[162,62629,62630],{"class":168},"      opacity: 1;\n",[162,62632,62633],{"class":164,"line":19977},[162,62634,5305],{"class":168},[162,62636,62637,62639,62641],{"class":164,"line":19990},[162,62638,55487],{"class":168},[162,62640,3219],{"class":54373},[162,62642,54380],{"class":168},[162,62644,62645,62647,62649],{"class":164,"line":19995},[162,62646,54857],{"class":168},[162,62648,54407],{"class":54373},[162,62650,54380],{"class":168},[162,62652,62653],{"class":164,"line":20000},[162,62654,301],{"emptyLinePlaceholder":300},[162,62656,62657,62659,62661],{"class":164,"line":20005},[162,62658,4187],{"class":168},[162,62660,54872],{"class":54373},[162,62662,54380],{"class":168},[162,62664,62665,62667,62669,62671,62673,62676],{"class":164,"line":20018},[162,62666,55215],{"class":168},[162,62668,54683],{"class":54373},[162,62670,56556],{"class":5082},[162,62672,173],{"class":168},[162,62674,62675],{"class":179},"\"slider\"",[162,62677,54380],{"class":168},[162,62679,62680,62682,62684,62686,62688,62690],{"class":164,"line":20023},[162,62681,54414],{"class":168},[162,62683,54683],{"class":54373},[162,62685,56556],{"class":5082},[162,62687,173],{"class":168},[162,62689,58297],{"class":179},[162,62691,54380],{"class":168},[162,62693,62694,62696,62698,62700,62702,62705,62707,62709,62711],{"class":164,"line":35709},[162,62695,58304],{"class":168},[162,62697,4602],{"class":54373},[162,62699,58309],{"class":5082},[162,62701,173],{"class":168},[162,62703,62704],{"class":179},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[162,62706,58317],{"class":5082},[162,62708,173],{"class":168},[162,62710,10756],{"class":179},[162,62712,62196],{"class":168},[162,62714,62715,62717,62719],{"class":164,"line":35715},[162,62716,54848],{"class":168},[162,62718,54683],{"class":54373},[162,62720,54380],{"class":168},[162,62722,62723,62725,62727,62729,62731,62733],{"class":164,"line":35721},[162,62724,54414],{"class":168},[162,62726,54683],{"class":54373},[162,62728,56556],{"class":5082},[162,62730,173],{"class":168},[162,62732,58344],{"class":179},[162,62734,54380],{"class":168},[162,62736,62737,62739,62741,62744,62746],{"class":164,"line":35727},[162,62738,58304],{"class":168},[162,62740,19],{"class":54373},[162,62742,62743],{"class":168},">对人类来说会不会太超前了？\u003C\u002F",[162,62745,19],{"class":54373},[162,62747,54380],{"class":168},[162,62749,62750,62752,62754,62756,62758,62761],{"class":164,"line":35733},[162,62751,58304],{"class":168},[162,62753,4279],{"class":54373},[162,62755,56556],{"class":5082},[162,62757,173],{"class":168},[162,62759,62760],{"class":179},"\"slider-indicator\"",[162,62762,54380],{"class":168},[162,62764,62765,62767,62769,62771,62773,62776,62778,62780],{"class":164,"line":35744},[162,62766,58372],{"class":168},[162,62768,1455],{"class":54373},[162,62770,56556],{"class":5082},[162,62772,173],{"class":168},[162,62774,62775],{"class":179},"\"active\"",[162,62777,58384],{"class":168},[162,62779,1455],{"class":54373},[162,62781,54380],{"class":168},[162,62783,62784,62786,62788,62790,62792],{"class":164,"line":35750},[162,62785,58372],{"class":168},[162,62787,1455],{"class":54373},[162,62789,58384],{"class":168},[162,62791,1455],{"class":54373},[162,62793,54380],{"class":168},[162,62795,62796,62798,62800,62802,62804],{"class":164,"line":35770},[162,62797,58372],{"class":168},[162,62799,1455],{"class":54373},[162,62801,58384],{"class":168},[162,62803,1455],{"class":54373},[162,62805,54380],{"class":168},[162,62807,62808,62810,62812,62814,62816],{"class":164,"line":35776},[162,62809,58372],{"class":168},[162,62811,1455],{"class":54373},[162,62813,58384],{"class":168},[162,62815,1455],{"class":54373},[162,62817,54380],{"class":168},[162,62819,62820,62822,62824,62826,62828],{"class":164,"line":35787},[162,62821,58372],{"class":168},[162,62823,1455],{"class":54373},[162,62825,58384],{"class":168},[162,62827,1455],{"class":54373},[162,62829,54380],{"class":168},[162,62831,62832,62834,62836,62838,62840],{"class":164,"line":35793},[162,62833,58372],{"class":168},[162,62835,1455],{"class":54373},[162,62837,58384],{"class":168},[162,62839,1455],{"class":54373},[162,62841,54380],{"class":168},[162,62843,62844,62846,62848,62850,62852],{"class":164,"line":35799},[162,62845,58372],{"class":168},[162,62847,1455],{"class":54373},[162,62849,58384],{"class":168},[162,62851,1455],{"class":54373},[162,62853,54380],{"class":168},[162,62855,62856,62858,62860,62862,62864],{"class":164,"line":35805},[162,62857,58372],{"class":168},[162,62859,1455],{"class":54373},[162,62861,58384],{"class":168},[162,62863,1455],{"class":54373},[162,62865,54380],{"class":168},[162,62867,62868,62870,62872],{"class":164,"line":35811},[162,62869,58477],{"class":168},[162,62871,4279],{"class":54373},[162,62873,54380],{"class":168},[162,62875,62876,62878,62880,62882,62884,62887],{"class":164,"line":35817},[162,62877,58304],{"class":168},[162,62879,54683],{"class":54373},[162,62881,56556],{"class":5082},[162,62883,173],{"class":168},[162,62885,62886],{"class":179},"\"toggle\"",[162,62888,54380],{"class":168},[162,62890,62891,62893,62895,62897,62899,62902,62904,62907,62909,62911],{"class":164,"line":35823},[162,62892,58372],{"class":168},[162,62894,56957],{"class":54373},[162,62896,56556],{"class":5082},[162,62898,173],{"class":168},[162,62900,62901],{"class":179},"\"prev\"",[162,62903,3000],{"class":168},[162,62905,62906],{"class":207},"&lt;",[162,62908,54857],{"class":168},[162,62910,56957],{"class":54373},[162,62912,54380],{"class":168},[162,62914,62915,62917,62919,62921,62923,62926,62928,62931,62933,62935],{"class":164,"line":35829},[162,62916,58372],{"class":168},[162,62918,56957],{"class":54373},[162,62920,56556],{"class":5082},[162,62922,173],{"class":168},[162,62924,62925],{"class":179},"\"next\"",[162,62927,3000],{"class":168},[162,62929,62930],{"class":207},"&gt;",[162,62932,54857],{"class":168},[162,62934,56957],{"class":54373},[162,62936,54380],{"class":168},[162,62938,62939,62941,62943],{"class":164,"line":35849},[162,62940,58477],{"class":168},[162,62942,54683],{"class":54373},[162,62944,54380],{"class":168},[162,62946,62947,62949,62951],{"class":164,"line":35855},[162,62948,54848],{"class":168},[162,62950,54683],{"class":54373},[162,62952,54380],{"class":168},[162,62954,62955,62957,62959],{"class":164,"line":35871},[162,62956,55487],{"class":168},[162,62958,54683],{"class":54373},[162,62960,54380],{"class":168},[162,62962,62963,62965,62967],{"class":164,"line":35877},[162,62964,55215],{"class":168},[162,62966,54885],{"class":54373},[162,62968,54380],{"class":168},[162,62970,62971],{"class":164,"line":35891},[162,62972,62973],{"class":168},"    \u002F\u002F 1. 初始数据\n",[162,62975,62976],{"class":164,"line":35897},[162,62977,62978],{"class":168},"    const data = [\n",[162,62980,62981],{"class":164,"line":35912},[162,62982,62983],{"class":168},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[162,62985,62986],{"class":164,"line":35918},[162,62987,62988],{"class":168},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[162,62990,62991],{"class":164,"line":35927},[162,62992,62993],{"class":168},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[162,62995,62996],{"class":164,"line":35933},[162,62997,62998],{"class":168},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[162,63000,63001],{"class":164,"line":35942},[162,63002,63003],{"class":168},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[162,63005,63006],{"class":164,"line":35948},[162,63007,63008],{"class":168},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[162,63010,63011],{"class":164,"line":35954},[162,63012,63013],{"class":168},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[162,63015,63016],{"class":164,"line":35963},[162,63017,63018],{"class":168},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[162,63020,63021],{"class":164,"line":35969},[162,63022,56179],{"class":168},[162,63024,63025],{"class":164,"line":35980},[162,63026,63027],{"class":168},"    \u002F\u002F 获取元素\n",[162,63029,63030],{"class":164,"line":35986},[162,63031,63032],{"class":168},"    const img = document.querySelector('.slider-wrapper img')\n",[162,63034,63035],{"class":164,"line":36005},[162,63036,63037],{"class":168},"    const p = document.querySelector('.slider-footer p')\n",[162,63039,63040],{"class":164,"line":36011},[162,63041,63042],{"class":168},"    const footer = document.querySelector('.slider-footer')\n",[162,63044,63045],{"class":164,"line":36022},[162,63046,63047],{"class":168},"    \u002F\u002F 1. 右按钮业务\n",[162,63049,63050],{"class":164,"line":36028},[162,63051,63052],{"class":168},"    \u002F\u002F 1.1 获取右侧按钮 \n",[162,63054,63055],{"class":164,"line":36048},[162,63056,63057],{"class":168},"    const next = document.querySelector('.next')\n",[162,63059,63060],{"class":164,"line":36064},[162,63061,63062],{"class":168},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[162,63064,63065],{"class":164,"line":36070},[162,63066,63067],{"class":168},"    \u002F\u002F 1.2 注册点击事件\n",[162,63069,63070],{"class":164,"line":36084},[162,63071,301],{"emptyLinePlaceholder":300},[162,63073,63074],{"class":164,"line":36090},[162,63075,63076],{"class":168},"    next.addEventListener('click', function () {\n",[162,63078,63079],{"class":164,"line":36096},[162,63080,63081],{"class":168},"      \u002F\u002F console.log(11)\n",[162,63083,63084],{"class":164,"line":36107},[162,63085,63086],{"class":168},"      i++\n",[162,63088,63089],{"class":164,"line":36113},[162,63090,63091],{"class":168},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[162,63093,63094],{"class":164,"line":36119},[162,63095,63096],{"class":168},"      \u002F\u002F if (i >= 8) {\n",[162,63098,63099],{"class":164,"line":36129},[162,63100,63101],{"class":168},"      \u002F\u002F   i = 0\n",[162,63103,63104],{"class":164,"line":36135},[162,63105,63106],{"class":168},"      \u002F\u002F }\n",[162,63108,63109],{"class":164,"line":36146},[162,63110,63111],{"class":168},"      i = i >= data.length ? 0 : i\n",[162,63113,63114],{"class":164,"line":36152},[162,63115,63116],{"class":168},"      \u002F\u002F 1.3 得到对应的对象\n",[162,63118,63119],{"class":164,"line":36162},[162,63120,63121],{"class":168},"      \u002F\u002F console.log(data[i])\n",[162,63123,63124],{"class":164,"line":36167},[162,63125,63126],{"class":168},"      \u002F\u002F 调用函数\n",[162,63128,63129],{"class":164,"line":36173},[162,63130,63131],{"class":168},"      toggle()\n",[162,63133,63134],{"class":164,"line":36222},[162,63135,36536],{"class":168},[162,63137,63138],{"class":164,"line":36269},[162,63139,301],{"emptyLinePlaceholder":300},[162,63141,63142],{"class":164,"line":36274},[162,63143,63144],{"class":168},"    \u002F\u002F 2. 左侧按钮业务\n",[162,63146,63147],{"class":164,"line":36280},[162,63148,63149],{"class":168},"    \u002F\u002F 2.1 获取左侧按钮 \n",[162,63151,63152],{"class":164,"line":36299},[162,63153,63154],{"class":168},"    const prev = document.querySelector('.prev')\n",[162,63156,63157],{"class":164,"line":36305},[162,63158,63067],{"class":168},[162,63160,63161],{"class":164,"line":36324},[162,63162,63163],{"class":168},"    prev.addEventListener('click', function () {\n",[162,63165,63166],{"class":164,"line":36330},[162,63167,63168],{"class":168},"      i--\n",[162,63170,63171],{"class":164,"line":36336},[162,63172,63173],{"class":168},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[162,63175,63176],{"class":164,"line":36346},[162,63177,63178],{"class":168},"      \u002F\u002F if (i \u003C 0) {\n",[162,63180,63181],{"class":164,"line":36351},[162,63182,63183],{"class":168},"      \u002F\u002F   i = 7\n",[162,63185,63186],{"class":164,"line":36357},[162,63187,63106],{"class":168},[162,63189,63190],{"class":164,"line":36373},[162,63191,63192],{"class":168},"      i = i \u003C 0 ? data.length - 1 : i\n",[162,63194,63195],{"class":164,"line":36418},[162,63196,63116],{"class":168},[162,63198,63199],{"class":164,"line":36424},[162,63200,63121],{"class":168},[162,63202,63203],{"class":164,"line":36430},[162,63204,63126],{"class":168},[162,63206,63207],{"class":164,"line":36436},[162,63208,63131],{"class":168},[162,63210,63211],{"class":164,"line":36447},[162,63212,36536],{"class":168},[162,63214,63215],{"class":164,"line":36453},[162,63216,301],{"emptyLinePlaceholder":300},[162,63218,63219],{"class":164,"line":36459},[162,63220,63221],{"class":168},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[162,63223,63224],{"class":164,"line":36465},[162,63225,63226],{"class":168},"    function toggle() {\n",[162,63228,63229],{"class":164,"line":36483},[162,63230,63231],{"class":168},"      \u002F\u002F 1.4 渲染对应的数据\n",[162,63233,63234],{"class":164,"line":36497},[162,63235,63236],{"class":168},"      img.src = data[i].url\n",[162,63238,63239],{"class":164,"line":36506},[162,63240,63241],{"class":168},"      p.innerHTML = data[i].title\n",[162,63243,63244],{"class":164,"line":36515},[162,63245,63246],{"class":168},"      footer.style.backgroundColor = data[i].color\n",[162,63248,63249],{"class":164,"line":36524},[162,63250,63251],{"class":168},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[162,63253,63254],{"class":164,"line":36533},[162,63255,63256],{"class":168},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[162,63258,63259],{"class":164,"line":36539},[162,63260,63261],{"class":168},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[162,63263,63264],{"class":164,"line":36545},[162,63265,5305],{"class":168},[162,63267,63268],{"class":164,"line":36553},[162,63269,301],{"emptyLinePlaceholder":300},[162,63271,63272],{"class":164,"line":36558},[162,63273,63274],{"class":168},"    \u002F\u002F 3. 自动播放模块\n",[162,63276,63277],{"class":164,"line":36564},[162,63278,63279],{"class":168},"    let timerId = setInterval(function () {\n",[162,63281,63282],{"class":164,"line":36575},[162,63283,63284],{"class":168},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[162,63286,63287],{"class":164,"line":36581},[162,63288,63289],{"class":168},"      next.click()\n",[162,63291,63292],{"class":164,"line":36601},[162,63293,63294],{"class":168},"    }, 1000)\n",[162,63296,63297],{"class":164,"line":36607},[162,63298,301],{"emptyLinePlaceholder":300},[162,63300,63301],{"class":164,"line":36613},[162,63302,63303],{"class":168},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[162,63305,63306],{"class":164,"line":36619},[162,63307,63308],{"class":168},"    const slider = document.querySelector('.slider')\n",[162,63310,63311],{"class":164,"line":36636},[162,63312,63313],{"class":168},"    \u002F\u002F 注册事件\n",[162,63315,63316],{"class":164,"line":36642},[162,63317,63318],{"class":168},"    slider.addEventListener('mouseenter', function () {\n",[162,63320,63321],{"class":164,"line":36648},[162,63322,63323],{"class":168},"      \u002F\u002F 停止定时器\n",[162,63325,63326],{"class":164,"line":36654},[162,63327,63328],{"class":168},"      clearInterval(timerId)\n",[162,63330,63331],{"class":164,"line":36660},[162,63332,36536],{"class":168},[162,63334,63335],{"class":164,"line":36666},[162,63336,301],{"emptyLinePlaceholder":300},[162,63338,63339],{"class":164,"line":36693},[162,63340,63341],{"class":168},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[162,63343,63344],{"class":164,"line":36717},[162,63345,63313],{"class":168},[162,63347,63348],{"class":164,"line":36723},[162,63349,63350],{"class":168},"    slider.addEventListener('mouseleave', function () {\n",[162,63352,63353],{"class":164,"line":36729},[162,63354,63323],{"class":168},[162,63356,63357],{"class":164,"line":36735},[162,63358,63359],{"class":168},"      if (timerId) clearInterval(timerId)\n",[162,63361,63362],{"class":164,"line":36746},[162,63363,63364],{"class":168},"      \u002F\u002F 开启定时器\n",[162,63366,63367],{"class":164,"line":36757},[162,63368,63369],{"class":168},"      timerId = setInterval(function () {\n",[162,63371,63372],{"class":164,"line":36763},[162,63373,63374],{"class":168},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[162,63376,63377],{"class":164,"line":36780},[162,63378,63379],{"class":168},"        next.click()\n",[162,63381,63382],{"class":164,"line":36803},[162,63383,63384],{"class":168},"      }, 1000)\n",[162,63386,63387],{"class":164,"line":36826},[162,63388,36536],{"class":168},[162,63390,63391,63393,63395],{"class":164,"line":36832},[162,63392,55487],{"class":168},[162,63394,54885],{"class":54373},[162,63396,54380],{"class":168},[162,63398,63399,63401,63403],{"class":164,"line":36837},[162,63400,54857],{"class":168},[162,63402,54872],{"class":54373},[162,63404,54380],{"class":168},[162,63406,63407],{"class":164,"line":36846},[162,63408,301],{"emptyLinePlaceholder":300},[162,63410,63411,63413,63415],{"class":164,"line":36856},[162,63412,54857],{"class":168},[162,63414,53708],{"class":54373},[162,63416,54380],{"class":168},[25089,63418,63420],{"id":63419},"_3252-焦点事件","3.2.5.2 焦点事件",[19,63422,63423],{},"小米搜索框案例：",[153,63425,63427],{"className":53706,"code":63426,"language":53708,"meta":158,"style":158},"\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",[71,63428,63429,63439,63453,63457,63465,63479,63499,63519,63531,63539,63545,63555,63565,63577,63581,63585,63592,63596,63607,63611,63615,63622,63633,63646,63660,63664,63668,63676,63688,63700,63714,63727,63740,63758,63769,63773,63777,63786,63803,63807,63811,63818,63828,63838,63849,63862,63874,63890,63901,63913,63917,63921,63929,63940,63957,63969,63981,63992,63996,64000,64011,64022,64026,64034,64038,64046,64050,64058,64073,64096,64111,64142,64169,64196,64223,64250,64277,64304,64313,64321,64329,64334,64354,64374,64379,64384,64402,64407,64417,64422,64436,64441,64446,64463,64472,64484,64488,64496,64504,64508],{"__ignoreMap":158},[162,63430,63431,63433,63435,63437],{"class":164,"line":165},[162,63432,54370],{"class":168},[162,63434,54374],{"class":54373},[162,63436,54377],{"class":5082},[162,63438,54380],{"class":168},[162,63440,63441,63443,63445,63447,63449,63451],{"class":164,"line":197},[162,63442,4187],{"class":168},[162,63444,53708],{"class":54373},[162,63446,54389],{"class":5082},[162,63448,173],{"class":168},[162,63450,54394],{"class":179},[162,63452,54380],{"class":168},[162,63454,63455],{"class":164,"line":228},[162,63456,301],{"emptyLinePlaceholder":300},[162,63458,63459,63461,63463],{"class":164,"line":252},[162,63460,4187],{"class":168},[162,63462,54407],{"class":54373},[162,63464,54380],{"class":168},[162,63466,63467,63469,63471,63473,63475,63477],{"class":164,"line":328},[162,63468,54414],{"class":168},[162,63470,54417],{"class":54373},[162,63472,54420],{"class":5082},[162,63474,173],{"class":168},[162,63476,54425],{"class":179},[162,63478,54380],{"class":168},[162,63480,63481,63483,63485,63487,63489,63491,63493,63495,63497],{"class":164,"line":466},[162,63482,54414],{"class":168},[162,63484,54417],{"class":54373},[162,63486,54436],{"class":5082},[162,63488,173],{"class":168},[162,63490,54441],{"class":179},[162,63492,54444],{"class":5082},[162,63494,173],{"class":168},[162,63496,54449],{"class":179},[162,63498,54380],{"class":168},[162,63500,63501,63503,63505,63507,63509,63511,63513,63515,63517],{"class":164,"line":471},[162,63502,54414],{"class":168},[162,63504,54417],{"class":54373},[162,63506,18013],{"class":5082},[162,63508,173],{"class":168},[162,63510,54464],{"class":179},[162,63512,54444],{"class":5082},[162,63514,173],{"class":168},[162,63516,54471],{"class":179},[162,63518,54380],{"class":168},[162,63520,63521,63523,63525,63527,63529],{"class":164,"line":687},[162,63522,54414],{"class":168},[162,63524,54480],{"class":54373},[162,63526,54483],{"class":168},[162,63528,54480],{"class":54373},[162,63530,54380],{"class":168},[162,63532,63533,63535,63537],{"class":164,"line":692},[162,63534,54414],{"class":168},[162,63536,3219],{"class":54373},[162,63538,54380],{"class":168},[162,63540,63541,63543],{"class":164,"line":698},[162,63542,54500],{"class":54373},[162,63544,1722],{"class":168},[162,63546,63547,63549,63551,63553],{"class":164,"line":2955},[162,63548,54507],{"class":207},[162,63550,1730],{"class":168},[162,63552,312],{"class":207},[162,63554,4433],{"class":168},[162,63556,63557,63559,63561,63563],{"class":164,"line":2960},[162,63558,54518],{"class":207},[162,63560,1730],{"class":168},[162,63562,312],{"class":207},[162,63564,4433],{"class":168},[162,63566,63567,63570,63572,63575],{"class":164,"line":2971},[162,63568,63569],{"class":207},"            box-sizing",[162,63571,1730],{"class":168},[162,63573,63574],{"class":207},"border-box",[162,63576,4433],{"class":168},[162,63578,63579],{"class":164,"line":2984},[162,63580,5646],{"class":168},[162,63582,63583],{"class":164,"line":2989},[162,63584,301],{"emptyLinePlaceholder":300},[162,63586,63587,63590],{"class":164,"line":3011},[162,63588,63589],{"class":54373},"        ul",[162,63591,1722],{"class":168},[162,63593,63594],{"class":164,"line":3022},[162,63595,301],{"emptyLinePlaceholder":300},[162,63597,63598,63601,63603,63605],{"class":164,"line":3027},[162,63599,63600],{"class":207},"            list-style",[162,63602,1730],{"class":168},[162,63604,57807],{"class":207},[162,63606,4433],{"class":168},[162,63608,63609],{"class":164,"line":3046},[162,63610,5646],{"class":168},[162,63612,63613],{"class":164,"line":3052},[162,63614,301],{"emptyLinePlaceholder":300},[162,63616,63617,63620],{"class":164,"line":3057},[162,63618,63619],{"class":5082},"        .mi",[162,63621,1722],{"class":168},[162,63623,63624,63627,63629,63631],{"class":164,"line":3072},[162,63625,63626],{"class":207},"            position",[162,63628,1730],{"class":168},[162,63630,57834],{"class":207},[162,63632,4433],{"class":168},[162,63634,63635,63637,63639,63642,63644],{"class":164,"line":3077},[162,63636,54556],{"class":207},[162,63638,1730],{"class":168},[162,63640,63641],{"class":207},"223",[162,63643,54564],{"class":172},[162,63645,4433],{"class":168},[162,63647,63648,63650,63652,63654,63656,63658],{"class":164,"line":3100},[162,63649,54507],{"class":207},[162,63651,1730],{"class":168},[162,63653,3608],{"class":207},[162,63655,54564],{"class":172},[162,63657,54628],{"class":207},[162,63659,4433],{"class":168},[162,63661,63662],{"class":164,"line":3140},[162,63663,5646],{"class":168},[162,63665,63666],{"class":164,"line":4878},[162,63667,301],{"emptyLinePlaceholder":300},[162,63669,63670,63672,63674],{"class":164,"line":4883},[162,63671,63619],{"class":5082},[162,63673,2257],{"class":54373},[162,63675,1722],{"class":168},[162,63677,63678,63680,63682,63684,63686],{"class":164,"line":4897},[162,63679,54556],{"class":207},[162,63681,1730],{"class":168},[162,63683,63641],{"class":207},[162,63685,54564],{"class":172},[162,63687,4433],{"class":168},[162,63689,63690,63692,63694,63696,63698],{"class":164,"line":4902},[162,63691,54571],{"class":207},[162,63693,1730],{"class":168},[162,63695,3894],{"class":207},[162,63697,54564],{"class":172},[162,63699,4433],{"class":168},[162,63701,63702,63704,63706,63708,63710,63712],{"class":164,"line":5694},[162,63703,54518],{"class":207},[162,63705,1730],{"class":168},[162,63707,312],{"class":207},[162,63709,5156],{"class":207},[162,63711,54564],{"class":172},[162,63713,4433],{"class":168},[162,63715,63716,63719,63721,63723,63725],{"class":164,"line":5708},[162,63717,63718],{"class":207},"            font-size",[162,63720,1730],{"class":168},[162,63722,3838],{"class":207},[162,63724,54564],{"class":172},[162,63726,4433],{"class":168},[162,63728,63729,63732,63734,63736,63738],{"class":164,"line":5716},[162,63730,63731],{"class":207},"            line-height",[162,63733,1730],{"class":168},[162,63735,3894],{"class":207},[162,63737,54564],{"class":172},[162,63739,4433],{"class":168},[162,63741,63742,63745,63747,63749,63751,63753,63756],{"class":164,"line":5721},[162,63743,63744],{"class":207},"            border",[162,63746,1730],{"class":168},[162,63748,208],{"class":207},[162,63750,54564],{"class":172},[162,63752,54593],{"class":207},[162,63754,63755],{"class":207}," #e0e0e0",[162,63757,4433],{"class":168},[162,63759,63760,63763,63765,63767],{"class":164,"line":5727},[162,63761,63762],{"class":207},"            outline",[162,63764,1730],{"class":168},[162,63766,57807],{"class":207},[162,63768,4433],{"class":168},[162,63770,63771],{"class":164,"line":5733},[162,63772,5646],{"class":168},[162,63774,63775],{"class":164,"line":5738},[162,63776,301],{"emptyLinePlaceholder":300},[162,63778,63779,63781,63784],{"class":164,"line":11052},[162,63780,63619],{"class":5082},[162,63782,63783],{"class":5082}," .search",[162,63785,1722],{"class":168},[162,63787,63788,63790,63792,63794,63796,63798,63801],{"class":164,"line":11076},[162,63789,63744],{"class":207},[162,63791,1730],{"class":168},[162,63793,208],{"class":207},[162,63795,54564],{"class":172},[162,63797,54593],{"class":207},[162,63799,63800],{"class":207}," #ff6700",[162,63802,4433],{"class":168},[162,63804,63805],{"class":164,"line":11081},[162,63806,5646],{"class":168},[162,63808,63809],{"class":164,"line":11087},[162,63810,301],{"emptyLinePlaceholder":300},[162,63812,63813,63816],{"class":164,"line":11114},[162,63814,63815],{"class":5082},"        .result-list",[162,63817,1722],{"class":168},[162,63819,63820,63822,63824,63826],{"class":164,"line":11119},[162,63821,54544],{"class":207},[162,63823,1730],{"class":168},[162,63825,57807],{"class":207},[162,63827,4433],{"class":168},[162,63829,63830,63832,63834,63836],{"class":164,"line":11125},[162,63831,63626],{"class":207},[162,63833,1730],{"class":168},[162,63835,57901],{"class":207},[162,63837,4433],{"class":168},[162,63839,63840,63843,63845,63847],{"class":164,"line":11137},[162,63841,63842],{"class":207},"            left",[162,63844,1730],{"class":168},[162,63846,312],{"class":207},[162,63848,4433],{"class":168},[162,63850,63851,63854,63856,63858,63860],{"class":164,"line":11149},[162,63852,63853],{"class":207},"            top",[162,63855,1730],{"class":168},[162,63857,3894],{"class":207},[162,63859,54564],{"class":172},[162,63861,4433],{"class":168},[162,63863,63864,63866,63868,63870,63872],{"class":164,"line":11161},[162,63865,54556],{"class":207},[162,63867,1730],{"class":168},[162,63869,63641],{"class":207},[162,63871,54564],{"class":172},[162,63873,4433],{"class":168},[162,63875,63876,63878,63880,63882,63884,63886,63888],{"class":164,"line":12816},[162,63877,63744],{"class":207},[162,63879,1730],{"class":168},[162,63881,208],{"class":207},[162,63883,54564],{"class":172},[162,63885,54593],{"class":207},[162,63887,63800],{"class":207},[162,63889,4433],{"class":168},[162,63891,63892,63895,63897,63899],{"class":164,"line":12841},[162,63893,63894],{"class":207},"            border-top",[162,63896,1730],{"class":168},[162,63898,312],{"class":207},[162,63900,4433],{"class":168},[162,63902,63903,63906,63908,63911],{"class":164,"line":12864},[162,63904,63905],{"class":207},"            background",[162,63907,1730],{"class":168},[162,63909,63910],{"class":207},"#fff",[162,63912,4433],{"class":168},[162,63914,63915],{"class":164,"line":12888},[162,63916,5646],{"class":168},[162,63918,63919],{"class":164,"line":12893},[162,63920,301],{"emptyLinePlaceholder":300},[162,63922,63923,63925,63927],{"class":164,"line":12898},[162,63924,63815],{"class":5082},[162,63926,4538],{"class":54373},[162,63928,1722],{"class":168},[162,63930,63931,63933,63935,63938],{"class":164,"line":12903},[162,63932,54544],{"class":207},[162,63934,1730],{"class":168},[162,63936,63937],{"class":207},"block",[162,63939,4433],{"class":168},[162,63941,63942,63944,63946,63948,63950,63953,63955],{"class":164,"line":12912},[162,63943,54518],{"class":207},[162,63945,1730],{"class":168},[162,63947,1314],{"class":207},[162,63949,54564],{"class":172},[162,63951,63952],{"class":207}," 15",[162,63954,54564],{"class":172},[162,63956,4433],{"class":168},[162,63958,63959,63961,63963,63965,63967],{"class":164,"line":12917},[162,63960,63718],{"class":207},[162,63962,1730],{"class":168},[162,63964,3788],{"class":207},[162,63966,54564],{"class":172},[162,63968,4433],{"class":168},[162,63970,63971,63974,63976,63979],{"class":164,"line":12923},[162,63972,63973],{"class":207},"            color",[162,63975,1730],{"class":168},[162,63977,63978],{"class":207},"#424242",[162,63980,4433],{"class":168},[162,63982,63983,63986,63988,63990],{"class":164,"line":12944},[162,63984,63985],{"class":207},"            text-decoration",[162,63987,1730],{"class":168},[162,63989,57807],{"class":207},[162,63991,4433],{"class":168},[162,63993,63994],{"class":164,"line":12950},[162,63995,5646],{"class":168},[162,63997,63998],{"class":164,"line":12964},[162,63999,301],{"emptyLinePlaceholder":300},[162,64001,64002,64004,64006,64009],{"class":164,"line":12970},[162,64003,63815],{"class":5082},[162,64005,4538],{"class":54373},[162,64007,64008],{"class":5082},":hover",[162,64010,1722],{"class":168},[162,64012,64013,64015,64017,64020],{"class":164,"line":12997},[162,64014,54712],{"class":207},[162,64016,1730],{"class":168},[162,64018,64019],{"class":207},"#eee",[162,64021,4433],{"class":168},[162,64023,64024],{"class":164,"line":13006},[162,64025,5646],{"class":168},[162,64027,64028,64030,64032],{"class":164,"line":13012},[162,64029,54848],{"class":168},[162,64031,3219],{"class":54373},[162,64033,54380],{"class":168},[162,64035,64036],{"class":164,"line":13020},[162,64037,301],{"emptyLinePlaceholder":300},[162,64039,64040,64042,64044],{"class":164,"line":13025},[162,64041,54857],{"class":168},[162,64043,54407],{"class":54373},[162,64045,54380],{"class":168},[162,64047,64048],{"class":164,"line":19695},[162,64049,301],{"emptyLinePlaceholder":300},[162,64051,64052,64054,64056],{"class":164,"line":19701},[162,64053,4187],{"class":168},[162,64055,54872],{"class":54373},[162,64057,54380],{"class":168},[162,64059,64060,64062,64064,64066,64068,64071],{"class":164,"line":19724},[162,64061,54414],{"class":168},[162,64063,54683],{"class":54373},[162,64065,56556],{"class":5082},[162,64067,173],{"class":168},[162,64069,64070],{"class":179},"\"mi\"",[162,64072,54380],{"class":168},[162,64074,64075,64077,64079,64081,64083,64086,64089,64091,64094],{"class":164,"line":19730},[162,64076,58372],{"class":168},[162,64078,56891],{"class":54373},[162,64080,56894],{"class":5082},[162,64082,173],{"class":168},[162,64084,64085],{"class":179},"\"search\"",[162,64087,64088],{"class":5082}," placeholder",[162,64090,173],{"class":168},[162,64092,64093],{"class":179},"\"小米笔记本\"",[162,64095,54380],{"class":168},[162,64097,64098,64100,64102,64104,64106,64109],{"class":164,"line":19753},[162,64099,58372],{"class":168},[162,64101,4279],{"class":54373},[162,64103,56556],{"class":5082},[162,64105,173],{"class":168},[162,64107,64108],{"class":179},"\"result-list\"",[162,64110,54380],{"class":168},[162,64112,64113,64116,64118,64121,64123,64126,64128,64131,64134,64136,64138,64140],{"class":164,"line":19767},[162,64114,64115],{"class":168},"            \u003C",[162,64117,1455],{"class":54373},[162,64119,64120],{"class":168},">\u003C",[162,64122,3538],{"class":54373},[162,64124,64125],{"class":5082}," href",[162,64127,173],{"class":168},[162,64129,64130],{"class":179},"\"#\"",[162,64132,64133],{"class":168},">全部商品\u003C\u002F",[162,64135,3538],{"class":54373},[162,64137,58384],{"class":168},[162,64139,1455],{"class":54373},[162,64141,54380],{"class":168},[162,64143,64144,64146,64148,64150,64152,64154,64156,64158,64161,64163,64165,64167],{"class":164,"line":19787},[162,64145,64115],{"class":168},[162,64147,1455],{"class":54373},[162,64149,64120],{"class":168},[162,64151,3538],{"class":54373},[162,64153,64125],{"class":5082},[162,64155,173],{"class":168},[162,64157,64130],{"class":179},[162,64159,64160],{"class":168},">小米11\u003C\u002F",[162,64162,3538],{"class":54373},[162,64164,58384],{"class":168},[162,64166,1455],{"class":54373},[162,64168,54380],{"class":168},[162,64170,64171,64173,64175,64177,64179,64181,64183,64185,64188,64190,64192,64194],{"class":164,"line":19793},[162,64172,64115],{"class":168},[162,64174,1455],{"class":54373},[162,64176,64120],{"class":168},[162,64178,3538],{"class":54373},[162,64180,64125],{"class":5082},[162,64182,173],{"class":168},[162,64184,64130],{"class":179},[162,64186,64187],{"class":168},">小米10S\u003C\u002F",[162,64189,3538],{"class":54373},[162,64191,58384],{"class":168},[162,64193,1455],{"class":54373},[162,64195,54380],{"class":168},[162,64197,64198,64200,64202,64204,64206,64208,64210,64212,64215,64217,64219,64221],{"class":164,"line":19804},[162,64199,64115],{"class":168},[162,64201,1455],{"class":54373},[162,64203,64120],{"class":168},[162,64205,3538],{"class":54373},[162,64207,64125],{"class":5082},[162,64209,173],{"class":168},[162,64211,64130],{"class":179},[162,64213,64214],{"class":168},">小米笔记本\u003C\u002F",[162,64216,3538],{"class":54373},[162,64218,58384],{"class":168},[162,64220,1455],{"class":54373},[162,64222,54380],{"class":168},[162,64224,64225,64227,64229,64231,64233,64235,64237,64239,64242,64244,64246,64248],{"class":164,"line":19827},[162,64226,64115],{"class":168},[162,64228,1455],{"class":54373},[162,64230,64120],{"class":168},[162,64232,3538],{"class":54373},[162,64234,64125],{"class":5082},[162,64236,173],{"class":168},[162,64238,64130],{"class":179},[162,64240,64241],{"class":168},">小米手机\u003C\u002F",[162,64243,3538],{"class":54373},[162,64245,58384],{"class":168},[162,64247,1455],{"class":54373},[162,64249,54380],{"class":168},[162,64251,64252,64254,64256,64258,64260,64262,64264,64266,64269,64271,64273,64275],{"class":164,"line":19849},[162,64253,64115],{"class":168},[162,64255,1455],{"class":54373},[162,64257,64120],{"class":168},[162,64259,3538],{"class":54373},[162,64261,64125],{"class":5082},[162,64263,173],{"class":168},[162,64265,64130],{"class":179},[162,64267,64268],{"class":168},">黑鲨4\u003C\u002F",[162,64270,3538],{"class":54373},[162,64272,58384],{"class":168},[162,64274,1455],{"class":54373},[162,64276,54380],{"class":168},[162,64278,64279,64281,64283,64285,64287,64289,64291,64293,64296,64298,64300,64302],{"class":164,"line":19854},[162,64280,64115],{"class":168},[162,64282,1455],{"class":54373},[162,64284,64120],{"class":168},[162,64286,3538],{"class":54373},[162,64288,64125],{"class":5082},[162,64290,173],{"class":168},[162,64292,64130],{"class":179},[162,64294,64295],{"class":168},">空调\u003C\u002F",[162,64297,3538],{"class":54373},[162,64299,58384],{"class":168},[162,64301,1455],{"class":54373},[162,64303,54380],{"class":168},[162,64305,64306,64309,64311],{"class":164,"line":19860},[162,64307,64308],{"class":168},"        \u003C\u002F",[162,64310,4279],{"class":54373},[162,64312,54380],{"class":168},[162,64314,64315,64317,64319],{"class":164,"line":19874},[162,64316,54848],{"class":168},[162,64318,54683],{"class":54373},[162,64320,54380],{"class":168},[162,64322,64323,64325,64327],{"class":164,"line":19887},[162,64324,54414],{"class":168},[162,64326,54885],{"class":54373},[162,64328,54380],{"class":168},[162,64330,64331],{"class":164,"line":19892},[162,64332,64333],{"class":361},"        \u002F\u002F 1. 获取元素\n",[162,64335,64336,64339,64341,64343,64345,64347,64349,64352],{"class":164,"line":19906},[162,64337,64338],{"class":172},"        const",[162,64340,2257],{"class":207},[162,64342,16659],{"class":172},[162,64344,57466],{"class":168},[162,64346,57469],{"class":5082},[162,64348,604],{"class":168},[162,64350,64351],{"class":179},"'[type=search]'",[162,64353,434],{"class":168},[162,64355,64356,64358,64361,64363,64365,64367,64369,64372],{"class":164,"line":19911},[162,64357,64338],{"class":172},[162,64359,64360],{"class":207}," ul",[162,64362,16659],{"class":172},[162,64364,57466],{"class":168},[162,64366,57469],{"class":5082},[162,64368,604],{"class":168},[162,64370,64371],{"class":179},"'.result-list'",[162,64373,434],{"class":168},[162,64375,64376],{"class":164,"line":19917},[162,64377,64378],{"class":361},"        \u002F\u002F console.log(input)\n",[162,64380,64381],{"class":164,"line":19922},[162,64382,64383],{"class":361},"        \u002F\u002F 2. 监听事件 获得焦点\n",[162,64385,64386,64389,64391,64393,64396,64398,64400],{"class":164,"line":19936},[162,64387,64388],{"class":168},"        input.",[162,64390,60882],{"class":5082},[162,64392,604],{"class":168},[162,64394,64395],{"class":179},"'focus'",[162,64397,183],{"class":168},[162,64399,57519],{"class":172},[162,64401,57522],{"class":168},[162,64403,64404],{"class":164,"line":19941},[162,64405,64406],{"class":361},"            \u002F\u002F ul显示\n",[162,64408,64409,64412,64414],{"class":164,"line":19946},[162,64410,64411],{"class":168},"            ul.style.display ",[162,64413,173],{"class":172},[162,64415,64416],{"class":179}," 'block'\n",[162,64418,64419],{"class":164,"line":19960},[162,64420,64421],{"class":361},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[162,64423,64424,64427,64429,64431,64434],{"class":164,"line":19972},[162,64425,64426],{"class":168},"            input.classList.",[162,64428,8441],{"class":5082},[162,64430,604],{"class":168},[162,64432,64433],{"class":179},"'search'",[162,64435,434],{"class":168},[162,64437,64438],{"class":164,"line":19977},[162,64439,64440],{"class":168},"        })\n",[162,64442,64443],{"class":164,"line":19990},[162,64444,64445],{"class":361},"        \u002F\u002F 3. 监听事件 失去焦点\n",[162,64447,64448,64450,64452,64454,64457,64459,64461],{"class":164,"line":19995},[162,64449,64388],{"class":168},[162,64451,60882],{"class":5082},[162,64453,604],{"class":168},[162,64455,64456],{"class":179},"'blur'",[162,64458,183],{"class":168},[162,64460,57519],{"class":172},[162,64462,57522],{"class":168},[162,64464,64465,64467,64469],{"class":164,"line":20000},[162,64466,64411],{"class":168},[162,64468,173],{"class":172},[162,64470,64471],{"class":179}," 'none'\n",[162,64473,64474,64476,64478,64480,64482],{"class":164,"line":20005},[162,64475,64426],{"class":168},[162,64477,60075],{"class":5082},[162,64479,604],{"class":168},[162,64481,64433],{"class":179},[162,64483,434],{"class":168},[162,64485,64486],{"class":164,"line":20018},[162,64487,64440],{"class":168},[162,64489,64490,64492,64494],{"class":164,"line":20023},[162,64491,54848],{"class":168},[162,64493,54885],{"class":54373},[162,64495,54380],{"class":168},[162,64497,64498,64500,64502],{"class":164,"line":35709},[162,64499,54857],{"class":168},[162,64501,54872],{"class":54373},[162,64503,54380],{"class":168},[162,64505,64506],{"class":164,"line":35715},[162,64507,301],{"emptyLinePlaceholder":300},[162,64509,64510,64512,64514],{"class":164,"line":35721},[162,64511,54857],{"class":168},[162,64513,53708],{"class":54373},[162,64515,54380],{"class":168},[25089,64517,64519],{"id":64518},"_3253-键盘事件","3.2.5.3 键盘事件",[19,64521,64522],{},"评论字数统计案例",[19,64524,64525],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,64527,64528],{},"牢记focus伪类选择器",[54417,64530],{"charSet":64531},"UTF-8",[54417,64533],{"name":64534,"content":64535},"viewport","width=device-width, initial-scale=1.0",[54480,64537,64538],{},"Document",[3219,64540,64541],{},"\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",[56891,64543],{"type":8295},[4279,64545,64546,64549],{},[1455,64547,64548],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[1455,64550,64551],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[153,64553,64555],{"className":53706,"code":64554,"language":53708,"meta":158,"style":158},"\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",[71,64556,64557,64567,64581,64585,64593,64607,64627,64647,64660,64668,64675,64688,64702,64712,64722,64726,64730,64737,64749,64761,64773,64785,64814,64827,64831,64835,64844,64855,64867,64878,64889,64901,64912,64924,64940,64952,64956,64960,64971,64982,64992,65004,65008,65012,65020,65031,65041,65052,65064,65077,65089,65101,65105,65109,65118,65130,65141,65154,65165,65179,65183,65187,65194,65206,65218,65228,65232,65236,65245,65257,65267,65271,65275,65286,65296,65315,65328,65332,65336,65346,65356,65360,65364,65375,65386,65398,65410,65414,65418,65429,65440,65454,65458,65462,65473,65483,65495,65499,65507,65515,65519,65527,65542,65561,65601,65614,65622,65636,65656,65664,65679,65702,65720,65735,65754,65774,65794,65802,65810,65818,65826,65846,65866,65871,65888,65897,65901,65906,65922,65930,65934,65939,65956,65961,65986,65990,65994,65999,66004,66012,66020,66024],{"__ignoreMap":158},[162,64558,64559,64561,64563,64565],{"class":164,"line":165},[162,64560,54370],{"class":168},[162,64562,54374],{"class":54373},[162,64564,54377],{"class":5082},[162,64566,54380],{"class":168},[162,64568,64569,64571,64573,64575,64577,64579],{"class":164,"line":197},[162,64570,4187],{"class":168},[162,64572,53708],{"class":54373},[162,64574,54389],{"class":5082},[162,64576,173],{"class":168},[162,64578,54394],{"class":179},[162,64580,54380],{"class":168},[162,64582,64583],{"class":164,"line":228},[162,64584,301],{"emptyLinePlaceholder":300},[162,64586,64587,64589,64591],{"class":164,"line":252},[162,64588,4187],{"class":168},[162,64590,54407],{"class":54373},[162,64592,54380],{"class":168},[162,64594,64595,64597,64599,64601,64603,64605],{"class":164,"line":328},[162,64596,55215],{"class":168},[162,64598,54417],{"class":54373},[162,64600,54420],{"class":5082},[162,64602,173],{"class":168},[162,64604,54425],{"class":179},[162,64606,54380],{"class":168},[162,64608,64609,64611,64613,64615,64617,64619,64621,64623,64625],{"class":164,"line":466},[162,64610,55215],{"class":168},[162,64612,54417],{"class":54373},[162,64614,54436],{"class":5082},[162,64616,173],{"class":168},[162,64618,54441],{"class":179},[162,64620,54444],{"class":5082},[162,64622,173],{"class":168},[162,64624,54449],{"class":179},[162,64626,54380],{"class":168},[162,64628,64629,64631,64633,64635,64637,64639,64641,64643,64645],{"class":164,"line":471},[162,64630,55215],{"class":168},[162,64632,54417],{"class":54373},[162,64634,18013],{"class":5082},[162,64636,173],{"class":168},[162,64638,54464],{"class":179},[162,64640,54444],{"class":5082},[162,64642,173],{"class":168},[162,64644,54471],{"class":179},[162,64646,54380],{"class":168},[162,64648,64649,64651,64653,64656,64658],{"class":164,"line":687},[162,64650,55215],{"class":168},[162,64652,54480],{"class":54373},[162,64654,64655],{"class":168},">评论回车发布\u003C\u002F",[162,64657,54480],{"class":54373},[162,64659,54380],{"class":168},[162,64661,64662,64664,64666],{"class":164,"line":692},[162,64663,55215],{"class":168},[162,64665,3219],{"class":54373},[162,64667,54380],{"class":168},[162,64669,64670,64673],{"class":164,"line":698},[162,64671,64672],{"class":5082},"    .wrapper",[162,64674,1722],{"class":168},[162,64676,64677,64680,64682,64684,64686],{"class":164,"line":2955},[162,64678,64679],{"class":207},"      min-width",[162,64681,1730],{"class":168},[162,64683,7100],{"class":207},[162,64685,54564],{"class":172},[162,64687,4433],{"class":168},[162,64689,64690,64693,64695,64698,64700],{"class":164,"line":2960},[162,64691,64692],{"class":207},"      max-width",[162,64694,1730],{"class":168},[162,64696,64697],{"class":207},"800",[162,64699,54564],{"class":172},[162,64701,4433],{"class":168},[162,64703,64704,64706,64708,64710],{"class":164,"line":2971},[162,64705,58079],{"class":207},[162,64707,1730],{"class":168},[162,64709,54549],{"class":207},[162,64711,4433],{"class":168},[162,64713,64714,64716,64718,64720],{"class":164,"line":2984},[162,64715,58090],{"class":207},[162,64717,1730],{"class":168},[162,64719,54652],{"class":207},[162,64721,4433],{"class":168},[162,64723,64724],{"class":164,"line":2989},[162,64725,5305],{"class":168},[162,64727,64728],{"class":164,"line":3011},[162,64729,301],{"emptyLinePlaceholder":300},[162,64731,64732,64735],{"class":164,"line":3022},[162,64733,64734],{"class":5082},"    .avatar",[162,64736,1722],{"class":168},[162,64738,64739,64741,64743,64745,64747],{"class":164,"line":3027},[162,64740,57841],{"class":207},[162,64742,1730],{"class":168},[162,64744,3894],{"class":207},[162,64746,54564],{"class":172},[162,64748,4433],{"class":168},[162,64750,64751,64753,64755,64757,64759],{"class":164,"line":3046},[162,64752,57855],{"class":207},[162,64754,1730],{"class":168},[162,64756,3894],{"class":207},[162,64758,54564],{"class":172},[162,64760,4433],{"class":168},[162,64762,64763,64765,64767,64769,64771],{"class":164,"line":3052},[162,64764,58204],{"class":207},[162,64766,1730],{"class":168},[162,64768,3941],{"class":207},[162,64770,2708],{"class":172},[162,64772,4433],{"class":168},[162,64774,64775,64778,64780,64783],{"class":164,"line":3057},[162,64776,64777],{"class":207},"      overflow",[162,64779,1730],{"class":168},[162,64781,64782],{"class":207},"hidden",[162,64784,4433],{"class":168},[162,64786,64787,64790,64792,64795,64797,64800,64802,64805,64807,64809,64812],{"class":164,"line":3072},[162,64788,64789],{"class":207},"      background",[162,64791,1730],{"class":168},[162,64793,64794],{"class":207},"url",[162,64796,604],{"class":168},[162,64798,64799],{"class":671},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[162,64801,1823],{"class":168},[162,64803,64804],{"class":207},"no-repeat",[162,64806,20235],{"class":207},[162,64808,28070],{"class":168},[162,64810,64811],{"class":207},"cover",[162,64813,4433],{"class":168},[162,64815,64816,64819,64821,64823,64825],{"class":164,"line":3077},[162,64817,64818],{"class":207},"      margin-right",[162,64820,1730],{"class":168},[162,64822,1011],{"class":207},[162,64824,54564],{"class":172},[162,64826,4433],{"class":168},[162,64828,64829],{"class":164,"line":3100},[162,64830,5305],{"class":168},[162,64832,64833],{"class":164,"line":3140},[162,64834,301],{"emptyLinePlaceholder":300},[162,64836,64837,64839,64842],{"class":164,"line":4878},[162,64838,64672],{"class":5082},[162,64840,64841],{"class":54373}," textarea",[162,64843,1722],{"class":168},[162,64845,64846,64849,64851,64853],{"class":164,"line":4883},[162,64847,64848],{"class":207},"      outline",[162,64850,1730],{"class":168},[162,64852,57807],{"class":207},[162,64854,4433],{"class":168},[162,64856,64857,64860,64862,64865],{"class":164,"line":4897},[162,64858,64859],{"class":207},"      border-color",[162,64861,1730],{"class":168},[162,64863,64864],{"class":207},"transparent",[162,64866,4433],{"class":168},[162,64868,64869,64872,64874,64876],{"class":164,"line":4902},[162,64870,64871],{"class":207},"      resize",[162,64873,1730],{"class":168},[162,64875,57807],{"class":207},[162,64877,4433],{"class":168},[162,64879,64880,64882,64884,64887],{"class":164,"line":5694},[162,64881,64789],{"class":207},[162,64883,1730],{"class":168},[162,64885,64886],{"class":207},"#f5f5f5",[162,64888,4433],{"class":168},[162,64890,64891,64893,64895,64897,64899],{"class":164,"line":5708},[162,64892,58204],{"class":207},[162,64894,1730],{"class":168},[162,64896,223],{"class":207},[162,64898,54564],{"class":172},[162,64900,4433],{"class":168},[162,64902,64903,64906,64908,64910],{"class":164,"line":5716},[162,64904,64905],{"class":207},"      flex",[162,64907,1730],{"class":168},[162,64909,208],{"class":207},[162,64911,4433],{"class":168},[162,64913,64914,64916,64918,64920,64922],{"class":164,"line":5721},[162,64915,57765],{"class":207},[162,64917,1730],{"class":168},[162,64919,1006],{"class":207},[162,64921,54564],{"class":172},[162,64923,4433],{"class":168},[162,64925,64926,64929,64931,64933,64936,64938],{"class":164,"line":5727},[162,64927,64928],{"class":207},"      transition",[162,64930,1730],{"class":168},[162,64932,31210],{"class":207},[162,64934,64935],{"class":207}," 0.5",[162,64937,3979],{"class":172},[162,64939,4433],{"class":168},[162,64941,64942,64944,64946,64948,64950],{"class":164,"line":5733},[162,64943,57855],{"class":207},[162,64945,1730],{"class":168},[162,64947,4225],{"class":207},[162,64949,54564],{"class":172},[162,64951,4433],{"class":168},[162,64953,64954],{"class":164,"line":5738},[162,64955,5305],{"class":168},[162,64957,64958],{"class":164,"line":11052},[162,64959,301],{"emptyLinePlaceholder":300},[162,64961,64962,64964,64966,64969],{"class":164,"line":11076},[162,64963,64672],{"class":5082},[162,64965,64841],{"class":54373},[162,64967,64968],{"class":5082},":focus",[162,64970,1722],{"class":168},[162,64972,64973,64975,64977,64980],{"class":164,"line":11081},[162,64974,64859],{"class":207},[162,64976,1730],{"class":168},[162,64978,64979],{"class":207},"#e4e4e4",[162,64981,4433],{"class":168},[162,64983,64984,64986,64988,64990],{"class":164,"line":11087},[162,64985,64789],{"class":207},[162,64987,1730],{"class":168},[162,64989,63910],{"class":207},[162,64991,4433],{"class":168},[162,64993,64994,64996,64998,65000,65002],{"class":164,"line":11114},[162,64995,57855],{"class":207},[162,64997,1730],{"class":168},[162,64999,3941],{"class":207},[162,65001,54564],{"class":172},[162,65003,4433],{"class":168},[162,65005,65006],{"class":164,"line":11119},[162,65007,5305],{"class":168},[162,65009,65010],{"class":164,"line":11125},[162,65011,301],{"emptyLinePlaceholder":300},[162,65013,65014,65016,65018],{"class":164,"line":11137},[162,65015,64672],{"class":5082},[162,65017,60536],{"class":54373},[162,65019,1722],{"class":168},[162,65021,65022,65024,65026,65029],{"class":164,"line":11149},[162,65023,64789],{"class":207},[162,65025,1730],{"class":168},[162,65027,65028],{"class":207},"#00aeec",[162,65030,4433],{"class":168},[162,65032,65033,65035,65037,65039],{"class":164,"line":11161},[162,65034,60485],{"class":207},[162,65036,1730],{"class":168},[162,65038,63910],{"class":207},[162,65040,4433],{"class":168},[162,65042,65043,65046,65048,65050],{"class":164,"line":12816},[162,65044,65045],{"class":207},"      border",[162,65047,1730],{"class":168},[162,65049,57807],{"class":207},[162,65051,4433],{"class":168},[162,65053,65054,65056,65058,65060,65062],{"class":164,"line":12841},[162,65055,58204],{"class":207},[162,65057,1730],{"class":168},[162,65059,223],{"class":207},[162,65061,54564],{"class":172},[162,65063,4433],{"class":168},[162,65065,65066,65069,65071,65073,65075],{"class":164,"line":12864},[162,65067,65068],{"class":207},"      margin-left",[162,65070,1730],{"class":168},[162,65072,1006],{"class":207},[162,65074,54564],{"class":172},[162,65076,4433],{"class":168},[162,65078,65079,65081,65083,65085,65087],{"class":164,"line":12888},[162,65080,57841],{"class":207},[162,65082,1730],{"class":168},[162,65084,3648],{"class":207},[162,65086,54564],{"class":172},[162,65088,4433],{"class":168},[162,65090,65091,65094,65096,65099],{"class":164,"line":12893},[162,65092,65093],{"class":207},"      cursor",[162,65095,1730],{"class":168},[162,65097,65098],{"class":207},"pointer",[162,65100,4433],{"class":168},[162,65102,65103],{"class":164,"line":12898},[162,65104,5305],{"class":168},[162,65106,65107],{"class":164,"line":12903},[162,65108,301],{"emptyLinePlaceholder":300},[162,65110,65111,65113,65116],{"class":164,"line":12912},[162,65112,64672],{"class":5082},[162,65114,65115],{"class":5082}," .total",[162,65117,1722],{"class":168},[162,65119,65120,65122,65124,65126,65128],{"class":164,"line":12917},[162,65121,64818],{"class":207},[162,65123,1730],{"class":168},[162,65125,3899],{"class":207},[162,65127,54564],{"class":172},[162,65129,4433],{"class":168},[162,65131,65132,65134,65136,65139],{"class":164,"line":12923},[162,65133,60485],{"class":207},[162,65135,1730],{"class":168},[162,65137,65138],{"class":207},"#999",[162,65140,4433],{"class":168},[162,65142,65143,65146,65148,65150,65152],{"class":164,"line":12944},[162,65144,65145],{"class":207},"      margin-top",[162,65147,1730],{"class":168},[162,65149,637],{"class":207},[162,65151,54564],{"class":172},[162,65153,4433],{"class":168},[162,65155,65156,65159,65161,65163],{"class":164,"line":12950},[162,65157,65158],{"class":207},"      opacity",[162,65160,1730],{"class":168},[162,65162,312],{"class":207},[162,65164,4433],{"class":168},[162,65166,65167,65169,65171,65173,65175,65177],{"class":164,"line":12964},[162,65168,64928],{"class":207},[162,65170,1730],{"class":168},[162,65172,31210],{"class":207},[162,65174,64935],{"class":207},[162,65176,3979],{"class":172},[162,65178,4433],{"class":168},[162,65180,65181],{"class":164,"line":12970},[162,65182,5305],{"class":168},[162,65184,65185],{"class":164,"line":12997},[162,65186,301],{"emptyLinePlaceholder":300},[162,65188,65189,65192],{"class":164,"line":13006},[162,65190,65191],{"class":5082},"    .list",[162,65193,1722],{"class":168},[162,65195,65196,65198,65200,65202,65204],{"class":164,"line":13012},[162,65197,64679],{"class":207},[162,65199,1730],{"class":168},[162,65201,7100],{"class":207},[162,65203,54564],{"class":172},[162,65205,4433],{"class":168},[162,65207,65208,65210,65212,65214,65216],{"class":164,"line":13020},[162,65209,64692],{"class":207},[162,65211,1730],{"class":168},[162,65213,64697],{"class":207},[162,65215,54564],{"class":172},[162,65217,4433],{"class":168},[162,65219,65220,65222,65224,65226],{"class":164,"line":13025},[162,65221,58079],{"class":207},[162,65223,1730],{"class":168},[162,65225,54549],{"class":207},[162,65227,4433],{"class":168},[162,65229,65230],{"class":164,"line":19695},[162,65231,5305],{"class":168},[162,65233,65234],{"class":164,"line":19701},[162,65235,301],{"emptyLinePlaceholder":300},[162,65237,65238,65240,65243],{"class":164,"line":19724},[162,65239,65191],{"class":5082},[162,65241,65242],{"class":5082}," .item",[162,65244,1722],{"class":168},[162,65246,65247,65249,65251,65253,65255],{"class":164,"line":19730},[162,65248,57841],{"class":207},[162,65250,1730],{"class":168},[162,65252,3608],{"class":207},[162,65254,2708],{"class":172},[162,65256,4433],{"class":168},[162,65258,65259,65261,65263,65265],{"class":164,"line":19753},[162,65260,58079],{"class":207},[162,65262,1730],{"class":168},[162,65264,54549],{"class":207},[162,65266,4433],{"class":168},[162,65268,65269],{"class":164,"line":19767},[162,65270,5305],{"class":168},[162,65272,65273],{"class":164,"line":19787},[162,65274,301],{"emptyLinePlaceholder":300},[162,65276,65277,65279,65281,65284],{"class":164,"line":19793},[162,65278,65191],{"class":5082},[162,65280,65242],{"class":5082},[162,65282,65283],{"class":5082}," .info",[162,65285,1722],{"class":168},[162,65287,65288,65290,65292,65294],{"class":164,"line":19804},[162,65289,64905],{"class":207},[162,65291,1730],{"class":168},[162,65293,208],{"class":207},[162,65295,4433],{"class":168},[162,65297,65298,65301,65303,65305,65307,65310,65313],{"class":164,"line":19827},[162,65299,65300],{"class":207},"      border-bottom",[162,65302,1730],{"class":168},[162,65304,208],{"class":207},[162,65306,54564],{"class":172},[162,65308,65309],{"class":207}," dashed",[162,65311,65312],{"class":207}," #e4e4e4",[162,65314,4433],{"class":168},[162,65316,65317,65320,65322,65324,65326],{"class":164,"line":19849},[162,65318,65319],{"class":207},"      padding-bottom",[162,65321,1730],{"class":168},[162,65323,1006],{"class":207},[162,65325,54564],{"class":172},[162,65327,4433],{"class":168},[162,65329,65330],{"class":164,"line":19854},[162,65331,5305],{"class":168},[162,65333,65334],{"class":164,"line":19860},[162,65335,301],{"emptyLinePlaceholder":300},[162,65337,65338,65340,65342,65344],{"class":164,"line":19874},[162,65339,65191],{"class":5082},[162,65341,65242],{"class":5082},[162,65343,9931],{"class":54373},[162,65345,1722],{"class":168},[162,65347,65348,65350,65352,65354],{"class":164,"line":19887},[162,65349,57776],{"class":207},[162,65351,1730],{"class":168},[162,65353,312],{"class":207},[162,65355,4433],{"class":168},[162,65357,65358],{"class":164,"line":19892},[162,65359,5305],{"class":168},[162,65361,65362],{"class":164,"line":19906},[162,65363,301],{"emptyLinePlaceholder":300},[162,65365,65366,65368,65370,65373],{"class":164,"line":19911},[162,65367,65191],{"class":5082},[162,65369,65242],{"class":5082},[162,65371,65372],{"class":5082}," .name",[162,65374,1722],{"class":168},[162,65376,65377,65379,65381,65384],{"class":164,"line":19917},[162,65378,60485],{"class":207},[162,65380,1730],{"class":168},[162,65382,65383],{"class":207},"#FB7299",[162,65385,4433],{"class":168},[162,65387,65388,65390,65392,65394,65396],{"class":164,"line":19922},[162,65389,57992],{"class":207},[162,65391,1730],{"class":168},[162,65393,3838],{"class":207},[162,65395,54564],{"class":172},[162,65397,4433],{"class":168},[162,65399,65400,65403,65405,65408],{"class":164,"line":19936},[162,65401,65402],{"class":207},"      font-weight",[162,65404,1730],{"class":168},[162,65406,65407],{"class":207},"bold",[162,65409,4433],{"class":168},[162,65411,65412],{"class":164,"line":19941},[162,65413,5305],{"class":168},[162,65415,65416],{"class":164,"line":19946},[162,65417,301],{"emptyLinePlaceholder":300},[162,65419,65420,65422,65424,65427],{"class":164,"line":19960},[162,65421,65191],{"class":5082},[162,65423,65242],{"class":5082},[162,65425,65426],{"class":5082}," .text",[162,65428,1722],{"class":168},[162,65430,65431,65433,65435,65438],{"class":164,"line":19972},[162,65432,60485],{"class":207},[162,65434,1730],{"class":168},[162,65436,65437],{"class":207},"#333",[162,65439,4433],{"class":168},[162,65441,65442,65444,65446,65448,65450,65452],{"class":164,"line":19977},[162,65443,57765],{"class":207},[162,65445,1730],{"class":168},[162,65447,1006],{"class":207},[162,65449,54564],{"class":172},[162,65451,2717],{"class":207},[162,65453,4433],{"class":168},[162,65455,65456],{"class":164,"line":19990},[162,65457,5305],{"class":168},[162,65459,65460],{"class":164,"line":19995},[162,65461,301],{"emptyLinePlaceholder":300},[162,65463,65464,65466,65468,65471],{"class":164,"line":20000},[162,65465,65191],{"class":5082},[162,65467,65242],{"class":5082},[162,65469,65470],{"class":5082}," .time",[162,65472,1722],{"class":168},[162,65474,65475,65477,65479,65481],{"class":164,"line":20005},[162,65476,60485],{"class":207},[162,65478,1730],{"class":168},[162,65480,65138],{"class":207},[162,65482,4433],{"class":168},[162,65484,65485,65487,65489,65491,65493],{"class":164,"line":20018},[162,65486,57992],{"class":207},[162,65488,1730],{"class":168},[162,65490,3788],{"class":207},[162,65492,54564],{"class":172},[162,65494,4433],{"class":168},[162,65496,65497],{"class":164,"line":20023},[162,65498,5305],{"class":168},[162,65500,65501,65503,65505],{"class":164,"line":35709},[162,65502,55487],{"class":168},[162,65504,3219],{"class":54373},[162,65506,54380],{"class":168},[162,65508,65509,65511,65513],{"class":164,"line":35715},[162,65510,54857],{"class":168},[162,65512,54407],{"class":54373},[162,65514,54380],{"class":168},[162,65516,65517],{"class":164,"line":35721},[162,65518,301],{"emptyLinePlaceholder":300},[162,65520,65521,65523,65525],{"class":164,"line":35727},[162,65522,4187],{"class":168},[162,65524,54872],{"class":54373},[162,65526,54380],{"class":168},[162,65528,65529,65531,65533,65535,65537,65540],{"class":164,"line":35733},[162,65530,55215],{"class":168},[162,65532,54683],{"class":54373},[162,65534,56556],{"class":5082},[162,65536,173],{"class":168},[162,65538,65539],{"class":179},"\"wrapper\"",[162,65541,54380],{"class":168},[162,65543,65544,65546,65548,65550,65552,65555,65557,65559],{"class":164,"line":35744},[162,65545,54414],{"class":168},[162,65547,3732],{"class":54373},[162,65549,56556],{"class":5082},[162,65551,173],{"class":168},[162,65553,65554],{"class":179},"\"avatar\"",[162,65556,58384],{"class":168},[162,65558,3732],{"class":54373},[162,65560,54380],{"class":168},[162,65562,65563,65565,65567,65569,65571,65574,65576,65578,65581,65583,65585,65587,65590,65592,65595,65597,65599],{"class":164,"line":35750},[162,65564,54414],{"class":168},[162,65566,57358],{"class":54373},[162,65568,18052],{"class":5082},[162,65570,173],{"class":168},[162,65572,65573],{"class":179},"\"tx\"",[162,65575,64088],{"class":5082},[162,65577,173],{"class":168},[162,65579,65580],{"class":179},"\"发一条友善的评论\"",[162,65582,57381],{"class":5082},[162,65584,173],{"class":168},[162,65586,6815],{"class":179},[162,65588,65589],{"class":5082}," maxlength",[162,65591,173],{"class":168},[162,65593,65594],{"class":179},"\"200\"",[162,65596,58384],{"class":168},[162,65598,57358],{"class":54373},[162,65600,54380],{"class":168},[162,65602,65603,65605,65607,65610,65612],{"class":164,"line":35770},[162,65604,54414],{"class":168},[162,65606,56957],{"class":54373},[162,65608,65609],{"class":168},">发布\u003C\u002F",[162,65611,56957],{"class":54373},[162,65613,54380],{"class":168},[162,65615,65616,65618,65620],{"class":164,"line":35776},[162,65617,55487],{"class":168},[162,65619,54683],{"class":54373},[162,65621,54380],{"class":168},[162,65623,65624,65626,65628,65630,65632,65634],{"class":164,"line":35787},[162,65625,55215],{"class":168},[162,65627,54683],{"class":54373},[162,65629,56556],{"class":5082},[162,65631,173],{"class":168},[162,65633,65539],{"class":179},[162,65635,54380],{"class":168},[162,65637,65638,65640,65642,65644,65646,65649,65652,65654],{"class":164,"line":35793},[162,65639,54414],{"class":168},[162,65641,162],{"class":54373},[162,65643,56556],{"class":5082},[162,65645,173],{"class":168},[162,65647,65648],{"class":179},"\"total\"",[162,65650,65651],{"class":168},">0\u002F200字\u003C\u002F",[162,65653,162],{"class":54373},[162,65655,54380],{"class":168},[162,65657,65658,65660,65662],{"class":164,"line":35799},[162,65659,55487],{"class":168},[162,65661,54683],{"class":54373},[162,65663,54380],{"class":168},[162,65665,65666,65668,65670,65672,65674,65677],{"class":164,"line":35805},[162,65667,55215],{"class":168},[162,65669,54683],{"class":54373},[162,65671,56556],{"class":5082},[162,65673,173],{"class":168},[162,65675,65676],{"class":179},"\"list\"",[162,65678,54380],{"class":168},[162,65680,65681,65683,65685,65687,65689,65692,65695,65697,65700],{"class":164,"line":35811},[162,65682,54414],{"class":168},[162,65684,54683],{"class":54373},[162,65686,56556],{"class":5082},[162,65688,173],{"class":168},[162,65690,65691],{"class":179},"\"item\"",[162,65693,65694],{"class":5082}," style",[162,65696,173],{"class":168},[162,65698,65699],{"class":179},"\"display: none;\"",[162,65701,54380],{"class":168},[162,65703,65704,65706,65708,65710,65712,65714,65716,65718],{"class":164,"line":35817},[162,65705,58304],{"class":168},[162,65707,3732],{"class":54373},[162,65709,56556],{"class":5082},[162,65711,173],{"class":168},[162,65713,65554],{"class":179},[162,65715,58384],{"class":168},[162,65717,3732],{"class":54373},[162,65719,54380],{"class":168},[162,65721,65722,65724,65726,65728,65730,65733],{"class":164,"line":35823},[162,65723,58304],{"class":168},[162,65725,54683],{"class":54373},[162,65727,56556],{"class":5082},[162,65729,173],{"class":168},[162,65731,65732],{"class":179},"\"info\"",[162,65734,54380],{"class":168},[162,65736,65737,65739,65741,65743,65745,65747,65750,65752],{"class":164,"line":35829},[162,65738,58372],{"class":168},[162,65740,19],{"class":54373},[162,65742,56556],{"class":5082},[162,65744,173],{"class":168},[162,65746,1778],{"class":179},[162,65748,65749],{"class":168},">清风徐来\u003C\u002F",[162,65751,19],{"class":54373},[162,65753,54380],{"class":168},[162,65755,65756,65758,65760,65762,65764,65767,65770,65772],{"class":164,"line":35849},[162,65757,58372],{"class":168},[162,65759,19],{"class":54373},[162,65761,56556],{"class":5082},[162,65763,173],{"class":168},[162,65765,65766],{"class":179},"\"text\"",[162,65768,65769],{"class":168},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[162,65771,19],{"class":54373},[162,65773,54380],{"class":168},[162,65775,65776,65778,65780,65782,65784,65787,65790,65792],{"class":164,"line":35855},[162,65777,58372],{"class":168},[162,65779,19],{"class":54373},[162,65781,56556],{"class":5082},[162,65783,173],{"class":168},[162,65785,65786],{"class":179},"\"time\"",[162,65788,65789],{"class":168},">2022-10-10 20:29:21\u003C\u002F",[162,65791,19],{"class":54373},[162,65793,54380],{"class":168},[162,65795,65796,65798,65800],{"class":164,"line":35871},[162,65797,58477],{"class":168},[162,65799,54683],{"class":54373},[162,65801,54380],{"class":168},[162,65803,65804,65806,65808],{"class":164,"line":35877},[162,65805,54848],{"class":168},[162,65807,54683],{"class":54373},[162,65809,54380],{"class":168},[162,65811,65812,65814,65816],{"class":164,"line":35891},[162,65813,55487],{"class":168},[162,65815,54683],{"class":54373},[162,65817,54380],{"class":168},[162,65819,65820,65822,65824],{"class":164,"line":35897},[162,65821,55215],{"class":168},[162,65823,54885],{"class":54373},[162,65825,54380],{"class":168},[162,65827,65828,65830,65833,65835,65837,65839,65841,65844],{"class":164,"line":35912},[162,65829,14317],{"class":172},[162,65831,65832],{"class":207}," tx",[162,65834,16659],{"class":172},[162,65836,57466],{"class":168},[162,65838,57469],{"class":5082},[162,65840,604],{"class":168},[162,65842,65843],{"class":179},"'#tx'",[162,65845,434],{"class":168},[162,65847,65848,65850,65853,65855,65857,65859,65861,65864],{"class":164,"line":35918},[162,65849,14317],{"class":172},[162,65851,65852],{"class":207}," total",[162,65854,16659],{"class":172},[162,65856,57466],{"class":168},[162,65858,57469],{"class":5082},[162,65860,604],{"class":168},[162,65862,65863],{"class":179},"'.total'",[162,65865,434],{"class":168},[162,65867,65868],{"class":164,"line":35927},[162,65869,65870],{"class":361},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[162,65872,65873,65876,65878,65880,65882,65884,65886],{"class":164,"line":35933},[162,65874,65875],{"class":168},"    tx.",[162,65877,60882],{"class":5082},[162,65879,604],{"class":168},[162,65881,64395],{"class":179},[162,65883,183],{"class":168},[162,65885,57519],{"class":172},[162,65887,57522],{"class":168},[162,65889,65890,65893,65895],{"class":164,"line":35942},[162,65891,65892],{"class":168},"      total.style.opacity ",[162,65894,173],{"class":172},[162,65896,58768],{"class":207},[162,65898,65899],{"class":164,"line":35948},[162,65900,36536],{"class":168},[162,65902,65903],{"class":164,"line":35954},[162,65904,65905],{"class":361},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[162,65907,65908,65910,65912,65914,65916,65918,65920],{"class":164,"line":35963},[162,65909,65875],{"class":168},[162,65911,60882],{"class":5082},[162,65913,604],{"class":168},[162,65915,64456],{"class":179},[162,65917,183],{"class":168},[162,65919,57519],{"class":172},[162,65921,57522],{"class":168},[162,65923,65924,65926,65928],{"class":164,"line":35969},[162,65925,65892],{"class":168},[162,65927,173],{"class":172},[162,65929,902],{"class":207},[162,65931,65932],{"class":164,"line":35980},[162,65933,36536],{"class":168},[162,65935,65936],{"class":164,"line":35986},[162,65937,65938],{"class":361},"    \u002F\u002F 3. 检测用户输入\n",[162,65940,65941,65943,65945,65947,65950,65952,65954],{"class":164,"line":36005},[162,65942,65875],{"class":168},[162,65944,60882],{"class":5082},[162,65946,604],{"class":168},[162,65948,65949],{"class":179},"'input'",[162,65951,183],{"class":168},[162,65953,57519],{"class":172},[162,65955,57522],{"class":168},[162,65957,65958],{"class":164,"line":36011},[162,65959,65960],{"class":361},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[162,65962,65963,65966,65968,65971,65974,65976,65979,65981,65983],{"class":164,"line":36022},[162,65964,65965],{"class":168},"      total.innerHTML ",[162,65967,173],{"class":172},[162,65969,65970],{"class":179}," `${",[162,65972,65973],{"class":168},"tx",[162,65975,3847],{"class":179},[162,65977,65978],{"class":168},"value",[162,65980,3847],{"class":179},[162,65982,55039],{"class":207},[162,65984,65985],{"class":179},"}\u002F200字`\n",[162,65987,65988],{"class":164,"line":36028},[162,65989,36536],{"class":168},[162,65991,65992],{"class":164,"line":36048},[162,65993,301],{"emptyLinePlaceholder":300},[162,65995,65996],{"class":164,"line":36064},[162,65997,65998],{"class":361},"    \u002F\u002F const str = 'andy'\n",[162,66000,66001],{"class":164,"line":36070},[162,66002,66003],{"class":361},"    \u002F\u002F console.log(str.length)\n",[162,66005,66006,66008,66010],{"class":164,"line":36084},[162,66007,55487],{"class":168},[162,66009,54885],{"class":54373},[162,66011,54380],{"class":168},[162,66013,66014,66016,66018],{"class":164,"line":36090},[162,66015,54857],{"class":168},[162,66017,54872],{"class":54373},[162,66019,54380],{"class":168},[162,66021,66022],{"class":164,"line":36096},[162,66023,301],{"emptyLinePlaceholder":300},[162,66025,66026,66028,66030],{"class":164,"line":36107},[162,66027,54857],{"class":168},[162,66029,53708],{"class":54373},[162,66031,54380],{"class":168},[25089,66033,66035],{"id":66034},"_3254-change事件","3.2.5.4 change事件",[19,66037,66038],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,66040,66041],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,66043,66044],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[153,66046,66048],{"className":53706,"code":66047,"language":53708,"meta":158,"style":158},"\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",[71,66049,66050,66060,66074,66078,66086,66100,66120,66132,66140,66144,66152,66166,66174,66192,66210,66222,66226,66234,66242,66246],{"__ignoreMap":158},[162,66051,66052,66054,66056,66058],{"class":164,"line":165},[162,66053,54370],{"class":168},[162,66055,54374],{"class":54373},[162,66057,54377],{"class":5082},[162,66059,54380],{"class":168},[162,66061,66062,66064,66066,66068,66070,66072],{"class":164,"line":197},[162,66063,4187],{"class":168},[162,66065,53708],{"class":54373},[162,66067,54389],{"class":5082},[162,66069,173],{"class":168},[162,66071,54394],{"class":179},[162,66073,54380],{"class":168},[162,66075,66076],{"class":164,"line":228},[162,66077,301],{"emptyLinePlaceholder":300},[162,66079,66080,66082,66084],{"class":164,"line":252},[162,66081,4187],{"class":168},[162,66083,54407],{"class":54373},[162,66085,54380],{"class":168},[162,66087,66088,66090,66092,66094,66096,66098],{"class":164,"line":328},[162,66089,55215],{"class":168},[162,66091,54417],{"class":54373},[162,66093,54420],{"class":5082},[162,66095,173],{"class":168},[162,66097,54425],{"class":179},[162,66099,54380],{"class":168},[162,66101,66102,66104,66106,66108,66110,66112,66114,66116,66118],{"class":164,"line":466},[162,66103,55215],{"class":168},[162,66105,54417],{"class":54373},[162,66107,18013],{"class":5082},[162,66109,173],{"class":168},[162,66111,54464],{"class":179},[162,66113,54444],{"class":5082},[162,66115,173],{"class":168},[162,66117,54471],{"class":179},[162,66119,54380],{"class":168},[162,66121,66122,66124,66126,66128,66130],{"class":164,"line":471},[162,66123,55215],{"class":168},[162,66125,54480],{"class":54373},[162,66127,54483],{"class":168},[162,66129,54480],{"class":54373},[162,66131,54380],{"class":168},[162,66133,66134,66136,66138],{"class":164,"line":687},[162,66135,54857],{"class":168},[162,66137,54407],{"class":54373},[162,66139,54380],{"class":168},[162,66141,66142],{"class":164,"line":692},[162,66143,301],{"emptyLinePlaceholder":300},[162,66145,66146,66148,66150],{"class":164,"line":698},[162,66147,4187],{"class":168},[162,66149,54872],{"class":54373},[162,66151,54380],{"class":168},[162,66153,66154,66156,66158,66160,66162,66164],{"class":164,"line":2955},[162,66155,55215],{"class":168},[162,66157,56891],{"class":54373},[162,66159,56894],{"class":5082},[162,66161,173],{"class":168},[162,66163,65766],{"class":179},[162,66165,54380],{"class":168},[162,66167,66168,66170,66172],{"class":164,"line":2960},[162,66169,55215],{"class":168},[162,66171,54885],{"class":54373},[162,66173,54380],{"class":168},[162,66175,66176,66178,66180,66182,66184,66186,66188,66190],{"class":164,"line":2971},[162,66177,14317],{"class":172},[162,66179,2257],{"class":207},[162,66181,16659],{"class":172},[162,66183,57466],{"class":168},[162,66185,57469],{"class":5082},[162,66187,604],{"class":168},[162,66189,65949],{"class":179},[162,66191,434],{"class":168},[162,66193,66194,66197,66199,66201,66204,66206,66208],{"class":164,"line":2984},[162,66195,66196],{"class":168},"    input.",[162,66198,60882],{"class":5082},[162,66200,604],{"class":168},[162,66202,66203],{"class":179},"'change'",[162,66205,183],{"class":168},[162,66207,57519],{"class":172},[162,66209,57522],{"class":168},[162,66211,66212,66214,66216,66218,66220],{"class":164,"line":2989},[162,66213,61313],{"class":168},[162,66215,61316],{"class":5082},[162,66217,604],{"class":168},[162,66219,3880],{"class":207},[162,66221,434],{"class":168},[162,66223,66224],{"class":164,"line":3011},[162,66225,36536],{"class":168},[162,66227,66228,66230,66232],{"class":164,"line":3022},[162,66229,55487],{"class":168},[162,66231,54885],{"class":54373},[162,66233,54380],{"class":168},[162,66235,66236,66238,66240],{"class":164,"line":3027},[162,66237,54857],{"class":168},[162,66239,54872],{"class":54373},[162,66241,54380],{"class":168},[162,66243,66244],{"class":164,"line":3046},[162,66245,301],{"emptyLinePlaceholder":300},[162,66247,66248,66250,66252],{"class":164,"line":3052},[162,66249,54857],{"class":168},[162,66251,53708],{"class":54373},[162,66253,54380],{"class":168},[19,66255,66256],{},"总结：内容发生改变才回去触发",[3284,66258,66260],{"id":66259},"_326-事件对象","3.2.6 事件对象",[25089,66262,66264],{"id":66263},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,66266,66267],{},[4602,66268],{"alt":158,"src":66269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,66271,66272],{},[4602,66273],{"alt":158,"src":66274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,66276,66277],{},"点击一次，就输出了事件对象，它是个对象",[19,66279,66280],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,66282,66283],{},[4602,66284],{"alt":158,"src":66285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[25089,66287,66289],{"id":66288},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,66291,66292],{},[4602,66293],{"alt":158,"src":66294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,66296,66297],{},"实现按特殊字符才是实现打印输出效果：",[153,66299,66301],{"className":56137,"code":66300,"language":56139,"meta":158,"style":158},"\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",[71,66302,66303,66311,66316,66330,66338,66343,66348,66353,66358,66363,66368,66373,66378,66383,66387,66391,66399],{"__ignoreMap":158},[162,66304,66305,66307,66309],{"class":164,"line":165},[162,66306,4187],{"class":168},[162,66308,54872],{"class":54373},[162,66310,54380],{"class":168},[162,66312,66313],{"class":164,"line":197},[162,66314,66315],{"class":361},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[162,66317,66318,66320,66322,66324,66326,66328],{"class":164,"line":228},[162,66319,55215],{"class":168},[162,66321,56891],{"class":54373},[162,66323,56894],{"class":5082},[162,66325,173],{"class":168},[162,66327,65766],{"class":179},[162,66329,54380],{"class":168},[162,66331,66332,66334,66336],{"class":164,"line":252},[162,66333,55215],{"class":168},[162,66335,54885],{"class":54373},[162,66337,54380],{"class":168},[162,66339,66340],{"class":164,"line":328},[162,66341,66342],{"class":168},"    \u002F\u002F const btn = document.querySelector('button')\n",[162,66344,66345],{"class":164,"line":466},[162,66346,66347],{"class":168},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[162,66349,66350],{"class":164,"line":471},[162,66351,66352],{"class":168},"    \u002F\u002F   console.log(e);\n",[162,66354,66355],{"class":164,"line":687},[162,66356,66357],{"class":168},"    \u002F\u002F })\n",[162,66359,66360],{"class":164,"line":692},[162,66361,66362],{"class":168},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[162,66364,66365],{"class":164,"line":698},[162,66366,66367],{"class":168},"    const input = document.querySelector('input')\n",[162,66369,66370],{"class":164,"line":2955},[162,66371,66372],{"class":168},"    input.addEventListener('keyup', function (e) {\n",[162,66374,66375],{"class":164,"line":2960},[162,66376,66377],{"class":168},"      if (e.key === 'Enter') {\n",[162,66379,66380],{"class":164,"line":2971},[162,66381,66382],{"class":168},"        console.log('我按下了回车键')\n",[162,66384,66385],{"class":164,"line":2984},[162,66386,55468],{"class":168},[162,66388,66389],{"class":164,"line":2989},[162,66390,36536],{"class":168},[162,66392,66393,66395,66397],{"class":164,"line":3011},[162,66394,55487],{"class":168},[162,66396,54885],{"class":54373},[162,66398,54380],{"class":168},[162,66400,66401,66403,66405],{"class":164,"line":3022},[162,66402,54857],{"class":168},[162,66404,54872],{"class":54373},[162,66406,54380],{"class":168},[25089,66408,66410],{"id":66409},"_3263-trim方法","3.2.6.3 trim方法",[19,66412,66413],{},[4602,66414],{"alt":158,"src":66415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,66417,66418],{},[4602,66419],{"alt":158,"src":66420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,66422,66423],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,66425,66426],{},"str.trim()",[3284,66428,66430],{"id":66429},"_327-环境对象","3.2.7 环境对象",[19,66432,66433],{},[4602,66434],{"alt":158,"src":66435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,66437,66438],{},[4602,66439],{"alt":158,"src":66440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,66442,66443],{},[4602,66444],{"alt":158,"src":66445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,66447,66448],{},"实际函数调用是window.fn()",[19,66450,66451],{},"普通函数里面this指向的是window",[4279,66453,66454,66457,66460],{},[1455,66455,66456],{},"在普通函数下，this指向的是window",[1455,66458,66459],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[1455,66461,66462],{},"箭头函数没有this",[19,66464,66465],{},"粗略记法就是：谁调用，this就指向谁",[19,66467,66468],{},[4602,66469],{"alt":158,"src":66470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,66472,66473],{},[4602,66474],{"alt":158,"src":66475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,66477,66478],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,66480,66481],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[153,66483,66485],{"className":56137,"code":66484,"language":56139,"meta":158,"style":158},"\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",[71,66486,66487,66495,66507,66515,66520,66525,66530,66535,66539,66547],{"__ignoreMap":158},[162,66488,66489,66491,66493],{"class":164,"line":165},[162,66490,4187],{"class":168},[162,66492,54872],{"class":54373},[162,66494,54380],{"class":168},[162,66496,66497,66499,66501,66503,66505],{"class":164,"line":197},[162,66498,55215],{"class":168},[162,66500,56957],{"class":54373},[162,66502,56963],{"class":168},[162,66504,56957],{"class":54373},[162,66506,54380],{"class":168},[162,66508,66509,66511,66513],{"class":164,"line":228},[162,66510,55215],{"class":168},[162,66512,54885],{"class":54373},[162,66514,54380],{"class":168},[162,66516,66517],{"class":164,"line":252},[162,66518,66519],{"class":168},"    const button = document.querySelector('button')\n",[162,66521,66522],{"class":164,"line":328},[162,66523,66524],{"class":168},"    button.addEventListener('click', function () {\n",[162,66526,66527],{"class":164,"line":466},[162,66528,66529],{"class":168},"      \u002F\u002F console.log(this);\n",[162,66531,66532],{"class":164,"line":471},[162,66533,66534],{"class":168},"      this.style.color = 'pink'\n",[162,66536,66537],{"class":164,"line":687},[162,66538,36536],{"class":168},[162,66540,66541,66543,66545],{"class":164,"line":692},[162,66542,55487],{"class":168},[162,66544,54885],{"class":54373},[162,66546,54380],{"class":168},[162,66548,66549,66551,66553],{"class":164,"line":698},[162,66550,54857],{"class":168},[162,66552,54872],{"class":54373},[162,66554,54380],{"class":168},[3284,66556,66558],{"id":66557},"_328-回调函数","3.2.8 回调函数",[19,66560,66561],{},[4602,66562],{"alt":158,"src":66563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,66565,66566],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,66568,14428],{},[4279,66570,66571,66574,66577],{},[1455,66572,66573],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[1455,66575,66576],{},"回调函数本质还是函数，只不过把它当成参数使用",[1455,66578,66579],{},"使用匿名函数做为回调函数比较常见",[3284,66581,66583],{"id":66582},"_329-tab栏切换","3.2.9 tab栏切换",[19,66585,66586],{},[4602,66587],{"alt":158,"src":66588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[153,66590,66592],{"className":53706,"code":66591,"language":53708,"meta":158,"style":158},"\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",[71,66593,66594,66604,66618,66622,66630,66644,66664,66684,66697,66705,66711,66721,66731,66735,66739,66746,66759,66772,66784,66800,66804,66808,66815,66827,66839,66851,66861,66871,66875,66879,66888,66900,66911,66923,66927,66931,66939,66949,66959,66969,66973,66977,66987,67001,67013,67017,67021,67033,67044,67061,67071,67075,67079,67094,67105,67115,67119,67123,67130,67145,67149,67153,67161,67171,67175,67179,67188,67198,67202,67210,67218,67222,67230,67245,67260,67273,67281,67315,67342,67369,67396,67423,67431,67439,67454,67491,67526,67561,67596,67631,67639,67647,67655,67660,67665,67685,67690,67719,67724,67729,67747,67752,67757,67762,67784,67789,67805,67809,67814,67819,67840,67845,67874,67878,67883,67887,67895,67903,67907],{"__ignoreMap":158},[162,66595,66596,66598,66600,66602],{"class":164,"line":165},[162,66597,54370],{"class":168},[162,66599,54374],{"class":54373},[162,66601,54377],{"class":5082},[162,66603,54380],{"class":168},[162,66605,66606,66608,66610,66612,66614,66616],{"class":164,"line":197},[162,66607,4187],{"class":168},[162,66609,53708],{"class":54373},[162,66611,54389],{"class":5082},[162,66613,173],{"class":168},[162,66615,54394],{"class":179},[162,66617,54380],{"class":168},[162,66619,66620],{"class":164,"line":228},[162,66621,301],{"emptyLinePlaceholder":300},[162,66623,66624,66626,66628],{"class":164,"line":252},[162,66625,4187],{"class":168},[162,66627,54407],{"class":54373},[162,66629,54380],{"class":168},[162,66631,66632,66634,66636,66638,66640,66642],{"class":164,"line":328},[162,66633,55215],{"class":168},[162,66635,54417],{"class":54373},[162,66637,54420],{"class":5082},[162,66639,173],{"class":168},[162,66641,54425],{"class":179},[162,66643,62196],{"class":168},[162,66645,66646,66648,66650,66652,66654,66656,66658,66660,66662],{"class":164,"line":466},[162,66647,55215],{"class":168},[162,66649,54417],{"class":54373},[162,66651,54436],{"class":5082},[162,66653,173],{"class":168},[162,66655,54441],{"class":179},[162,66657,54444],{"class":5082},[162,66659,173],{"class":168},[162,66661,54449],{"class":179},[162,66663,62196],{"class":168},[162,66665,66666,66668,66670,66672,66674,66676,66678,66680,66682],{"class":164,"line":471},[162,66667,55215],{"class":168},[162,66669,54417],{"class":54373},[162,66671,18013],{"class":5082},[162,66673,173],{"class":168},[162,66675,54464],{"class":179},[162,66677,54444],{"class":5082},[162,66679,173],{"class":168},[162,66681,54471],{"class":179},[162,66683,62196],{"class":168},[162,66685,66686,66688,66690,66693,66695],{"class":164,"line":687},[162,66687,55215],{"class":168},[162,66689,54480],{"class":54373},[162,66691,66692],{"class":168},">tab栏切换\u003C\u002F",[162,66694,54480],{"class":54373},[162,66696,54380],{"class":168},[162,66698,66699,66701,66703],{"class":164,"line":692},[162,66700,55215],{"class":168},[162,66702,3219],{"class":54373},[162,66704,54380],{"class":168},[162,66706,66707,66709],{"class":164,"line":698},[162,66708,9509],{"class":54373},[162,66710,1722],{"class":168},[162,66712,66713,66715,66717,66719],{"class":164,"line":2955},[162,66714,57776],{"class":207},[162,66716,1730],{"class":168},[162,66718,312],{"class":207},[162,66720,4433],{"class":168},[162,66722,66723,66725,66727,66729],{"class":164,"line":2960},[162,66724,57765],{"class":207},[162,66726,1730],{"class":168},[162,66728,312],{"class":207},[162,66730,4433],{"class":168},[162,66732,66733],{"class":164,"line":2971},[162,66734,5305],{"class":168},[162,66736,66737],{"class":164,"line":2984},[162,66738,301],{"emptyLinePlaceholder":300},[162,66740,66741,66744],{"class":164,"line":2989},[162,66742,66743],{"class":5082},"    .tab",[162,66745,1722],{"class":168},[162,66747,66748,66750,66752,66755,66757],{"class":164,"line":3011},[162,66749,57841],{"class":207},[162,66751,1730],{"class":168},[162,66753,66754],{"class":207},"590",[162,66756,54564],{"class":172},[162,66758,4433],{"class":168},[162,66760,66761,66763,66765,66768,66770],{"class":164,"line":3022},[162,66762,57855],{"class":207},[162,66764,1730],{"class":168},[162,66766,66767],{"class":207},"340",[162,66769,54564],{"class":172},[162,66771,4433],{"class":168},[162,66773,66774,66776,66778,66780,66782],{"class":164,"line":3027},[162,66775,57776],{"class":207},[162,66777,1730],{"class":168},[162,66779,1011],{"class":207},[162,66781,54564],{"class":172},[162,66783,4433],{"class":168},[162,66785,66786,66788,66790,66792,66794,66796,66798],{"class":164,"line":3046},[162,66787,65045],{"class":207},[162,66789,1730],{"class":168},[162,66791,208],{"class":207},[162,66793,54564],{"class":172},[162,66795,54593],{"class":207},[162,66797,65312],{"class":207},[162,66799,4433],{"class":168},[162,66801,66802],{"class":164,"line":3052},[162,66803,5305],{"class":168},[162,66805,66806],{"class":164,"line":3057},[162,66807,301],{"emptyLinePlaceholder":300},[162,66809,66810,66813],{"class":164,"line":3072},[162,66811,66812],{"class":5082},"    .tab-nav",[162,66814,1722],{"class":168},[162,66816,66817,66819,66821,66823,66825],{"class":164,"line":3077},[162,66818,57841],{"class":207},[162,66820,1730],{"class":168},[162,66822,3608],{"class":207},[162,66824,2708],{"class":172},[162,66826,4433],{"class":168},[162,66828,66829,66831,66833,66835,66837],{"class":164,"line":3100},[162,66830,57855],{"class":207},[162,66832,1730],{"class":168},[162,66834,4184],{"class":207},[162,66836,54564],{"class":172},[162,66838,4433],{"class":168},[162,66840,66841,66843,66845,66847,66849],{"class":164,"line":3140},[162,66842,60428],{"class":207},[162,66844,1730],{"class":168},[162,66846,4184],{"class":207},[162,66848,54564],{"class":172},[162,66850,4433],{"class":168},[162,66852,66853,66855,66857,66859],{"class":164,"line":4878},[162,66854,58079],{"class":207},[162,66856,1730],{"class":168},[162,66858,54549],{"class":207},[162,66860,4433],{"class":168},[162,66862,66863,66865,66867,66869],{"class":164,"line":4883},[162,66864,58090],{"class":207},[162,66866,1730],{"class":168},[162,66868,54740],{"class":207},[162,66870,4433],{"class":168},[162,66872,66873],{"class":164,"line":4897},[162,66874,5305],{"class":168},[162,66876,66877],{"class":164,"line":4902},[162,66878,301],{"emptyLinePlaceholder":300},[162,66880,66881,66883,66886],{"class":164,"line":5694},[162,66882,66812],{"class":5082},[162,66884,66885],{"class":54373}," h3",[162,66887,1722],{"class":168},[162,66889,66890,66892,66894,66896,66898],{"class":164,"line":5708},[162,66891,57992],{"class":207},[162,66893,1730],{"class":168},[162,66895,4082],{"class":207},[162,66897,54564],{"class":172},[162,66899,4433],{"class":168},[162,66901,66902,66904,66906,66909],{"class":164,"line":5716},[162,66903,65402],{"class":207},[162,66905,1730],{"class":168},[162,66907,66908],{"class":207},"normal",[162,66910,4433],{"class":168},[162,66912,66913,66915,66917,66919,66921],{"class":164,"line":5721},[162,66914,65068],{"class":207},[162,66916,1730],{"class":168},[162,66918,1011],{"class":207},[162,66920,54564],{"class":172},[162,66922,4433],{"class":168},[162,66924,66925],{"class":164,"line":5727},[162,66926,5305],{"class":168},[162,66928,66929],{"class":164,"line":5733},[162,66930,301],{"emptyLinePlaceholder":300},[162,66932,66933,66935,66937],{"class":164,"line":5738},[162,66934,66812],{"class":5082},[162,66936,64360],{"class":54373},[162,66938,1722],{"class":168},[162,66940,66941,66943,66945,66947],{"class":164,"line":11052},[162,66942,57802],{"class":207},[162,66944,1730],{"class":168},[162,66946,57807],{"class":207},[162,66948,4433],{"class":168},[162,66950,66951,66953,66955,66957],{"class":164,"line":11076},[162,66952,58079],{"class":207},[162,66954,1730],{"class":168},[162,66956,54549],{"class":207},[162,66958,4433],{"class":168},[162,66960,66961,66963,66965,66967],{"class":164,"line":11081},[162,66962,58090],{"class":207},[162,66964,1730],{"class":168},[162,66966,54652],{"class":207},[162,66968,4433],{"class":168},[162,66970,66971],{"class":164,"line":11087},[162,66972,5305],{"class":168},[162,66974,66975],{"class":164,"line":11114},[162,66976,301],{"emptyLinePlaceholder":300},[162,66978,66979,66981,66983,66985],{"class":164,"line":11119},[162,66980,66812],{"class":5082},[162,66982,64360],{"class":54373},[162,66984,58145],{"class":54373},[162,66986,1722],{"class":168},[162,66988,66989,66991,66993,66995,66997,66999],{"class":164,"line":11125},[162,66990,57776],{"class":207},[162,66992,1730],{"class":168},[162,66994,312],{"class":207},[162,66996,12053],{"class":207},[162,66998,54564],{"class":172},[162,67000,4433],{"class":168},[162,67002,67003,67005,67007,67009,67011],{"class":164,"line":11137},[162,67004,57992],{"class":207},[162,67006,1730],{"class":168},[162,67008,3838],{"class":207},[162,67010,54564],{"class":172},[162,67012,4433],{"class":168},[162,67014,67015],{"class":164,"line":11149},[162,67016,5305],{"class":168},[162,67018,67019],{"class":164,"line":11161},[162,67020,301],{"emptyLinePlaceholder":300},[162,67022,67023,67025,67027,67029,67031],{"class":164,"line":12816},[162,67024,66812],{"class":5082},[162,67026,64360],{"class":54373},[162,67028,58145],{"class":54373},[162,67030,4538],{"class":54373},[162,67032,1722],{"class":168},[162,67034,67035,67038,67040,67042],{"class":164,"line":12841},[162,67036,67037],{"class":207},"      text-decoration",[162,67039,1730],{"class":168},[162,67041,57807],{"class":207},[162,67043,4433],{"class":168},[162,67045,67046,67048,67050,67052,67054,67056,67059],{"class":164,"line":12864},[162,67047,65300],{"class":207},[162,67049,1730],{"class":168},[162,67051,213],{"class":207},[162,67053,54564],{"class":172},[162,67055,54593],{"class":207},[162,67057,67058],{"class":207}," transparent",[162,67060,4433],{"class":168},[162,67062,67063,67065,67067,67069],{"class":164,"line":12888},[162,67064,60485],{"class":207},[162,67066,1730],{"class":168},[162,67068,65437],{"class":207},[162,67070,4433],{"class":168},[162,67072,67073],{"class":164,"line":12893},[162,67074,5305],{"class":168},[162,67076,67077],{"class":164,"line":12898},[162,67078,301],{"emptyLinePlaceholder":300},[162,67080,67081,67083,67085,67087,67089,67092],{"class":164,"line":12903},[162,67082,66812],{"class":5082},[162,67084,64360],{"class":54373},[162,67086,58145],{"class":54373},[162,67088,4538],{"class":54373},[162,67090,67091],{"class":5082},".active",[162,67093,1722],{"class":168},[162,67095,67096,67098,67100,67103],{"class":164,"line":12912},[162,67097,64859],{"class":207},[162,67099,1730],{"class":168},[162,67101,67102],{"class":207},"#e1251b",[162,67104,4433],{"class":168},[162,67106,67107,67109,67111,67113],{"class":164,"line":12917},[162,67108,60485],{"class":207},[162,67110,1730],{"class":168},[162,67112,67102],{"class":207},[162,67114,4433],{"class":168},[162,67116,67117],{"class":164,"line":12923},[162,67118,5305],{"class":168},[162,67120,67121],{"class":164,"line":12944},[162,67122,301],{"emptyLinePlaceholder":300},[162,67124,67125,67128],{"class":164,"line":12950},[162,67126,67127],{"class":5082},"    .tab-content",[162,67129,1722],{"class":168},[162,67131,67132,67134,67136,67138,67141,67143],{"class":164,"line":12964},[162,67133,57765],{"class":207},[162,67135,1730],{"class":168},[162,67137,312],{"class":207},[162,67139,67140],{"class":207}," 16",[162,67142,54564],{"class":172},[162,67144,4433],{"class":168},[162,67146,67147],{"class":164,"line":12970},[162,67148,5305],{"class":168},[162,67150,67151],{"class":164,"line":12997},[162,67152,301],{"emptyLinePlaceholder":300},[162,67154,67155,67157,67159],{"class":164,"line":13006},[162,67156,67127],{"class":5082},[162,67158,65242],{"class":5082},[162,67160,1722],{"class":168},[162,67162,67163,67165,67167,67169],{"class":164,"line":13012},[162,67164,58079],{"class":207},[162,67166,1730],{"class":168},[162,67168,57807],{"class":207},[162,67170,4433],{"class":168},[162,67172,67173],{"class":164,"line":13020},[162,67174,5305],{"class":168},[162,67176,67177],{"class":164,"line":13025},[162,67178,301],{"emptyLinePlaceholder":300},[162,67180,67181,67183,67186],{"class":164,"line":19695},[162,67182,67127],{"class":5082},[162,67184,67185],{"class":5082}," .item.active",[162,67187,1722],{"class":168},[162,67189,67190,67192,67194,67196],{"class":164,"line":19701},[162,67191,58079],{"class":207},[162,67193,1730],{"class":168},[162,67195,63937],{"class":207},[162,67197,4433],{"class":168},[162,67199,67200],{"class":164,"line":19724},[162,67201,5305],{"class":168},[162,67203,67204,67206,67208],{"class":164,"line":19730},[162,67205,55487],{"class":168},[162,67207,3219],{"class":54373},[162,67209,54380],{"class":168},[162,67211,67212,67214,67216],{"class":164,"line":19753},[162,67213,54857],{"class":168},[162,67215,54407],{"class":54373},[162,67217,54380],{"class":168},[162,67219,67220],{"class":164,"line":19767},[162,67221,301],{"emptyLinePlaceholder":300},[162,67223,67224,67226,67228],{"class":164,"line":19787},[162,67225,4187],{"class":168},[162,67227,54872],{"class":54373},[162,67229,54380],{"class":168},[162,67231,67232,67234,67236,67238,67240,67243],{"class":164,"line":19793},[162,67233,55215],{"class":168},[162,67235,54683],{"class":54373},[162,67237,56556],{"class":5082},[162,67239,173],{"class":168},[162,67241,67242],{"class":179},"\"tab\"",[162,67244,54380],{"class":168},[162,67246,67247,67249,67251,67253,67255,67258],{"class":164,"line":19804},[162,67248,54414],{"class":168},[162,67250,54683],{"class":54373},[162,67252,56556],{"class":5082},[162,67254,173],{"class":168},[162,67256,67257],{"class":179},"\"tab-nav\"",[162,67259,54380],{"class":168},[162,67261,67262,67264,67266,67269,67271],{"class":164,"line":19827},[162,67263,58304],{"class":168},[162,67265,3284],{"class":54373},[162,67267,67268],{"class":168},">每日特价\u003C\u002F",[162,67270,3284],{"class":54373},[162,67272,54380],{"class":168},[162,67274,67275,67277,67279],{"class":164,"line":19849},[162,67276,58304],{"class":168},[162,67278,4279],{"class":54373},[162,67280,54380],{"class":168},[162,67282,67283,67285,67287,67289,67291,67293,67295,67297,67299,67301,67304,67307,67309,67311,67313],{"class":164,"line":19854},[162,67284,58372],{"class":168},[162,67286,1455],{"class":54373},[162,67288,64120],{"class":168},[162,67290,3538],{"class":54373},[162,67292,56556],{"class":5082},[162,67294,173],{"class":168},[162,67296,62775],{"class":179},[162,67298,64125],{"class":5082},[162,67300,173],{"class":168},[162,67302,67303],{"class":179},"\"javascript:;\"",[162,67305,67306],{"class":168},">精选\u003C\u002F",[162,67308,3538],{"class":54373},[162,67310,58384],{"class":168},[162,67312,1455],{"class":54373},[162,67314,54380],{"class":168},[162,67316,67317,67319,67321,67323,67325,67327,67329,67331,67334,67336,67338,67340],{"class":164,"line":19860},[162,67318,58372],{"class":168},[162,67320,1455],{"class":54373},[162,67322,64120],{"class":168},[162,67324,3538],{"class":54373},[162,67326,64125],{"class":5082},[162,67328,173],{"class":168},[162,67330,67303],{"class":179},[162,67332,67333],{"class":168},">美食\u003C\u002F",[162,67335,3538],{"class":54373},[162,67337,58384],{"class":168},[162,67339,1455],{"class":54373},[162,67341,54380],{"class":168},[162,67343,67344,67346,67348,67350,67352,67354,67356,67358,67361,67363,67365,67367],{"class":164,"line":19874},[162,67345,58372],{"class":168},[162,67347,1455],{"class":54373},[162,67349,64120],{"class":168},[162,67351,3538],{"class":54373},[162,67353,64125],{"class":5082},[162,67355,173],{"class":168},[162,67357,67303],{"class":179},[162,67359,67360],{"class":168},">百货\u003C\u002F",[162,67362,3538],{"class":54373},[162,67364,58384],{"class":168},[162,67366,1455],{"class":54373},[162,67368,54380],{"class":168},[162,67370,67371,67373,67375,67377,67379,67381,67383,67385,67388,67390,67392,67394],{"class":164,"line":19887},[162,67372,58372],{"class":168},[162,67374,1455],{"class":54373},[162,67376,64120],{"class":168},[162,67378,3538],{"class":54373},[162,67380,64125],{"class":5082},[162,67382,173],{"class":168},[162,67384,67303],{"class":179},[162,67386,67387],{"class":168},">个护\u003C\u002F",[162,67389,3538],{"class":54373},[162,67391,58384],{"class":168},[162,67393,1455],{"class":54373},[162,67395,54380],{"class":168},[162,67397,67398,67400,67402,67404,67406,67408,67410,67412,67415,67417,67419,67421],{"class":164,"line":19892},[162,67399,58372],{"class":168},[162,67401,1455],{"class":54373},[162,67403,64120],{"class":168},[162,67405,3538],{"class":54373},[162,67407,64125],{"class":5082},[162,67409,173],{"class":168},[162,67411,67303],{"class":179},[162,67413,67414],{"class":168},">预告\u003C\u002F",[162,67416,3538],{"class":54373},[162,67418,58384],{"class":168},[162,67420,1455],{"class":54373},[162,67422,54380],{"class":168},[162,67424,67425,67427,67429],{"class":164,"line":19906},[162,67426,58477],{"class":168},[162,67428,4279],{"class":54373},[162,67430,54380],{"class":168},[162,67432,67433,67435,67437],{"class":164,"line":19911},[162,67434,54848],{"class":168},[162,67436,54683],{"class":54373},[162,67438,54380],{"class":168},[162,67440,67441,67443,67445,67447,67449,67452],{"class":164,"line":19917},[162,67442,54414],{"class":168},[162,67444,54683],{"class":54373},[162,67446,56556],{"class":5082},[162,67448,173],{"class":168},[162,67450,67451],{"class":179},"\"tab-content\"",[162,67453,54380],{"class":168},[162,67455,67456,67458,67460,67462,67464,67467,67469,67471,67473,67475,67478,67480,67482,67484,67487,67489],{"class":164,"line":19922},[162,67457,58304],{"class":168},[162,67459,54683],{"class":54373},[162,67461,56556],{"class":5082},[162,67463,173],{"class":168},[162,67465,67466],{"class":179},"\"item active\"",[162,67468,64120],{"class":168},[162,67470,4602],{"class":54373},[162,67472,58309],{"class":5082},[162,67474,173],{"class":168},[162,67476,67477],{"class":179},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[162,67479,58317],{"class":5082},[162,67481,173],{"class":168},[162,67483,10756],{"class":179},[162,67485,67486],{"class":168}," \u002F>\u003C\u002F",[162,67488,54683],{"class":54373},[162,67490,54380],{"class":168},[162,67492,67493,67495,67497,67499,67501,67503,67505,67507,67509,67511,67514,67516,67518,67520,67522,67524],{"class":164,"line":19936},[162,67494,58304],{"class":168},[162,67496,54683],{"class":54373},[162,67498,56556],{"class":5082},[162,67500,173],{"class":168},[162,67502,65691],{"class":179},[162,67504,64120],{"class":168},[162,67506,4602],{"class":54373},[162,67508,58309],{"class":5082},[162,67510,173],{"class":168},[162,67512,67513],{"class":179},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[162,67515,58317],{"class":5082},[162,67517,173],{"class":168},[162,67519,10756],{"class":179},[162,67521,67486],{"class":168},[162,67523,54683],{"class":54373},[162,67525,54380],{"class":168},[162,67527,67528,67530,67532,67534,67536,67538,67540,67542,67544,67546,67549,67551,67553,67555,67557,67559],{"class":164,"line":19941},[162,67529,58304],{"class":168},[162,67531,54683],{"class":54373},[162,67533,56556],{"class":5082},[162,67535,173],{"class":168},[162,67537,65691],{"class":179},[162,67539,64120],{"class":168},[162,67541,4602],{"class":54373},[162,67543,58309],{"class":5082},[162,67545,173],{"class":168},[162,67547,67548],{"class":179},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[162,67550,58317],{"class":5082},[162,67552,173],{"class":168},[162,67554,10756],{"class":179},[162,67556,67486],{"class":168},[162,67558,54683],{"class":54373},[162,67560,54380],{"class":168},[162,67562,67563,67565,67567,67569,67571,67573,67575,67577,67579,67581,67584,67586,67588,67590,67592,67594],{"class":164,"line":19946},[162,67564,58304],{"class":168},[162,67566,54683],{"class":54373},[162,67568,56556],{"class":5082},[162,67570,173],{"class":168},[162,67572,65691],{"class":179},[162,67574,64120],{"class":168},[162,67576,4602],{"class":54373},[162,67578,58309],{"class":5082},[162,67580,173],{"class":168},[162,67582,67583],{"class":179},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[162,67585,58317],{"class":5082},[162,67587,173],{"class":168},[162,67589,10756],{"class":179},[162,67591,67486],{"class":168},[162,67593,54683],{"class":54373},[162,67595,54380],{"class":168},[162,67597,67598,67600,67602,67604,67606,67608,67610,67612,67614,67616,67619,67621,67623,67625,67627,67629],{"class":164,"line":19960},[162,67599,58304],{"class":168},[162,67601,54683],{"class":54373},[162,67603,56556],{"class":5082},[162,67605,173],{"class":168},[162,67607,65691],{"class":179},[162,67609,64120],{"class":168},[162,67611,4602],{"class":54373},[162,67613,58309],{"class":5082},[162,67615,173],{"class":168},[162,67617,67618],{"class":179},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[162,67620,58317],{"class":5082},[162,67622,173],{"class":168},[162,67624,10756],{"class":179},[162,67626,67486],{"class":168},[162,67628,54683],{"class":54373},[162,67630,54380],{"class":168},[162,67632,67633,67635,67637],{"class":164,"line":19972},[162,67634,54848],{"class":168},[162,67636,54683],{"class":54373},[162,67638,54380],{"class":168},[162,67640,67641,67643,67645],{"class":164,"line":19977},[162,67642,55487],{"class":168},[162,67644,54683],{"class":54373},[162,67646,54380],{"class":168},[162,67648,67649,67651,67653],{"class":164,"line":19990},[162,67650,55215],{"class":168},[162,67652,54885],{"class":54373},[162,67654,54380],{"class":168},[162,67656,67657],{"class":164,"line":19995},[162,67658,67659],{"class":361},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[162,67661,67662],{"class":164,"line":20000},[162,67663,67664],{"class":361},"    \u002F\u002F 1.1 获取 a 元素 \n",[162,67666,67667,67669,67672,67674,67676,67678,67680,67683],{"class":164,"line":20005},[162,67668,14317],{"class":172},[162,67670,67671],{"class":207}," as",[162,67673,16659],{"class":172},[162,67675,57466],{"class":168},[162,67677,58750],{"class":5082},[162,67679,604],{"class":168},[162,67681,67682],{"class":179},"'.tab-nav a'",[162,67684,434],{"class":168},[162,67686,67687],{"class":164,"line":20018},[162,67688,67689],{"class":361},"    \u002F\u002F console.log(as) \n",[162,67691,67692,67694,67696,67698,67700,67702,67704,67706,67708,67711,67713,67715,67717],{"class":164,"line":20023},[162,67693,6315],{"class":172},[162,67695,1003],{"class":168},[162,67697,54918],{"class":172},[162,67699,2642],{"class":168},[162,67701,173],{"class":172},[162,67703,2717],{"class":207},[162,67705,12546],{"class":168},[162,67707,4187],{"class":172},[162,67709,67710],{"class":168}," as.",[162,67712,55039],{"class":207},[162,67714,6328],{"class":168},[162,67716,5410],{"class":172},[162,67718,15537],{"class":168},[162,67720,67721],{"class":164,"line":35709},[162,67722,67723],{"class":361},"      \u002F\u002F console.log(as[i])\n",[162,67725,67726],{"class":164,"line":35715},[162,67727,67728],{"class":361},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[162,67730,67731,67734,67736,67738,67741,67743,67745],{"class":164,"line":35721},[162,67732,67733],{"class":168},"      as[i].",[162,67735,60882],{"class":5082},[162,67737,604],{"class":168},[162,67739,67740],{"class":179},"'mouseenter'",[162,67742,183],{"class":168},[162,67744,57519],{"class":172},[162,67746,57522],{"class":168},[162,67748,67749],{"class":164,"line":35727},[162,67750,67751],{"class":361},"        \u002F\u002F console.log('鼠标经过')\n",[162,67753,67754],{"class":164,"line":35733},[162,67755,67756],{"class":361},"        \u002F\u002F 排他思想  \n",[162,67758,67759],{"class":164,"line":35744},[162,67760,67761],{"class":361},"        \u002F\u002F 干掉别人 移除类active\n",[162,67763,67764,67766,67768,67770,67773,67775,67777,67779,67782],{"class":164,"line":35750},[162,67765,54996],{"class":168},[162,67767,57469],{"class":5082},[162,67769,604],{"class":168},[162,67771,67772],{"class":179},"'.tab-nav .active'",[162,67774,60072],{"class":168},[162,67776,60075],{"class":5082},[162,67778,604],{"class":168},[162,67780,67781],{"class":179},"'active'",[162,67783,434],{"class":168},[162,67785,67786],{"class":164,"line":35770},[162,67787,67788],{"class":361},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[162,67790,67791,67794,67797,67799,67801,67803],{"class":164,"line":35776},[162,67792,67793],{"class":207},"        this",[162,67795,67796],{"class":168},".classList.",[162,67798,8441],{"class":5082},[162,67800,604],{"class":168},[162,67802,67781],{"class":179},[162,67804,434],{"class":168},[162,67806,67807],{"class":164,"line":35787},[162,67808,301],{"emptyLinePlaceholder":300},[162,67810,67811],{"class":164,"line":35793},[162,67812,67813],{"class":361},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[162,67815,67816],{"class":164,"line":35799},[162,67817,67818],{"class":361},"        \u002F\u002F 干掉别人\n",[162,67820,67821,67823,67825,67827,67830,67832,67834,67836,67838],{"class":164,"line":35805},[162,67822,54996],{"class":168},[162,67824,57469],{"class":5082},[162,67826,604],{"class":168},[162,67828,67829],{"class":179},"'.tab-content .active'",[162,67831,60072],{"class":168},[162,67833,60075],{"class":5082},[162,67835,604],{"class":168},[162,67837,67781],{"class":179},[162,67839,434],{"class":168},[162,67841,67842],{"class":164,"line":35811},[162,67843,67844],{"class":361},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[162,67846,67847,67849,67851,67853,67856,67858,67860,67862,67864,67866,67868,67870,67872],{"class":164,"line":35817},[162,67848,54996],{"class":168},[162,67850,57469],{"class":5082},[162,67852,604],{"class":168},[162,67854,67855],{"class":179},"`.tab-content .item:nth-child(${",[162,67857,3732],{"class":168},[162,67859,1239],{"class":172},[162,67861,28210],{"class":207},[162,67863,60101],{"class":179},[162,67865,60072],{"class":168},[162,67867,8441],{"class":5082},[162,67869,604],{"class":168},[162,67871,67781],{"class":179},[162,67873,434],{"class":168},[162,67875,67876],{"class":164,"line":35823},[162,67877,301],{"emptyLinePlaceholder":300},[162,67879,67880],{"class":164,"line":35829},[162,67881,67882],{"class":168},"      })\n",[162,67884,67885],{"class":164,"line":35849},[162,67886,5305],{"class":168},[162,67888,67889,67891,67893],{"class":164,"line":35855},[162,67890,55487],{"class":168},[162,67892,54885],{"class":54373},[162,67894,54380],{"class":168},[162,67896,67897,67899,67901],{"class":164,"line":35871},[162,67898,54857],{"class":168},[162,67900,54872],{"class":54373},[162,67902,54380],{"class":168},[162,67904,67905],{"class":164,"line":35877},[162,67906,301],{"emptyLinePlaceholder":300},[162,67908,67909,67911,67913],{"class":164,"line":35891},[162,67910,54857],{"class":168},[162,67912,53708],{"class":54373},[162,67914,54380],{"class":168},[19,67916,67917],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,67919,67920],{},"在监听事件中，this指向的就是他的调用者",[19,67922,67923],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,67925,56790],{},[19,67927,67928],{},"(function () {",[19,67930,67931],{},"const list = document.querySelector('.xtx-elevator-list')",[19,67933,67934],{},"list.addEventListener('click', function (e) {",[19,67936,67937],{},"if (e.target.tagName === 'A') {",[19,67939,67940],{},"\u002F\u002F 排他思想",[19,67942,67943],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,67945,67946],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,67948,67949],{},"\u002F\u002F console.log(old);",[19,67951,67952],{},"\u002F\u002F 判断",[19,67954,67955],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,67957,67958],{},"if (old) old.classList.remove('active')",[19,67960,67961],{},"e.target.classList.add('active')",[19,67963,976],{},[19,67965,55534],{},[19,67967,67968],{},"})();",[3284,67970,67972],{"id":67971},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[153,67974,67976],{"className":53706,"code":67975,"language":53708,"meta":158,"style":158},"\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",[71,67977,67978,67988,67992,68000,68004,68018,68032,68044,68052,68058,68068,68078,68082,68086,68093,68105,68116,68133,68146,68160,68170,68174,68178,68185,68196,68214,68224,68236,68240,68244,68251,68268,68279,68291,68295,68299,68306,68318,68322,68330,68338,68342,68350,68358,68366,68381,68425,68433,68446,68459,68472,68480,68488,68496,68524,68532,68544,68557,68570,68578,68586,68594,68620,68628,68641,68653,68666,68674,68682,68690,68716,68724,68737,68749,68762,68770,68778,68786,68791,68811,68816,68836,68841,68858,68863,68871,68876,68905,68918,68922,68926,68931,68935,68963,68968,68985,68990,68995,69000,69005,69031,69035,69039,69047,69055,69059],{"__ignoreMap":158},[162,67979,67980,67982,67984,67986],{"class":164,"line":165},[162,67981,54370],{"class":168},[162,67983,54374],{"class":54373},[162,67985,54377],{"class":5082},[162,67987,54380],{"class":168},[162,67989,67990],{"class":164,"line":197},[162,67991,301],{"emptyLinePlaceholder":300},[162,67993,67994,67996,67998],{"class":164,"line":228},[162,67995,4187],{"class":168},[162,67997,53708],{"class":54373},[162,67999,54380],{"class":168},[162,68001,68002],{"class":164,"line":252},[162,68003,301],{"emptyLinePlaceholder":300},[162,68005,68006,68008,68010,68012,68014,68016],{"class":164,"line":328},[162,68007,4187],{"class":168},[162,68009,54407],{"class":54373},[162,68011,54389],{"class":5082},[162,68013,173],{"class":168},[162,68015,54394],{"class":179},[162,68017,54380],{"class":168},[162,68019,68020,68022,68024,68026,68028,68030],{"class":164,"line":466},[162,68021,55215],{"class":168},[162,68023,54417],{"class":54373},[162,68025,54420],{"class":5082},[162,68027,173],{"class":168},[162,68029,54425],{"class":179},[162,68031,54380],{"class":168},[162,68033,68034,68036,68038,68040,68042],{"class":164,"line":471},[162,68035,55215],{"class":168},[162,68037,54480],{"class":54373},[162,68039,58384],{"class":168},[162,68041,54480],{"class":54373},[162,68043,54380],{"class":168},[162,68045,68046,68048,68050],{"class":164,"line":687},[162,68047,55215],{"class":168},[162,68049,3219],{"class":54373},[162,68051,54380],{"class":168},[162,68053,68054,68056],{"class":164,"line":692},[162,68055,9509],{"class":54373},[162,68057,1722],{"class":168},[162,68059,68060,68062,68064,68066],{"class":164,"line":698},[162,68061,57776],{"class":207},[162,68063,1730],{"class":168},[162,68065,312],{"class":207},[162,68067,4433],{"class":168},[162,68069,68070,68072,68074,68076],{"class":164,"line":2955},[162,68071,57765],{"class":207},[162,68073,1730],{"class":168},[162,68075,312],{"class":207},[162,68077,4433],{"class":168},[162,68079,68080],{"class":164,"line":2960},[162,68081,5305],{"class":168},[162,68083,68084],{"class":164,"line":2971},[162,68085,301],{"emptyLinePlaceholder":300},[162,68087,68088,68091],{"class":164,"line":2984},[162,68089,68090],{"class":54373},"    table",[162,68092,1722],{"class":168},[162,68094,68095,68098,68100,68103],{"class":164,"line":2989},[162,68096,68097],{"class":207},"      border-collapse",[162,68099,1730],{"class":168},[162,68101,68102],{"class":207},"collapse",[162,68104,4433],{"class":168},[162,68106,68107,68110,68112,68114],{"class":164,"line":3011},[162,68108,68109],{"class":207},"      border-spacing",[162,68111,1730],{"class":168},[162,68113,312],{"class":207},[162,68115,4433],{"class":168},[162,68117,68118,68120,68122,68124,68126,68128,68131],{"class":164,"line":3022},[162,68119,65045],{"class":207},[162,68121,1730],{"class":168},[162,68123,208],{"class":207},[162,68125,54564],{"class":172},[162,68127,54593],{"class":207},[162,68129,68130],{"class":207}," #c0c0c0",[162,68132,4433],{"class":168},[162,68134,68135,68137,68139,68142,68144],{"class":164,"line":3027},[162,68136,57841],{"class":207},[162,68138,1730],{"class":168},[162,68140,68141],{"class":207},"500",[162,68143,54564],{"class":172},[162,68145,4433],{"class":168},[162,68147,68148,68150,68152,68154,68156,68158],{"class":164,"line":3046},[162,68149,57776],{"class":207},[162,68151,1730],{"class":168},[162,68153,3608],{"class":207},[162,68155,54564],{"class":172},[162,68157,54628],{"class":207},[162,68159,4433],{"class":168},[162,68161,68162,68164,68166,68168],{"class":164,"line":3052},[162,68163,60355],{"class":207},[162,68165,1730],{"class":168},[162,68167,54664],{"class":207},[162,68169,4433],{"class":168},[162,68171,68172],{"class":164,"line":3057},[162,68173,5305],{"class":168},[162,68175,68176],{"class":164,"line":3072},[162,68177,301],{"emptyLinePlaceholder":300},[162,68179,68180,68183],{"class":164,"line":3077},[162,68181,68182],{"class":54373},"    th",[162,68184,1722],{"class":168},[162,68186,68187,68189,68191,68194],{"class":164,"line":3100},[162,68188,57954],{"class":207},[162,68190,1730],{"class":168},[162,68192,68193],{"class":207},"#09c",[162,68195,4433],{"class":168},[162,68197,68198,68201,68203,68205,68207,68209,68212],{"class":164,"line":3140},[162,68199,68200],{"class":207},"      font",[162,68202,1730],{"class":168},[162,68204,65407],{"class":207},[162,68206,67140],{"class":207},[162,68208,54564],{"class":172},[162,68210,68211],{"class":179}," \"微软雅黑\"",[162,68213,4433],{"class":168},[162,68215,68216,68218,68220,68222],{"class":164,"line":4878},[162,68217,60485],{"class":207},[162,68219,1730],{"class":168},[162,68221,63910],{"class":207},[162,68223,4433],{"class":168},[162,68225,68226,68228,68230,68232,68234],{"class":164,"line":4883},[162,68227,57855],{"class":207},[162,68229,1730],{"class":168},[162,68231,4082],{"class":207},[162,68233,54564],{"class":172},[162,68235,4433],{"class":168},[162,68237,68238],{"class":164,"line":4897},[162,68239,5305],{"class":168},[162,68241,68242],{"class":164,"line":4902},[162,68243,301],{"emptyLinePlaceholder":300},[162,68245,68246,68249],{"class":164,"line":5694},[162,68247,68248],{"class":54373},"    td",[162,68250,1722],{"class":168},[162,68252,68253,68255,68257,68259,68261,68263,68266],{"class":164,"line":5708},[162,68254,65045],{"class":207},[162,68256,1730],{"class":168},[162,68258,208],{"class":207},[162,68260,54564],{"class":172},[162,68262,54593],{"class":207},[162,68264,68265],{"class":207}," #d0d0d0",[162,68267,4433],{"class":168},[162,68269,68270,68272,68274,68277],{"class":164,"line":5716},[162,68271,60485],{"class":207},[162,68273,1730],{"class":168},[162,68275,68276],{"class":207},"#404060",[162,68278,4433],{"class":168},[162,68280,68281,68283,68285,68287,68289],{"class":164,"line":5721},[162,68282,57765],{"class":207},[162,68284,1730],{"class":168},[162,68286,1006],{"class":207},[162,68288,54564],{"class":172},[162,68290,4433],{"class":168},[162,68292,68293],{"class":164,"line":5727},[162,68294,5305],{"class":168},[162,68296,68297],{"class":164,"line":5733},[162,68298,301],{"emptyLinePlaceholder":300},[162,68300,68301,68304],{"class":164,"line":5738},[162,68302,68303],{"class":5082},"    .allCheck",[162,68305,1722],{"class":168},[162,68307,68308,68310,68312,68314,68316],{"class":164,"line":11052},[162,68309,57841],{"class":207},[162,68311,1730],{"class":168},[162,68313,3899],{"class":207},[162,68315,54564],{"class":172},[162,68317,4433],{"class":168},[162,68319,68320],{"class":164,"line":11076},[162,68321,5305],{"class":168},[162,68323,68324,68326,68328],{"class":164,"line":11081},[162,68325,55487],{"class":168},[162,68327,3219],{"class":54373},[162,68329,54380],{"class":168},[162,68331,68332,68334,68336],{"class":164,"line":11087},[162,68333,54857],{"class":168},[162,68335,54407],{"class":54373},[162,68337,54380],{"class":168},[162,68339,68340],{"class":164,"line":11114},[162,68341,301],{"emptyLinePlaceholder":300},[162,68343,68344,68346,68348],{"class":164,"line":11119},[162,68345,4187],{"class":168},[162,68347,54872],{"class":54373},[162,68349,54380],{"class":168},[162,68351,68352,68354,68356],{"class":164,"line":11125},[162,68353,55215],{"class":168},[162,68355,26],{"class":54373},[162,68357,54380],{"class":168},[162,68359,68360,68362,68364],{"class":164,"line":11137},[162,68361,54414],{"class":168},[162,68363,32],{"class":54373},[162,68365,54380],{"class":168},[162,68367,68368,68370,68372,68374,68376,68379],{"class":164,"line":11149},[162,68369,58304],{"class":168},[162,68371,35],{"class":54373},[162,68373,56556],{"class":5082},[162,68375,173],{"class":168},[162,68377,68378],{"class":179},"\"allCheck\"",[162,68380,54380],{"class":168},[162,68382,68383,68385,68387,68389,68391,68393,68395,68397,68399,68401,68403,68406,68409,68411,68413,68415,68418,68421,68423],{"class":164,"line":11161},[162,68384,58372],{"class":168},[162,68386,56891],{"class":54373},[162,68388,56894],{"class":5082},[162,68390,173],{"class":168},[162,68392,56899],{"class":179},[162,68394,18013],{"class":5082},[162,68396,173],{"class":168},[162,68398,10756],{"class":179},[162,68400,18052],{"class":5082},[162,68402,173],{"class":168},[162,68404,68405],{"class":179},"\"checkAll\"",[162,68407,68408],{"class":168},"> \u003C",[162,68410,162],{"class":54373},[162,68412,56556],{"class":5082},[162,68414,173],{"class":168},[162,68416,68417],{"class":179},"\"all\"",[162,68419,68420],{"class":168},">全选\u003C\u002F",[162,68422,162],{"class":54373},[162,68424,54380],{"class":168},[162,68426,68427,68429,68431],{"class":164,"line":12816},[162,68428,58477],{"class":168},[162,68430,35],{"class":54373},[162,68432,54380],{"class":168},[162,68434,68435,68437,68439,68442,68444],{"class":164,"line":12841},[162,68436,58304],{"class":168},[162,68438,35],{"class":54373},[162,68440,68441],{"class":168},">商品\u003C\u002F",[162,68443,35],{"class":54373},[162,68445,54380],{"class":168},[162,68447,68448,68450,68452,68455,68457],{"class":164,"line":12864},[162,68449,58304],{"class":168},[162,68451,35],{"class":54373},[162,68453,68454],{"class":168},">商家\u003C\u002F",[162,68456,35],{"class":54373},[162,68458,54380],{"class":168},[162,68460,68461,68463,68465,68468,68470],{"class":164,"line":12888},[162,68462,58304],{"class":168},[162,68464,35],{"class":54373},[162,68466,68467],{"class":168},">价格\u003C\u002F",[162,68469,35],{"class":54373},[162,68471,54380],{"class":168},[162,68473,68474,68476,68478],{"class":164,"line":12893},[162,68475,54848],{"class":168},[162,68477,32],{"class":54373},[162,68479,54380],{"class":168},[162,68481,68482,68484,68486],{"class":164,"line":12898},[162,68483,54414],{"class":168},[162,68485,32],{"class":54373},[162,68487,54380],{"class":168},[162,68489,68490,68492,68494],{"class":164,"line":12903},[162,68491,58304],{"class":168},[162,68493,56],{"class":54373},[162,68495,54380],{"class":168},[162,68497,68498,68500,68502,68504,68506,68508,68510,68512,68515,68517,68519,68522],{"class":164,"line":12912},[162,68499,58372],{"class":168},[162,68501,56891],{"class":54373},[162,68503,56894],{"class":5082},[162,68505,173],{"class":168},[162,68507,56899],{"class":179},[162,68509,18013],{"class":5082},[162,68511,173],{"class":168},[162,68513,68514],{"class":179},"\"check\"",[162,68516,56556],{"class":5082},[162,68518,173],{"class":168},[162,68520,68521],{"class":179},"\"ck\"",[162,68523,54380],{"class":168},[162,68525,68526,68528,68530],{"class":164,"line":12917},[162,68527,58477],{"class":168},[162,68529,56],{"class":54373},[162,68531,54380],{"class":168},[162,68533,68534,68536,68538,68540,68542],{"class":164,"line":12923},[162,68535,58304],{"class":168},[162,68537,56],{"class":54373},[162,68539,64241],{"class":168},[162,68541,56],{"class":54373},[162,68543,54380],{"class":168},[162,68545,68546,68548,68550,68553,68555],{"class":164,"line":12944},[162,68547,58304],{"class":168},[162,68549,56],{"class":54373},[162,68551,68552],{"class":168},">小米\u003C\u002F",[162,68554,56],{"class":54373},[162,68556,54380],{"class":168},[162,68558,68559,68561,68563,68566,68568],{"class":164,"line":12950},[162,68560,58304],{"class":168},[162,68562,56],{"class":54373},[162,68564,68565],{"class":168},">￥1999\u003C\u002F",[162,68567,56],{"class":54373},[162,68569,54380],{"class":168},[162,68571,68572,68574,68576],{"class":164,"line":12964},[162,68573,54848],{"class":168},[162,68575,32],{"class":54373},[162,68577,54380],{"class":168},[162,68579,68580,68582,68584],{"class":164,"line":12970},[162,68581,54414],{"class":168},[162,68583,32],{"class":54373},[162,68585,54380],{"class":168},[162,68587,68588,68590,68592],{"class":164,"line":12997},[162,68589,58304],{"class":168},[162,68591,56],{"class":54373},[162,68593,54380],{"class":168},[162,68595,68596,68598,68600,68602,68604,68606,68608,68610,68612,68614,68616,68618],{"class":164,"line":13006},[162,68597,58372],{"class":168},[162,68599,56891],{"class":54373},[162,68601,56894],{"class":5082},[162,68603,173],{"class":168},[162,68605,56899],{"class":179},[162,68607,18013],{"class":5082},[162,68609,173],{"class":168},[162,68611,68514],{"class":179},[162,68613,56556],{"class":5082},[162,68615,173],{"class":168},[162,68617,68521],{"class":179},[162,68619,54380],{"class":168},[162,68621,68622,68624,68626],{"class":164,"line":13012},[162,68623,58477],{"class":168},[162,68625,56],{"class":54373},[162,68627,54380],{"class":168},[162,68629,68630,68632,68634,68637,68639],{"class":164,"line":13020},[162,68631,58304],{"class":168},[162,68633,56],{"class":54373},[162,68635,68636],{"class":168},">小米净水器\u003C\u002F",[162,68638,56],{"class":54373},[162,68640,54380],{"class":168},[162,68642,68643,68645,68647,68649,68651],{"class":164,"line":13025},[162,68644,58304],{"class":168},[162,68646,56],{"class":54373},[162,68648,68552],{"class":168},[162,68650,56],{"class":54373},[162,68652,54380],{"class":168},[162,68654,68655,68657,68659,68662,68664],{"class":164,"line":19695},[162,68656,58304],{"class":168},[162,68658,56],{"class":54373},[162,68660,68661],{"class":168},">￥4999\u003C\u002F",[162,68663,56],{"class":54373},[162,68665,54380],{"class":168},[162,68667,68668,68670,68672],{"class":164,"line":19701},[162,68669,54848],{"class":168},[162,68671,32],{"class":54373},[162,68673,54380],{"class":168},[162,68675,68676,68678,68680],{"class":164,"line":19724},[162,68677,54414],{"class":168},[162,68679,32],{"class":54373},[162,68681,54380],{"class":168},[162,68683,68684,68686,68688],{"class":164,"line":19730},[162,68685,58304],{"class":168},[162,68687,56],{"class":54373},[162,68689,54380],{"class":168},[162,68691,68692,68694,68696,68698,68700,68702,68704,68706,68708,68710,68712,68714],{"class":164,"line":19753},[162,68693,58372],{"class":168},[162,68695,56891],{"class":54373},[162,68697,56894],{"class":5082},[162,68699,173],{"class":168},[162,68701,56899],{"class":179},[162,68703,18013],{"class":5082},[162,68705,173],{"class":168},[162,68707,68514],{"class":179},[162,68709,56556],{"class":5082},[162,68711,173],{"class":168},[162,68713,68521],{"class":179},[162,68715,54380],{"class":168},[162,68717,68718,68720,68722],{"class":164,"line":19767},[162,68719,58477],{"class":168},[162,68721,56],{"class":54373},[162,68723,54380],{"class":168},[162,68725,68726,68728,68730,68733,68735],{"class":164,"line":19787},[162,68727,58304],{"class":168},[162,68729,56],{"class":54373},[162,68731,68732],{"class":168},">小米电视\u003C\u002F",[162,68734,56],{"class":54373},[162,68736,54380],{"class":168},[162,68738,68739,68741,68743,68745,68747],{"class":164,"line":19793},[162,68740,58304],{"class":168},[162,68742,56],{"class":54373},[162,68744,68552],{"class":168},[162,68746,56],{"class":54373},[162,68748,54380],{"class":168},[162,68750,68751,68753,68755,68758,68760],{"class":164,"line":19804},[162,68752,58304],{"class":168},[162,68754,56],{"class":54373},[162,68756,68757],{"class":168},">￥5999\u003C\u002F",[162,68759,56],{"class":54373},[162,68761,54380],{"class":168},[162,68763,68764,68766,68768],{"class":164,"line":19827},[162,68765,54848],{"class":168},[162,68767,32],{"class":54373},[162,68769,54380],{"class":168},[162,68771,68772,68774,68776],{"class":164,"line":19849},[162,68773,55487],{"class":168},[162,68775,26],{"class":54373},[162,68777,54380],{"class":168},[162,68779,68780,68782,68784],{"class":164,"line":19854},[162,68781,55215],{"class":168},[162,68783,54885],{"class":54373},[162,68785,54380],{"class":168},[162,68787,68788],{"class":164,"line":19860},[162,68789,68790],{"class":361},"    \u002F\u002F 1. 获取大复选框\n",[162,68792,68793,68795,68798,68800,68802,68804,68806,68809],{"class":164,"line":19874},[162,68794,14317],{"class":172},[162,68796,68797],{"class":207}," checkAll",[162,68799,16659],{"class":172},[162,68801,57466],{"class":168},[162,68803,57469],{"class":5082},[162,68805,604],{"class":168},[162,68807,68808],{"class":179},"'#checkAll'",[162,68810,434],{"class":168},[162,68812,68813],{"class":164,"line":19887},[162,68814,68815],{"class":361},"    \u002F\u002F 2. 获取所有的小复选框\n",[162,68817,68818,68820,68823,68825,68827,68829,68831,68834],{"class":164,"line":19892},[162,68819,14317],{"class":172},[162,68821,68822],{"class":207}," cks",[162,68824,16659],{"class":172},[162,68826,57466],{"class":168},[162,68828,58750],{"class":5082},[162,68830,604],{"class":168},[162,68832,68833],{"class":179},"'.ck'",[162,68835,434],{"class":168},[162,68837,68838],{"class":164,"line":19906},[162,68839,68840],{"class":361},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[162,68842,68843,68846,68848,68850,68852,68854,68856],{"class":164,"line":19911},[162,68844,68845],{"class":168},"    checkAll.",[162,68847,60882],{"class":5082},[162,68849,604],{"class":168},[162,68851,60887],{"class":179},[162,68853,183],{"class":168},[162,68855,57519],{"class":172},[162,68857,57522],{"class":168},[162,68859,68860],{"class":164,"line":19917},[162,68861,68862],{"class":361},"      \u002F\u002F 得到当前大复选框的选中状态\n",[162,68864,68865,68868],{"class":164,"line":19922},[162,68866,68867],{"class":361},"      \u002F\u002F console.log(checkAll.checked)",[162,68869,68870],{"class":361},"  \u002F\u002F 得到 是 true 或者是 false\n",[162,68872,68873],{"class":164,"line":19936},[162,68874,68875],{"class":361},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[162,68877,68878,68880,68882,68884,68886,68888,68890,68892,68894,68897,68899,68901,68903],{"class":164,"line":19941},[162,68879,55354],{"class":172},[162,68881,1003],{"class":168},[162,68883,54918],{"class":172},[162,68885,2642],{"class":168},[162,68887,173],{"class":172},[162,68889,2717],{"class":207},[162,68891,12546],{"class":168},[162,68893,4187],{"class":172},[162,68895,68896],{"class":168}," cks.",[162,68898,55039],{"class":207},[162,68900,6328],{"class":168},[162,68902,5410],{"class":172},[162,68904,15537],{"class":168},[162,68906,68907,68910,68912,68915],{"class":164,"line":19946},[162,68908,68909],{"class":168},"        cks[i].checked ",[162,68911,173],{"class":172},[162,68913,68914],{"class":207}," this",[162,68916,68917],{"class":168},".checked\n",[162,68919,68920],{"class":164,"line":19960},[162,68921,55468],{"class":168},[162,68923,68924],{"class":164,"line":19972},[162,68925,36536],{"class":168},[162,68927,68928],{"class":164,"line":19977},[162,68929,68930],{"class":361},"    \u002F\u002F 5. 小复选框控制大复选框\n",[162,68932,68933],{"class":164,"line":19990},[162,68934,301],{"emptyLinePlaceholder":300},[162,68936,68937,68939,68941,68943,68945,68947,68949,68951,68953,68955,68957,68959,68961],{"class":164,"line":19995},[162,68938,6315],{"class":172},[162,68940,1003],{"class":168},[162,68942,54918],{"class":172},[162,68944,2642],{"class":168},[162,68946,173],{"class":172},[162,68948,2717],{"class":207},[162,68950,12546],{"class":168},[162,68952,4187],{"class":172},[162,68954,68896],{"class":168},[162,68956,55039],{"class":207},[162,68958,6328],{"class":168},[162,68960,5410],{"class":172},[162,68962,15537],{"class":168},[162,68964,68965],{"class":164,"line":20000},[162,68966,68967],{"class":361},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[162,68969,68970,68973,68975,68977,68979,68981,68983],{"class":164,"line":20005},[162,68971,68972],{"class":168},"      cks[i].",[162,68974,60882],{"class":5082},[162,68976,604],{"class":168},[162,68978,60887],{"class":179},[162,68980,183],{"class":168},[162,68982,57519],{"class":172},[162,68984,57522],{"class":168},[162,68986,68987],{"class":164,"line":20018},[162,68988,68989],{"class":361},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[162,68991,68992],{"class":164,"line":20023},[162,68993,68994],{"class":361},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[162,68996,68997],{"class":164,"line":35709},[162,68998,68999],{"class":361},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[162,69001,69002],{"class":164,"line":35715},[162,69003,69004],{"class":361},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[162,69006,69007,69010,69012,69014,69016,69018,69021,69023,69025,69027,69029],{"class":164,"line":35721},[162,69008,69009],{"class":168},"        checkAll.checked ",[162,69011,173],{"class":172},[162,69013,57466],{"class":168},[162,69015,58750],{"class":5082},[162,69017,604],{"class":168},[162,69019,69020],{"class":179},"'.ck:checked'",[162,69022,33910],{"class":168},[162,69024,55039],{"class":207},[162,69026,60975],{"class":172},[162,69028,68896],{"class":168},[162,69030,58900],{"class":207},[162,69032,69033],{"class":164,"line":35727},[162,69034,67882],{"class":168},[162,69036,69037],{"class":164,"line":35733},[162,69038,5305],{"class":168},[162,69040,69041,69043,69045],{"class":164,"line":35744},[162,69042,55487],{"class":168},[162,69044,54885],{"class":54373},[162,69046,54380],{"class":168},[162,69048,69049,69051,69053],{"class":164,"line":35750},[162,69050,54857],{"class":168},[162,69052,54872],{"class":54373},[162,69054,54380],{"class":168},[162,69056,69057],{"class":164,"line":35770},[162,69058,301],{"emptyLinePlaceholder":300},[162,69060,69061,69063,69065],{"class":164,"line":35776},[162,69062,54857],{"class":168},[162,69064,53708],{"class":54373},[162,69066,54380],{"class":168},[19,69068,69069],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,69071,69072],{},"用好之间比较得到的布尔值！！！",[19,69074,69075,69076,69079,69080,1003,69083,946,69085,69088],{},"在 JS 里访问的时候，",[71,69077,69078],{},"checkbox.checked"," 是一个 ",[3453,69081,69082],{},"布尔值",[71,69084,4502],{},[71,69086,69087],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,69090,69091,69092,69095,69096],{},"HTML 的 ",[71,69093,69094],{},"checked=\"checked\""," 只是 ",[3453,69097,69098,69099,69102],{},"初始值；JS 的 ",[71,69100,69101],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,69104,69105],{},"：checked是一个伪类选择器",[19,69107,69108],{},[4602,69109],{"alt":158,"src":69110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,69112,69113,69116],{},[69114,69115],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,69118,69119],{},[4602,69120],{"alt":158,"src":69121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,69123,69125],{"id":69124},"_33-dom事件进阶","3.3 DOM事件进阶",[3284,69127,69129],{"id":69128},"_331-事件流","3.3.1 事件流",[19,69131,69132],{},[4602,69133],{"alt":158,"src":69134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[25089,69136,69138],{"id":69137},"_3311-事件捕获","3.3.1.1 事件捕获",[19,69140,69141],{},[4602,69142],{"alt":158,"src":69143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[153,69145,69147],{"className":53706,"code":69146,"language":53708,"meta":158,"style":158},"\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",[71,69148,69149,69159,69173,69177,69185,69199,69219,69231,69239,69246,69258,69270,69280,69284,69288,69295,69307,69319,69329,69333,69341,69349,69353,69361,69376,69395,69403,69411,69431,69451,69467,69478,69486,69503,69514,69522,69539,69550,69558,69566,69574,69578],{"__ignoreMap":158},[162,69150,69151,69153,69155,69157],{"class":164,"line":165},[162,69152,54370],{"class":168},[162,69154,54374],{"class":54373},[162,69156,54377],{"class":5082},[162,69158,54380],{"class":168},[162,69160,69161,69163,69165,69167,69169,69171],{"class":164,"line":197},[162,69162,4187],{"class":168},[162,69164,53708],{"class":54373},[162,69166,54389],{"class":5082},[162,69168,173],{"class":168},[162,69170,54394],{"class":179},[162,69172,54380],{"class":168},[162,69174,69175],{"class":164,"line":228},[162,69176,301],{"emptyLinePlaceholder":300},[162,69178,69179,69181,69183],{"class":164,"line":252},[162,69180,4187],{"class":168},[162,69182,54407],{"class":54373},[162,69184,54380],{"class":168},[162,69186,69187,69189,69191,69193,69195,69197],{"class":164,"line":328},[162,69188,55215],{"class":168},[162,69190,54417],{"class":54373},[162,69192,54420],{"class":5082},[162,69194,173],{"class":168},[162,69196,54425],{"class":179},[162,69198,54380],{"class":168},[162,69200,69201,69203,69205,69207,69209,69211,69213,69215,69217],{"class":164,"line":466},[162,69202,55215],{"class":168},[162,69204,54417],{"class":54373},[162,69206,18013],{"class":5082},[162,69208,173],{"class":168},[162,69210,54464],{"class":179},[162,69212,54444],{"class":5082},[162,69214,173],{"class":168},[162,69216,54471],{"class":179},[162,69218,54380],{"class":168},[162,69220,69221,69223,69225,69227,69229],{"class":164,"line":471},[162,69222,55215],{"class":168},[162,69224,54480],{"class":54373},[162,69226,54483],{"class":168},[162,69228,54480],{"class":54373},[162,69230,54380],{"class":168},[162,69232,69233,69235,69237],{"class":164,"line":687},[162,69234,55215],{"class":168},[162,69236,3219],{"class":54373},[162,69238,54380],{"class":168},[162,69240,69241,69244],{"class":164,"line":692},[162,69242,69243],{"class":5082},"    .father",[162,69245,1722],{"class":168},[162,69247,69248,69250,69252,69254,69256],{"class":164,"line":698},[162,69249,57841],{"class":207},[162,69251,1730],{"class":168},[162,69253,68141],{"class":207},[162,69255,54564],{"class":172},[162,69257,4433],{"class":168},[162,69259,69260,69262,69264,69266,69268],{"class":164,"line":2955},[162,69261,57855],{"class":207},[162,69263,1730],{"class":168},[162,69265,68141],{"class":207},[162,69267,54564],{"class":172},[162,69269,4433],{"class":168},[162,69271,69272,69274,69276,69278],{"class":164,"line":2960},[162,69273,57954],{"class":207},[162,69275,1730],{"class":168},[162,69277,54717],{"class":207},[162,69279,4433],{"class":168},[162,69281,69282],{"class":164,"line":2971},[162,69283,5305],{"class":168},[162,69285,69286],{"class":164,"line":2984},[162,69287,301],{"emptyLinePlaceholder":300},[162,69289,69290,69293],{"class":164,"line":2989},[162,69291,69292],{"class":5082},"    .son",[162,69294,1722],{"class":168},[162,69296,69297,69299,69301,69303,69305],{"class":164,"line":3011},[162,69298,57841],{"class":207},[162,69300,1730],{"class":168},[162,69302,4845],{"class":207},[162,69304,54564],{"class":172},[162,69306,4433],{"class":168},[162,69308,69309,69311,69313,69315,69317],{"class":164,"line":3022},[162,69310,57855],{"class":207},[162,69312,1730],{"class":168},[162,69314,4845],{"class":207},[162,69316,54564],{"class":172},[162,69318,4433],{"class":168},[162,69320,69321,69323,69325,69327],{"class":164,"line":3027},[162,69322,57954],{"class":207},[162,69324,1730],{"class":168},[162,69326,57959],{"class":207},[162,69328,4433],{"class":168},[162,69330,69331],{"class":164,"line":3046},[162,69332,5305],{"class":168},[162,69334,69335,69337,69339],{"class":164,"line":3052},[162,69336,55487],{"class":168},[162,69338,3219],{"class":54373},[162,69340,54380],{"class":168},[162,69342,69343,69345,69347],{"class":164,"line":3057},[162,69344,54857],{"class":168},[162,69346,54407],{"class":54373},[162,69348,54380],{"class":168},[162,69350,69351],{"class":164,"line":3072},[162,69352,301],{"emptyLinePlaceholder":300},[162,69354,69355,69357,69359],{"class":164,"line":3077},[162,69356,4187],{"class":168},[162,69358,54872],{"class":54373},[162,69360,54380],{"class":168},[162,69362,69363,69365,69367,69369,69371,69374],{"class":164,"line":3100},[162,69364,55215],{"class":168},[162,69366,54683],{"class":54373},[162,69368,56556],{"class":5082},[162,69370,173],{"class":168},[162,69372,69373],{"class":179},"\"father\"",[162,69375,54380],{"class":168},[162,69377,69378,69380,69382,69384,69386,69389,69391,69393],{"class":164,"line":3140},[162,69379,54414],{"class":168},[162,69381,54683],{"class":54373},[162,69383,56556],{"class":5082},[162,69385,173],{"class":168},[162,69387,69388],{"class":179},"\"son\"",[162,69390,58384],{"class":168},[162,69392,54683],{"class":54373},[162,69394,54380],{"class":168},[162,69396,69397,69399,69401],{"class":164,"line":4878},[162,69398,55487],{"class":168},[162,69400,54683],{"class":54373},[162,69402,54380],{"class":168},[162,69404,69405,69407,69409],{"class":164,"line":4883},[162,69406,55215],{"class":168},[162,69408,54885],{"class":54373},[162,69410,54380],{"class":168},[162,69412,69413,69415,69418,69420,69422,69424,69426,69429],{"class":164,"line":4897},[162,69414,14317],{"class":172},[162,69416,69417],{"class":207}," fa",[162,69419,16659],{"class":172},[162,69421,57466],{"class":168},[162,69423,57469],{"class":5082},[162,69425,604],{"class":168},[162,69427,69428],{"class":179},"'.father'",[162,69430,434],{"class":168},[162,69432,69433,69435,69438,69440,69442,69444,69446,69449],{"class":164,"line":4902},[162,69434,14317],{"class":172},[162,69436,69437],{"class":207}," son",[162,69439,16659],{"class":172},[162,69441,57466],{"class":168},[162,69443,57469],{"class":5082},[162,69445,604],{"class":168},[162,69447,69448],{"class":179},"'.son'",[162,69450,434],{"class":168},[162,69452,69453,69455,69457,69459,69461,69463,69465],{"class":164,"line":5694},[162,69454,55477],{"class":168},[162,69456,60882],{"class":5082},[162,69458,604],{"class":168},[162,69460,60887],{"class":179},[162,69462,183],{"class":168},[162,69464,57519],{"class":172},[162,69466,57522],{"class":168},[162,69468,69469,69471,69473,69476],{"class":164,"line":5708},[162,69470,61994],{"class":5082},[162,69472,604],{"class":168},[162,69474,69475],{"class":179},"'woshiu1'",[162,69477,434],{"class":168},[162,69479,69480,69482,69484],{"class":164,"line":5716},[162,69481,57605],{"class":168},[162,69483,4502],{"class":207},[162,69485,434],{"class":168},[162,69487,69488,69491,69493,69495,69497,69499,69501],{"class":164,"line":5721},[162,69489,69490],{"class":168},"    fa.",[162,69492,60882],{"class":5082},[162,69494,604],{"class":168},[162,69496,60887],{"class":179},[162,69498,183],{"class":168},[162,69500,57519],{"class":172},[162,69502,57522],{"class":168},[162,69504,69505,69507,69509,69512],{"class":164,"line":5727},[162,69506,61994],{"class":5082},[162,69508,604],{"class":168},[162,69510,69511],{"class":179},"'1'",[162,69513,434],{"class":168},[162,69515,69516,69518,69520],{"class":164,"line":5733},[162,69517,57605],{"class":168},[162,69519,4502],{"class":207},[162,69521,434],{"class":168},[162,69523,69524,69527,69529,69531,69533,69535,69537],{"class":164,"line":5738},[162,69525,69526],{"class":168},"    son.",[162,69528,60882],{"class":5082},[162,69530,604],{"class":168},[162,69532,60887],{"class":179},[162,69534,183],{"class":168},[162,69536,57519],{"class":172},[162,69538,57522],{"class":168},[162,69540,69541,69543,69545,69548],{"class":164,"line":11052},[162,69542,61994],{"class":5082},[162,69544,604],{"class":168},[162,69546,69547],{"class":179},"'2'",[162,69549,434],{"class":168},[162,69551,69552,69554,69556],{"class":164,"line":11076},[162,69553,57605],{"class":168},[162,69555,4502],{"class":207},[162,69557,434],{"class":168},[162,69559,69560,69562,69564],{"class":164,"line":11081},[162,69561,55487],{"class":168},[162,69563,54885],{"class":54373},[162,69565,54380],{"class":168},[162,69567,69568,69570,69572],{"class":164,"line":11087},[162,69569,54857],{"class":168},[162,69571,54872],{"class":54373},[162,69573,54380],{"class":168},[162,69575,69576],{"class":164,"line":11114},[162,69577,301],{"emptyLinePlaceholder":300},[162,69579,69580,69582,69584],{"class":164,"line":11119},[162,69581,54857],{"class":168},[162,69583,53708],{"class":54373},[162,69585,54380],{"class":168},[19,69587,69588],{},[4602,69589],{"alt":158,"src":69590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,69592,69593],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[25089,69595,69597],{"id":69596},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,69599,69600],{},[4602,69601],{"alt":158,"src":69602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,69604,69605],{},"反着来",[19,69607,69608],{},"注意是同名事件，比如都是‘click’",[25089,69610,69612],{"id":69611},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,69614,69615],{},[4602,69616],{"alt":158,"src":69617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[25089,69619,69621],{"id":69620},"_3314-解绑事件","3.3.1.4 解绑事件",[19,69623,69624],{},[4602,69625],{"alt":158,"src":69626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,69628,69629],{},[4602,69630],{"alt":158,"src":69631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[25089,69633,69635],{"id":69634},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[1452,69637,69638],{},[1455,69639,69640],{},"事件类型的区别",[19,69642,69643],{},[4602,69644],{"alt":158,"src":69645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,69647,69648],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[1452,69650,69651],{"start":197},[1455,69652,69653],{},"注册事件的区别",[19,69655,69656],{},[4602,69657],{"alt":158,"src":69658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[25089,69660,69662],{"id":69661},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,69664,69665],{},[4602,69666],{"alt":158,"src":69667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,69669,69670],{},[4602,69671],{"alt":158,"src":69672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[153,69674,69676],{"className":56137,"code":69675,"language":56139,"meta":158,"style":158},"\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",[71,69677,69678,69686,69703,69726,69734,69739,69744,69749,69753,69761,69769],{"__ignoreMap":158},[162,69679,69680,69682,69684],{"class":164,"line":165},[162,69681,4187],{"class":168},[162,69683,54872],{"class":54373},[162,69685,54380],{"class":168},[162,69687,69688,69690,69693,69696,69698,69701],{"class":164,"line":197},[162,69689,55215],{"class":168},[162,69691,69692],{"class":54373},"form",[162,69694,69695],{"class":5082}," action",[162,69697,173],{"class":168},[162,69699,69700],{"class":179},"\"http:\u002F\u002Fwww.itcast.cn\"",[162,69702,54380],{"class":168},[162,69704,69705,69707,69709,69711,69713,69716,69719,69721,69724],{"class":164,"line":228},[162,69706,54414],{"class":168},[162,69708,56891],{"class":54373},[162,69710,56894],{"class":5082},[162,69712,173],{"class":168},[162,69714,69715],{"class":179},"\"submit\"",[162,69717,69718],{"class":5082}," value",[162,69720,173],{"class":168},[162,69722,69723],{"class":179},"\"免费注册\"",[162,69725,54380],{"class":168},[162,69727,69728,69730,69732],{"class":164,"line":252},[162,69729,54414],{"class":168},[162,69731,54885],{"class":54373},[162,69733,54380],{"class":168},[162,69735,69736],{"class":164,"line":328},[162,69737,69738],{"class":168},"      const form = document.querySelector('form')\n",[162,69740,69741],{"class":164,"line":466},[162,69742,69743],{"class":168},"      form.addEventListener('submit', function (e) {\n",[162,69745,69746],{"class":164,"line":471},[162,69747,69748],{"class":168},"        e.preventDefault()\n",[162,69750,69751],{"class":164,"line":687},[162,69752,67882],{"class":168},[162,69754,69755,69757,69759],{"class":164,"line":692},[162,69756,54848],{"class":168},[162,69758,54885],{"class":54373},[162,69760,54380],{"class":168},[162,69762,69763,69765,69767],{"class":164,"line":698},[162,69764,55487],{"class":168},[162,69766,69692],{"class":54373},[162,69768,54380],{"class":168},[162,69770,69771,69773,69775],{"class":164,"line":2955},[162,69772,54857],{"class":168},[162,69774,54872],{"class":54373},[162,69776,54380],{"class":168},[19,69778,69779],{},"点击不在跳转！！！",[3284,69781,69783],{"id":69782},"_332-事件委托","3.3.2 事件委托",[19,69785,69786],{},[4602,69787],{"alt":158,"src":69788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[153,69790,69792],{"className":53706,"code":69791,"language":53708,"meta":158,"style":158},"\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",[71,69793,69794,69804,69818,69822,69830,69844,69864,69876,69884,69888,69896,69904,69916,69928,69940,69952,69964,69977,69985,69993,69998,70017,70038,70043,70048,70053,70058,70067,70071,70081,70085,70090,70095,70109,70119,70123,70127,70135,70143,70147],{"__ignoreMap":158},[162,69795,69796,69798,69800,69802],{"class":164,"line":165},[162,69797,54370],{"class":168},[162,69799,54374],{"class":54373},[162,69801,54377],{"class":5082},[162,69803,54380],{"class":168},[162,69805,69806,69808,69810,69812,69814,69816],{"class":164,"line":197},[162,69807,4187],{"class":168},[162,69809,53708],{"class":54373},[162,69811,54389],{"class":5082},[162,69813,173],{"class":168},[162,69815,54394],{"class":179},[162,69817,54380],{"class":168},[162,69819,69820],{"class":164,"line":228},[162,69821,301],{"emptyLinePlaceholder":300},[162,69823,69824,69826,69828],{"class":164,"line":252},[162,69825,4187],{"class":168},[162,69827,54407],{"class":54373},[162,69829,54380],{"class":168},[162,69831,69832,69834,69836,69838,69840,69842],{"class":164,"line":328},[162,69833,55215],{"class":168},[162,69835,54417],{"class":54373},[162,69837,54420],{"class":5082},[162,69839,173],{"class":168},[162,69841,54425],{"class":179},[162,69843,54380],{"class":168},[162,69845,69846,69848,69850,69852,69854,69856,69858,69860,69862],{"class":164,"line":466},[162,69847,55215],{"class":168},[162,69849,54417],{"class":54373},[162,69851,18013],{"class":5082},[162,69853,173],{"class":168},[162,69855,54464],{"class":179},[162,69857,54444],{"class":5082},[162,69859,173],{"class":168},[162,69861,54471],{"class":179},[162,69863,54380],{"class":168},[162,69865,69866,69868,69870,69872,69874],{"class":164,"line":471},[162,69867,55215],{"class":168},[162,69869,54480],{"class":54373},[162,69871,54483],{"class":168},[162,69873,54480],{"class":54373},[162,69875,54380],{"class":168},[162,69877,69878,69880,69882],{"class":164,"line":687},[162,69879,54857],{"class":168},[162,69881,54407],{"class":54373},[162,69883,54380],{"class":168},[162,69885,69886],{"class":164,"line":692},[162,69887,301],{"emptyLinePlaceholder":300},[162,69889,69890,69892,69894],{"class":164,"line":698},[162,69891,4187],{"class":168},[162,69893,54872],{"class":54373},[162,69895,54380],{"class":168},[162,69897,69898,69900,69902],{"class":164,"line":2955},[162,69899,55215],{"class":168},[162,69901,4279],{"class":54373},[162,69903,54380],{"class":168},[162,69905,69906,69908,69910,69912,69914],{"class":164,"line":2960},[162,69907,54414],{"class":168},[162,69909,1455],{"class":54373},[162,69911,57036],{"class":168},[162,69913,1455],{"class":54373},[162,69915,54380],{"class":168},[162,69917,69918,69920,69922,69924,69926],{"class":164,"line":2971},[162,69919,54414],{"class":168},[162,69921,1455],{"class":54373},[162,69923,57055],{"class":168},[162,69925,1455],{"class":54373},[162,69927,54380],{"class":168},[162,69929,69930,69932,69934,69936,69938],{"class":164,"line":2984},[162,69931,54414],{"class":168},[162,69933,1455],{"class":54373},[162,69935,57074],{"class":168},[162,69937,1455],{"class":54373},[162,69939,54380],{"class":168},[162,69941,69942,69944,69946,69948,69950],{"class":164,"line":2989},[162,69943,54414],{"class":168},[162,69945,1455],{"class":54373},[162,69947,57093],{"class":168},[162,69949,1455],{"class":54373},[162,69951,54380],{"class":168},[162,69953,69954,69956,69958,69960,69962],{"class":164,"line":3011},[162,69955,54414],{"class":168},[162,69957,1455],{"class":54373},[162,69959,57112],{"class":168},[162,69961,1455],{"class":54373},[162,69963,54380],{"class":168},[162,69965,69966,69968,69970,69973,69975],{"class":164,"line":3022},[162,69967,54414],{"class":168},[162,69969,19],{"class":54373},[162,69971,69972],{"class":168},">我不需要变色\u003C\u002F",[162,69974,19],{"class":54373},[162,69976,54380],{"class":168},[162,69978,69979,69981,69983],{"class":164,"line":3027},[162,69980,55487],{"class":168},[162,69982,4279],{"class":54373},[162,69984,54380],{"class":168},[162,69986,69987,69989,69991],{"class":164,"line":3046},[162,69988,55215],{"class":168},[162,69990,54885],{"class":54373},[162,69992,54380],{"class":168},[162,69994,69995],{"class":164,"line":3052},[162,69996,69997],{"class":361},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[162,69999,70000,70002,70004,70006,70008,70010,70012,70015],{"class":164,"line":3057},[162,70001,14317],{"class":172},[162,70003,64360],{"class":207},[162,70005,16659],{"class":172},[162,70007,57466],{"class":168},[162,70009,57469],{"class":5082},[162,70011,604],{"class":168},[162,70013,70014],{"class":179},"'ul'",[162,70016,434],{"class":168},[162,70018,70019,70022,70024,70026,70028,70030,70032,70034,70036],{"class":164,"line":3072},[162,70020,70021],{"class":168},"    ul.",[162,70023,60882],{"class":5082},[162,70025,604],{"class":168},[162,70027,60887],{"class":179},[162,70029,183],{"class":168},[162,70031,57519],{"class":172},[162,70033,1003],{"class":168},[162,70035,3384],{"class":671},[162,70037,15537],{"class":168},[162,70039,70040],{"class":164,"line":3077},[162,70041,70042],{"class":361},"      \u002F\u002F alert(1)\n",[162,70044,70045],{"class":164,"line":3100},[162,70046,70047],{"class":361},"      \u002F\u002F e.target就是我们点击的对象\n",[162,70049,70050],{"class":164,"line":3140},[162,70051,70052],{"class":361},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[162,70054,70055],{"class":164,"line":4878},[162,70056,70057],{"class":361},"      \u002F\u002F e.target.style.color = 'red'\n",[162,70059,70060,70062,70064],{"class":164,"line":4883},[162,70061,61313],{"class":168},[162,70063,61316],{"class":5082},[162,70065,70066],{"class":168},"(e)\n",[162,70068,70069],{"class":164,"line":4897},[162,70070,301],{"emptyLinePlaceholder":300},[162,70072,70073,70075,70078],{"class":164,"line":4902},[162,70074,61313],{"class":168},[162,70076,70077],{"class":5082},"dir",[162,70079,70080],{"class":168},"(e.target)\n",[162,70082,70083],{"class":164,"line":5694},[162,70084,301],{"emptyLinePlaceholder":300},[162,70086,70087],{"class":164,"line":5708},[162,70088,70089],{"class":361},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[162,70091,70092],{"class":164,"line":5716},[162,70093,70094],{"class":361},"      \u002F\u002F 通过tagName来进行判断\n",[162,70096,70097,70099,70102,70104,70107],{"class":164,"line":5721},[162,70098,57550],{"class":172},[162,70100,70101],{"class":168}," (e.target.tagName ",[162,70103,57556],{"class":172},[162,70105,70106],{"class":179}," 'LI'",[162,70108,15537],{"class":168},[162,70110,70111,70114,70116],{"class":164,"line":5727},[162,70112,70113],{"class":168},"        e.target.style.color ",[162,70115,173],{"class":172},[162,70117,70118],{"class":179}," 'red'\n",[162,70120,70121],{"class":164,"line":5733},[162,70122,55468],{"class":168},[162,70124,70125],{"class":164,"line":5738},[162,70126,36536],{"class":168},[162,70128,70129,70131,70133],{"class":164,"line":11052},[162,70130,55487],{"class":168},[162,70132,54885],{"class":54373},[162,70134,54380],{"class":168},[162,70136,70137,70139,70141],{"class":164,"line":11076},[162,70138,54857],{"class":168},[162,70140,54872],{"class":54373},[162,70142,54380],{"class":168},[162,70144,70145],{"class":164,"line":11081},[162,70146,301],{"emptyLinePlaceholder":300},[162,70148,70149,70151,70153],{"class":164,"line":11087},[162,70150,54857],{"class":168},[162,70152,53708],{"class":54373},[162,70154,54380],{"class":168},[19,70156,70157],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,70159,70160],{},"if(e.target.ragName==='P') {}",[19,70162,70163],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,70165,70166],{},"通过事件委托的方式实现tab栏切换改造：",[19,70168,70169],{},"一定要记住自定义属性！！！！！！",[19,70171,70172],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,70174,70175],{},"id是自定义的属性名",[19,70177,70178],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[153,70180,70182],{"className":53706,"code":70181,"language":53708,"meta":158,"style":158},"\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",[71,70183,70184,70194,70208,70212,70220,70234,70254,70274,70286,70294,70300,70310,70320,70324,70328,70334,70346,70358,70370,70386,70390,70394,70400,70412,70424,70436,70446,70456,70460,70464,70472,70484,70494,70506,70510,70514,70522,70532,70542,70552,70556,70560,70570,70584,70596,70600,70604,70616,70626,70642,70652,70656,70660,70674,70684,70694,70698,70702,70708,70722,70726,70730,70738,70748,70752,70756,70765,70775,70779,70787,70795,70799,70807,70821,70835,70847,70855,70894,70926,70958,70990,71022,71030,71038,71052,71086,71120,71154,71188,71222,71230,71238,71246,71251,71256,71275,71280,71300,71308,71313,71326,71347,71360,71364,71369,71374,71387,71407,71435,71439,71443,71447,71455,71463,71467],{"__ignoreMap":158},[162,70185,70186,70188,70190,70192],{"class":164,"line":165},[162,70187,54370],{"class":168},[162,70189,54374],{"class":54373},[162,70191,54377],{"class":5082},[162,70193,54380],{"class":168},[162,70195,70196,70198,70200,70202,70204,70206],{"class":164,"line":197},[162,70197,4187],{"class":168},[162,70199,53708],{"class":54373},[162,70201,54389],{"class":5082},[162,70203,173],{"class":168},[162,70205,54394],{"class":179},[162,70207,54380],{"class":168},[162,70209,70210],{"class":164,"line":228},[162,70211,301],{"emptyLinePlaceholder":300},[162,70213,70214,70216,70218],{"class":164,"line":252},[162,70215,4187],{"class":168},[162,70217,54407],{"class":54373},[162,70219,54380],{"class":168},[162,70221,70222,70224,70226,70228,70230,70232],{"class":164,"line":328},[162,70223,55215],{"class":168},[162,70225,54417],{"class":54373},[162,70227,54420],{"class":5082},[162,70229,173],{"class":168},[162,70231,54425],{"class":179},[162,70233,62196],{"class":168},[162,70235,70236,70238,70240,70242,70244,70246,70248,70250,70252],{"class":164,"line":466},[162,70237,55215],{"class":168},[162,70239,54417],{"class":54373},[162,70241,54436],{"class":5082},[162,70243,173],{"class":168},[162,70245,54441],{"class":179},[162,70247,54444],{"class":5082},[162,70249,173],{"class":168},[162,70251,54449],{"class":179},[162,70253,62196],{"class":168},[162,70255,70256,70258,70260,70262,70264,70266,70268,70270,70272],{"class":164,"line":471},[162,70257,55215],{"class":168},[162,70259,54417],{"class":54373},[162,70261,18013],{"class":5082},[162,70263,173],{"class":168},[162,70265,54464],{"class":179},[162,70267,54444],{"class":5082},[162,70269,173],{"class":168},[162,70271,54471],{"class":179},[162,70273,62196],{"class":168},[162,70275,70276,70278,70280,70282,70284],{"class":164,"line":687},[162,70277,55215],{"class":168},[162,70279,54480],{"class":54373},[162,70281,66692],{"class":168},[162,70283,54480],{"class":54373},[162,70285,54380],{"class":168},[162,70287,70288,70290,70292],{"class":164,"line":692},[162,70289,55215],{"class":168},[162,70291,3219],{"class":54373},[162,70293,54380],{"class":168},[162,70295,70296,70298],{"class":164,"line":698},[162,70297,9509],{"class":54373},[162,70299,1722],{"class":168},[162,70301,70302,70304,70306,70308],{"class":164,"line":2955},[162,70303,57776],{"class":207},[162,70305,1730],{"class":168},[162,70307,312],{"class":207},[162,70309,4433],{"class":168},[162,70311,70312,70314,70316,70318],{"class":164,"line":2960},[162,70313,57765],{"class":207},[162,70315,1730],{"class":168},[162,70317,312],{"class":207},[162,70319,4433],{"class":168},[162,70321,70322],{"class":164,"line":2971},[162,70323,5305],{"class":168},[162,70325,70326],{"class":164,"line":2984},[162,70327,301],{"emptyLinePlaceholder":300},[162,70329,70330,70332],{"class":164,"line":2989},[162,70331,66743],{"class":5082},[162,70333,1722],{"class":168},[162,70335,70336,70338,70340,70342,70344],{"class":164,"line":3011},[162,70337,57841],{"class":207},[162,70339,1730],{"class":168},[162,70341,66754],{"class":207},[162,70343,54564],{"class":172},[162,70345,4433],{"class":168},[162,70347,70348,70350,70352,70354,70356],{"class":164,"line":3022},[162,70349,57855],{"class":207},[162,70351,1730],{"class":168},[162,70353,66767],{"class":207},[162,70355,54564],{"class":172},[162,70357,4433],{"class":168},[162,70359,70360,70362,70364,70366,70368],{"class":164,"line":3027},[162,70361,57776],{"class":207},[162,70363,1730],{"class":168},[162,70365,1011],{"class":207},[162,70367,54564],{"class":172},[162,70369,4433],{"class":168},[162,70371,70372,70374,70376,70378,70380,70382,70384],{"class":164,"line":3046},[162,70373,65045],{"class":207},[162,70375,1730],{"class":168},[162,70377,208],{"class":207},[162,70379,54564],{"class":172},[162,70381,54593],{"class":207},[162,70383,65312],{"class":207},[162,70385,4433],{"class":168},[162,70387,70388],{"class":164,"line":3052},[162,70389,5305],{"class":168},[162,70391,70392],{"class":164,"line":3057},[162,70393,301],{"emptyLinePlaceholder":300},[162,70395,70396,70398],{"class":164,"line":3072},[162,70397,66812],{"class":5082},[162,70399,1722],{"class":168},[162,70401,70402,70404,70406,70408,70410],{"class":164,"line":3077},[162,70403,57841],{"class":207},[162,70405,1730],{"class":168},[162,70407,3608],{"class":207},[162,70409,2708],{"class":172},[162,70411,4433],{"class":168},[162,70413,70414,70416,70418,70420,70422],{"class":164,"line":3100},[162,70415,57855],{"class":207},[162,70417,1730],{"class":168},[162,70419,4184],{"class":207},[162,70421,54564],{"class":172},[162,70423,4433],{"class":168},[162,70425,70426,70428,70430,70432,70434],{"class":164,"line":3140},[162,70427,60428],{"class":207},[162,70429,1730],{"class":168},[162,70431,4184],{"class":207},[162,70433,54564],{"class":172},[162,70435,4433],{"class":168},[162,70437,70438,70440,70442,70444],{"class":164,"line":4878},[162,70439,58079],{"class":207},[162,70441,1730],{"class":168},[162,70443,54549],{"class":207},[162,70445,4433],{"class":168},[162,70447,70448,70450,70452,70454],{"class":164,"line":4883},[162,70449,58090],{"class":207},[162,70451,1730],{"class":168},[162,70453,54740],{"class":207},[162,70455,4433],{"class":168},[162,70457,70458],{"class":164,"line":4897},[162,70459,5305],{"class":168},[162,70461,70462],{"class":164,"line":4902},[162,70463,301],{"emptyLinePlaceholder":300},[162,70465,70466,70468,70470],{"class":164,"line":5694},[162,70467,66812],{"class":5082},[162,70469,66885],{"class":54373},[162,70471,1722],{"class":168},[162,70473,70474,70476,70478,70480,70482],{"class":164,"line":5708},[162,70475,57992],{"class":207},[162,70477,1730],{"class":168},[162,70479,4082],{"class":207},[162,70481,54564],{"class":172},[162,70483,4433],{"class":168},[162,70485,70486,70488,70490,70492],{"class":164,"line":5716},[162,70487,65402],{"class":207},[162,70489,1730],{"class":168},[162,70491,66908],{"class":207},[162,70493,4433],{"class":168},[162,70495,70496,70498,70500,70502,70504],{"class":164,"line":5721},[162,70497,65068],{"class":207},[162,70499,1730],{"class":168},[162,70501,1011],{"class":207},[162,70503,54564],{"class":172},[162,70505,4433],{"class":168},[162,70507,70508],{"class":164,"line":5727},[162,70509,5305],{"class":168},[162,70511,70512],{"class":164,"line":5733},[162,70513,301],{"emptyLinePlaceholder":300},[162,70515,70516,70518,70520],{"class":164,"line":5738},[162,70517,66812],{"class":5082},[162,70519,64360],{"class":54373},[162,70521,1722],{"class":168},[162,70523,70524,70526,70528,70530],{"class":164,"line":11052},[162,70525,57802],{"class":207},[162,70527,1730],{"class":168},[162,70529,57807],{"class":207},[162,70531,4433],{"class":168},[162,70533,70534,70536,70538,70540],{"class":164,"line":11076},[162,70535,58079],{"class":207},[162,70537,1730],{"class":168},[162,70539,54549],{"class":207},[162,70541,4433],{"class":168},[162,70543,70544,70546,70548,70550],{"class":164,"line":11081},[162,70545,58090],{"class":207},[162,70547,1730],{"class":168},[162,70549,54652],{"class":207},[162,70551,4433],{"class":168},[162,70553,70554],{"class":164,"line":11087},[162,70555,5305],{"class":168},[162,70557,70558],{"class":164,"line":11114},[162,70559,301],{"emptyLinePlaceholder":300},[162,70561,70562,70564,70566,70568],{"class":164,"line":11119},[162,70563,66812],{"class":5082},[162,70565,64360],{"class":54373},[162,70567,58145],{"class":54373},[162,70569,1722],{"class":168},[162,70571,70572,70574,70576,70578,70580,70582],{"class":164,"line":11125},[162,70573,57776],{"class":207},[162,70575,1730],{"class":168},[162,70577,312],{"class":207},[162,70579,12053],{"class":207},[162,70581,54564],{"class":172},[162,70583,4433],{"class":168},[162,70585,70586,70588,70590,70592,70594],{"class":164,"line":11137},[162,70587,57992],{"class":207},[162,70589,1730],{"class":168},[162,70591,3838],{"class":207},[162,70593,54564],{"class":172},[162,70595,4433],{"class":168},[162,70597,70598],{"class":164,"line":11149},[162,70599,5305],{"class":168},[162,70601,70602],{"class":164,"line":11161},[162,70603,301],{"emptyLinePlaceholder":300},[162,70605,70606,70608,70610,70612,70614],{"class":164,"line":12816},[162,70607,66812],{"class":5082},[162,70609,64360],{"class":54373},[162,70611,58145],{"class":54373},[162,70613,4538],{"class":54373},[162,70615,1722],{"class":168},[162,70617,70618,70620,70622,70624],{"class":164,"line":12841},[162,70619,67037],{"class":207},[162,70621,1730],{"class":168},[162,70623,57807],{"class":207},[162,70625,4433],{"class":168},[162,70627,70628,70630,70632,70634,70636,70638,70640],{"class":164,"line":12864},[162,70629,65300],{"class":207},[162,70631,1730],{"class":168},[162,70633,213],{"class":207},[162,70635,54564],{"class":172},[162,70637,54593],{"class":207},[162,70639,67058],{"class":207},[162,70641,4433],{"class":168},[162,70643,70644,70646,70648,70650],{"class":164,"line":12888},[162,70645,60485],{"class":207},[162,70647,1730],{"class":168},[162,70649,65437],{"class":207},[162,70651,4433],{"class":168},[162,70653,70654],{"class":164,"line":12893},[162,70655,5305],{"class":168},[162,70657,70658],{"class":164,"line":12898},[162,70659,301],{"emptyLinePlaceholder":300},[162,70661,70662,70664,70666,70668,70670,70672],{"class":164,"line":12903},[162,70663,66812],{"class":5082},[162,70665,64360],{"class":54373},[162,70667,58145],{"class":54373},[162,70669,4538],{"class":54373},[162,70671,67091],{"class":5082},[162,70673,1722],{"class":168},[162,70675,70676,70678,70680,70682],{"class":164,"line":12912},[162,70677,64859],{"class":207},[162,70679,1730],{"class":168},[162,70681,67102],{"class":207},[162,70683,4433],{"class":168},[162,70685,70686,70688,70690,70692],{"class":164,"line":12917},[162,70687,60485],{"class":207},[162,70689,1730],{"class":168},[162,70691,67102],{"class":207},[162,70693,4433],{"class":168},[162,70695,70696],{"class":164,"line":12923},[162,70697,5305],{"class":168},[162,70699,70700],{"class":164,"line":12944},[162,70701,301],{"emptyLinePlaceholder":300},[162,70703,70704,70706],{"class":164,"line":12950},[162,70705,67127],{"class":5082},[162,70707,1722],{"class":168},[162,70709,70710,70712,70714,70716,70718,70720],{"class":164,"line":12964},[162,70711,57765],{"class":207},[162,70713,1730],{"class":168},[162,70715,312],{"class":207},[162,70717,67140],{"class":207},[162,70719,54564],{"class":172},[162,70721,4433],{"class":168},[162,70723,70724],{"class":164,"line":12970},[162,70725,5305],{"class":168},[162,70727,70728],{"class":164,"line":12997},[162,70729,301],{"emptyLinePlaceholder":300},[162,70731,70732,70734,70736],{"class":164,"line":13006},[162,70733,67127],{"class":5082},[162,70735,65242],{"class":5082},[162,70737,1722],{"class":168},[162,70739,70740,70742,70744,70746],{"class":164,"line":13012},[162,70741,58079],{"class":207},[162,70743,1730],{"class":168},[162,70745,57807],{"class":207},[162,70747,4433],{"class":168},[162,70749,70750],{"class":164,"line":13020},[162,70751,5305],{"class":168},[162,70753,70754],{"class":164,"line":13025},[162,70755,301],{"emptyLinePlaceholder":300},[162,70757,70758,70760,70763],{"class":164,"line":19695},[162,70759,67127],{"class":5082},[162,70761,70762],{"class":5082}," .active",[162,70764,1722],{"class":168},[162,70766,70767,70769,70771,70773],{"class":164,"line":19701},[162,70768,58079],{"class":207},[162,70770,1730],{"class":168},[162,70772,63937],{"class":207},[162,70774,4433],{"class":168},[162,70776,70777],{"class":164,"line":19724},[162,70778,5305],{"class":168},[162,70780,70781,70783,70785],{"class":164,"line":19730},[162,70782,55487],{"class":168},[162,70784,3219],{"class":54373},[162,70786,54380],{"class":168},[162,70788,70789,70791,70793],{"class":164,"line":19753},[162,70790,54857],{"class":168},[162,70792,54407],{"class":54373},[162,70794,54380],{"class":168},[162,70796,70797],{"class":164,"line":19767},[162,70798,301],{"emptyLinePlaceholder":300},[162,70800,70801,70803,70805],{"class":164,"line":19787},[162,70802,4187],{"class":168},[162,70804,54872],{"class":54373},[162,70806,54380],{"class":168},[162,70808,70809,70811,70813,70815,70817,70819],{"class":164,"line":19793},[162,70810,55215],{"class":168},[162,70812,54683],{"class":54373},[162,70814,56556],{"class":5082},[162,70816,173],{"class":168},[162,70818,67242],{"class":179},[162,70820,54380],{"class":168},[162,70822,70823,70825,70827,70829,70831,70833],{"class":164,"line":19804},[162,70824,54414],{"class":168},[162,70826,54683],{"class":54373},[162,70828,56556],{"class":5082},[162,70830,173],{"class":168},[162,70832,67257],{"class":179},[162,70834,54380],{"class":168},[162,70836,70837,70839,70841,70843,70845],{"class":164,"line":19827},[162,70838,58304],{"class":168},[162,70840,3284],{"class":54373},[162,70842,67268],{"class":168},[162,70844,3284],{"class":54373},[162,70846,54380],{"class":168},[162,70848,70849,70851,70853],{"class":164,"line":19849},[162,70850,58304],{"class":168},[162,70852,4279],{"class":54373},[162,70854,54380],{"class":168},[162,70856,70857,70859,70861,70863,70865,70867,70869,70871,70873,70875,70877,70879,70881,70884,70886,70888,70890,70892],{"class":164,"line":19854},[162,70858,58372],{"class":168},[162,70860,1455],{"class":54373},[162,70862,64120],{"class":168},[162,70864,3538],{"class":54373},[162,70866,56556],{"class":5082},[162,70868,173],{"class":168},[162,70870,62775],{"class":179},[162,70872,64125],{"class":5082},[162,70874,173],{"class":168},[162,70876,67303],{"class":179},[162,70878,57021],{"class":5082},[162,70880,173],{"class":168},[162,70882,70883],{"class":179},"\"0\"",[162,70885,67306],{"class":168},[162,70887,3538],{"class":54373},[162,70889,58384],{"class":168},[162,70891,1455],{"class":54373},[162,70893,54380],{"class":168},[162,70895,70896,70898,70900,70902,70904,70906,70908,70910,70912,70914,70916,70918,70920,70922,70924],{"class":164,"line":19860},[162,70897,58372],{"class":168},[162,70899,1455],{"class":54373},[162,70901,64120],{"class":168},[162,70903,3538],{"class":54373},[162,70905,64125],{"class":5082},[162,70907,173],{"class":168},[162,70909,67303],{"class":179},[162,70911,57021],{"class":5082},[162,70913,173],{"class":168},[162,70915,6792],{"class":179},[162,70917,67333],{"class":168},[162,70919,3538],{"class":54373},[162,70921,58384],{"class":168},[162,70923,1455],{"class":54373},[162,70925,54380],{"class":168},[162,70927,70928,70930,70932,70934,70936,70938,70940,70942,70944,70946,70948,70950,70952,70954,70956],{"class":164,"line":19874},[162,70929,58372],{"class":168},[162,70931,1455],{"class":54373},[162,70933,64120],{"class":168},[162,70935,3538],{"class":54373},[162,70937,64125],{"class":5082},[162,70939,173],{"class":168},[162,70941,67303],{"class":179},[162,70943,57021],{"class":5082},[162,70945,173],{"class":168},[162,70947,6815],{"class":179},[162,70949,67360],{"class":168},[162,70951,3538],{"class":54373},[162,70953,58384],{"class":168},[162,70955,1455],{"class":54373},[162,70957,54380],{"class":168},[162,70959,70960,70962,70964,70966,70968,70970,70972,70974,70976,70978,70980,70982,70984,70986,70988],{"class":164,"line":19887},[162,70961,58372],{"class":168},[162,70963,1455],{"class":54373},[162,70965,64120],{"class":168},[162,70967,3538],{"class":54373},[162,70969,64125],{"class":5082},[162,70971,173],{"class":168},[162,70973,67303],{"class":179},[162,70975,57021],{"class":5082},[162,70977,173],{"class":168},[162,70979,6828],{"class":179},[162,70981,67387],{"class":168},[162,70983,3538],{"class":54373},[162,70985,58384],{"class":168},[162,70987,1455],{"class":54373},[162,70989,54380],{"class":168},[162,70991,70992,70994,70996,70998,71000,71002,71004,71006,71008,71010,71012,71014,71016,71018,71020],{"class":164,"line":19892},[162,70993,58372],{"class":168},[162,70995,1455],{"class":54373},[162,70997,64120],{"class":168},[162,70999,3538],{"class":54373},[162,71001,64125],{"class":5082},[162,71003,173],{"class":168},[162,71005,67303],{"class":179},[162,71007,57021],{"class":5082},[162,71009,173],{"class":168},[162,71011,6841],{"class":179},[162,71013,67414],{"class":168},[162,71015,3538],{"class":54373},[162,71017,58384],{"class":168},[162,71019,1455],{"class":54373},[162,71021,54380],{"class":168},[162,71023,71024,71026,71028],{"class":164,"line":19906},[162,71025,58477],{"class":168},[162,71027,4279],{"class":54373},[162,71029,54380],{"class":168},[162,71031,71032,71034,71036],{"class":164,"line":19911},[162,71033,54848],{"class":168},[162,71035,54683],{"class":54373},[162,71037,54380],{"class":168},[162,71039,71040,71042,71044,71046,71048,71050],{"class":164,"line":19917},[162,71041,54414],{"class":168},[162,71043,54683],{"class":54373},[162,71045,56556],{"class":5082},[162,71047,173],{"class":168},[162,71049,67451],{"class":179},[162,71051,54380],{"class":168},[162,71053,71054,71056,71058,71060,71062,71064,71066,71068,71070,71072,71074,71076,71078,71080,71082,71084],{"class":164,"line":19922},[162,71055,58304],{"class":168},[162,71057,54683],{"class":54373},[162,71059,56556],{"class":5082},[162,71061,173],{"class":168},[162,71063,67466],{"class":179},[162,71065,64120],{"class":168},[162,71067,4602],{"class":54373},[162,71069,58309],{"class":5082},[162,71071,173],{"class":168},[162,71073,67477],{"class":179},[162,71075,58317],{"class":5082},[162,71077,173],{"class":168},[162,71079,10756],{"class":179},[162,71081,67486],{"class":168},[162,71083,54683],{"class":54373},[162,71085,54380],{"class":168},[162,71087,71088,71090,71092,71094,71096,71098,71100,71102,71104,71106,71108,71110,71112,71114,71116,71118],{"class":164,"line":19936},[162,71089,58304],{"class":168},[162,71091,54683],{"class":54373},[162,71093,56556],{"class":5082},[162,71095,173],{"class":168},[162,71097,65691],{"class":179},[162,71099,64120],{"class":168},[162,71101,4602],{"class":54373},[162,71103,58309],{"class":5082},[162,71105,173],{"class":168},[162,71107,67513],{"class":179},[162,71109,58317],{"class":5082},[162,71111,173],{"class":168},[162,71113,10756],{"class":179},[162,71115,67486],{"class":168},[162,71117,54683],{"class":54373},[162,71119,54380],{"class":168},[162,71121,71122,71124,71126,71128,71130,71132,71134,71136,71138,71140,71142,71144,71146,71148,71150,71152],{"class":164,"line":19941},[162,71123,58304],{"class":168},[162,71125,54683],{"class":54373},[162,71127,56556],{"class":5082},[162,71129,173],{"class":168},[162,71131,65691],{"class":179},[162,71133,64120],{"class":168},[162,71135,4602],{"class":54373},[162,71137,58309],{"class":5082},[162,71139,173],{"class":168},[162,71141,67548],{"class":179},[162,71143,58317],{"class":5082},[162,71145,173],{"class":168},[162,71147,10756],{"class":179},[162,71149,67486],{"class":168},[162,71151,54683],{"class":54373},[162,71153,54380],{"class":168},[162,71155,71156,71158,71160,71162,71164,71166,71168,71170,71172,71174,71176,71178,71180,71182,71184,71186],{"class":164,"line":19946},[162,71157,58304],{"class":168},[162,71159,54683],{"class":54373},[162,71161,56556],{"class":5082},[162,71163,173],{"class":168},[162,71165,65691],{"class":179},[162,71167,64120],{"class":168},[162,71169,4602],{"class":54373},[162,71171,58309],{"class":5082},[162,71173,173],{"class":168},[162,71175,67583],{"class":179},[162,71177,58317],{"class":5082},[162,71179,173],{"class":168},[162,71181,10756],{"class":179},[162,71183,67486],{"class":168},[162,71185,54683],{"class":54373},[162,71187,54380],{"class":168},[162,71189,71190,71192,71194,71196,71198,71200,71202,71204,71206,71208,71210,71212,71214,71216,71218,71220],{"class":164,"line":19960},[162,71191,58304],{"class":168},[162,71193,54683],{"class":54373},[162,71195,56556],{"class":5082},[162,71197,173],{"class":168},[162,71199,65691],{"class":179},[162,71201,64120],{"class":168},[162,71203,4602],{"class":54373},[162,71205,58309],{"class":5082},[162,71207,173],{"class":168},[162,71209,67618],{"class":179},[162,71211,58317],{"class":5082},[162,71213,173],{"class":168},[162,71215,10756],{"class":179},[162,71217,67486],{"class":168},[162,71219,54683],{"class":54373},[162,71221,54380],{"class":168},[162,71223,71224,71226,71228],{"class":164,"line":19972},[162,71225,54848],{"class":168},[162,71227,54683],{"class":54373},[162,71229,54380],{"class":168},[162,71231,71232,71234,71236],{"class":164,"line":19977},[162,71233,55487],{"class":168},[162,71235,54683],{"class":54373},[162,71237,54380],{"class":168},[162,71239,71240,71242,71244],{"class":164,"line":19990},[162,71241,55215],{"class":168},[162,71243,54885],{"class":54373},[162,71245,54380],{"class":168},[162,71247,71248],{"class":164,"line":19995},[162,71249,71250],{"class":361},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[162,71252,71253],{"class":164,"line":20000},[162,71254,71255],{"class":361},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[162,71257,71258,71260,71262,71264,71266,71268,71270,71273],{"class":164,"line":20005},[162,71259,14317],{"class":172},[162,71261,64360],{"class":207},[162,71263,16659],{"class":172},[162,71265,57466],{"class":168},[162,71267,57469],{"class":5082},[162,71269,604],{"class":168},[162,71271,71272],{"class":179},"'.tab-nav ul'",[162,71274,434],{"class":168},[162,71276,71277],{"class":164,"line":20018},[162,71278,71279],{"class":361},"    \u002F\u002F 2.添加事件\n",[162,71281,71282,71284,71286,71288,71290,71292,71294,71296,71298],{"class":164,"line":20023},[162,71283,70021],{"class":168},[162,71285,60882],{"class":5082},[162,71287,604],{"class":168},[162,71289,60887],{"class":179},[162,71291,183],{"class":168},[162,71293,57519],{"class":172},[162,71295,1003],{"class":168},[162,71297,3384],{"class":671},[162,71299,15537],{"class":168},[162,71301,71302,71304,71306],{"class":164,"line":35709},[162,71303,61313],{"class":168},[162,71305,70077],{"class":5082},[162,71307,70080],{"class":168},[162,71309,71310],{"class":164,"line":35715},[162,71311,71312],{"class":361},"      \u002F\u002Fe.targer是我们点击的对象\n",[162,71314,71315,71317,71319,71321,71324],{"class":164,"line":35721},[162,71316,57550],{"class":172},[162,71318,70101],{"class":168},[162,71320,57556],{"class":172},[162,71322,71323],{"class":179}," 'A'",[162,71325,15537],{"class":168},[162,71327,71328,71330,71332,71334,71337,71339,71341,71343,71345],{"class":164,"line":35727},[162,71329,54996],{"class":168},[162,71331,57469],{"class":5082},[162,71333,604],{"class":168},[162,71335,71336],{"class":179},"'.active'",[162,71338,60072],{"class":168},[162,71340,60075],{"class":5082},[162,71342,604],{"class":168},[162,71344,67781],{"class":179},[162,71346,434],{"class":168},[162,71348,71349,71352,71354,71356,71358],{"class":164,"line":35733},[162,71350,71351],{"class":168},"        e.target.classList.",[162,71353,8441],{"class":5082},[162,71355,604],{"class":168},[162,71357,67781],{"class":179},[162,71359,434],{"class":168},[162,71361,71362],{"class":164,"line":35744},[162,71363,301],{"emptyLinePlaceholder":300},[162,71365,71366],{"class":164,"line":35750},[162,71367,71368],{"class":361},"        \u002F\u002F 下面大盒子模块\n",[162,71370,71371],{"class":164,"line":35770},[162,71372,71373],{"class":361},"        \u002F\u002F console.log(e.target.dataset.id)\n",[162,71375,71376,71378,71380,71382,71384],{"class":164,"line":35776},[162,71377,64338],{"class":172},[162,71379,6147],{"class":207},[162,71381,16659],{"class":172},[162,71383,1239],{"class":172},[162,71385,71386],{"class":168},"e.target.dataset.id\n",[162,71388,71389,71391,71393,71395,71397,71399,71401,71403,71405],{"class":164,"line":35787},[162,71390,54996],{"class":168},[162,71392,57469],{"class":5082},[162,71394,604],{"class":168},[162,71396,67829],{"class":179},[162,71398,60072],{"class":168},[162,71400,60075],{"class":5082},[162,71402,604],{"class":168},[162,71404,67781],{"class":179},[162,71406,434],{"class":168},[162,71408,71409,71411,71413,71415,71417,71419,71421,71423,71425,71427,71429,71431,71433],{"class":164,"line":35793},[162,71410,54996],{"class":168},[162,71412,57469],{"class":5082},[162,71414,604],{"class":168},[162,71416,67855],{"class":179},[162,71418,3732],{"class":168},[162,71420,1239],{"class":172},[162,71422,28210],{"class":207},[162,71424,60101],{"class":179},[162,71426,60072],{"class":168},[162,71428,8441],{"class":5082},[162,71430,604],{"class":168},[162,71432,67781],{"class":179},[162,71434,434],{"class":168},[162,71436,71437],{"class":164,"line":35799},[162,71438,301],{"emptyLinePlaceholder":300},[162,71440,71441],{"class":164,"line":35805},[162,71442,55468],{"class":168},[162,71444,71445],{"class":164,"line":35811},[162,71446,36536],{"class":168},[162,71448,71449,71451,71453],{"class":164,"line":35817},[162,71450,55487],{"class":168},[162,71452,54885],{"class":54373},[162,71454,54380],{"class":168},[162,71456,71457,71459,71461],{"class":164,"line":35823},[162,71458,54857],{"class":168},[162,71460,54872],{"class":54373},[162,71462,54380],{"class":168},[162,71464,71465],{"class":164,"line":35829},[162,71466,301],{"emptyLinePlaceholder":300},[162,71468,71469,71471,71473],{"class":164,"line":35849},[162,71470,54857],{"class":168},[162,71472,53708],{"class":54373},[162,71474,54380],{"class":168},[3284,71476,71478],{"id":71477},"_333-页面加载事件","3.3.3 页面加载事件",[1452,71480,71481],{},[1455,71482,71483],{},"load",[19,71485,71486],{},[4602,71487],{"alt":158,"src":71488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,71490,71491],{},"window代表整个窗口，比document还要大",[19,71493,71494],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,71496,71497],{},"img.addEventListener('load', function () {",[19,71499,71500],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,71502,55534],{},[1452,71504,71505],{"start":197},[1455,71506,71507],{},"DOMContentLoaded",[19,71509,71510],{},[4602,71511],{"alt":158,"src":71512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,71514,71515],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[3284,71517,71519],{"id":71518},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,71521,71522],{},[4602,71523],{"alt":158,"src":71524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,71526,71527],{},[4602,71528],{"alt":158,"src":71529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,71531,71532],{},[4602,71533],{"alt":158,"src":71534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,71536,71537],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,71539,71540],{},"获得的是数字型数据，不带单位",[19,71542,71543],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,71545,71546],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,71548,71549],{},"它是通过document.documentElement来获取",[19,71551,71552],{},[4602,71553],{"alt":158,"src":71554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,71556,71557],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[3284,71559,71561],{"id":71560},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,71563,71564],{},[4602,71565],{"alt":158,"src":71566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,71568,71569],{},[4602,71570],{"alt":158,"src":71571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[3284,71573,71575],{"id":71574},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,71577,71578],{},[4602,71579],{"alt":158,"src":71580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,71582,71583],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,71585,71586],{},[4602,71587],{"alt":158,"src":71588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,71590,71591],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,71593,71594],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,71596,71597],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,71599,71600],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,71602,71603],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,71605,71606],{},[4602,71607],{"alt":158,"src":71608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,71610,71611],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,71613,71614],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,71616,71617],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,71619,71620],{},"e.pageX-box.getBoundingClientRect()",[3284,71622,71624],{"id":71623},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,71626,71627],{},[4602,71628],{"alt":158,"src":71629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,71631,71632],{},"这个是相对于视口来说的，它是个方法，不是属性值",[3284,71634,71636],{"id":71635},"_338-总结","3.3.8 总结",[19,71638,71639],{},[4602,71640],{"alt":158,"src":71641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,71643,71644],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,71646,71647],{},"修改盒子的宽高只能通过width和height来实现",[3284,71649,71651],{"id":71650},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[153,71653,71655],{"className":53706,"code":71654,"language":53708,"meta":158,"style":158},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[71,71656,71657,71662,71667,71672,71677],{"__ignoreMap":158},[162,71658,71659],{"class":164,"line":165},[162,71660,71661],{"class":168},"\u002F* 页面滑动 *\u002F\n",[162,71663,71664],{"class":164,"line":197},[162,71665,71666],{"class":168},"html {\n",[162,71668,71669],{"class":164,"line":228},[162,71670,71671],{"class":168},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[162,71673,71674],{"class":164,"line":252},[162,71675,71676],{"class":168},"  scroll-behavior: smooth;\n",[162,71678,71679],{"class":164,"line":328},[162,71680,1498],{"class":168},[19,71682,71683],{},"默认是auto",[3284,71685,71687],{"id":71686},"_3310-日期对象","3.3.10 日期对象",[25089,71689,71691],{"id":71690},"_33101-实例化","3.3.10.1 实例化",[19,71693,71694],{},[4602,71695],{"alt":158,"src":71696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[25089,71698,71700],{"id":71699},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,71702,71703],{},[4602,71704],{"alt":158,"src":71705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,71707,71708],{},"月份+1",[19,71710,71711],{},"老外认为第一天为0，星期天",[19,71713,71714],{},"方法使用的时候必须要跟括号",[19,71716,71717],{},"快速获得日期",[19,71719,71720],{},"\u002F\u002F 得到年月日",[19,71722,71723],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,71725,71726],{},"\u002F\u002F 得到当地日期",[19,71728,71729],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,71731,71732],{},"\u002F\u002F 得到当地时间",[19,71734,71735],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,71737,71738],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,71740,71741],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[54885,71743,71744],{},"\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,71746,71747],{},"学会去封装函数！",[25089,71749,71751],{"id":71750},"_33103-时间戳","3.3.10.3 时间戳",[19,71753,71754],{},[4602,71755],{"alt":158,"src":71756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,71758,71759],{},[4602,71760],{"alt":158,"src":71761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,71763,71764],{},"三种方法记住一个就可以",[3284,71766,71768],{"id":71767},"_3311-节点操作","3.3.11 节点操作",[25089,71770,71772],{"id":71771},"_33111-dom节点","3.3.11.1 DOM节点",[19,71774,71775],{},[4602,71776],{"alt":158,"src":71777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,71779,71780],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[25089,71782,71784],{"id":71783},"_33112-查找节点","3.3.11.2 查找节点",[19,71786,71787],{},"前边的document.querySelector()是获取的元素",[19,71789,71790],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,71792,71793],{},[4602,71794],{"alt":158,"src":71795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[1452,71797,71798],{},[1455,71799,71800],{},"父节点",[19,71802,71803],{},[4602,71804],{"alt":158,"src":71805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[1452,71807,71808],{"start":197},[1455,71809,71810],{},"子节点",[19,71812,71813],{},[4602,71814],{"alt":158,"src":71815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,71817,71818],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,71820,71821],{},"children获得的是伪数组，是亲儿子",[1452,71823,71824],{"start":228},[1455,71825,71826],{},"兄弟节点",[19,71828,71829],{},[4602,71830],{"alt":158,"src":71831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[25089,71833,71835],{"id":71834},"_33113-增加节点","3.3.11.3 增加节点",[19,71837,71838],{},[4602,71839],{"alt":158,"src":71840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,71842,71843],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,71845,71846],{},[4602,71847],{"alt":158,"src":71848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,71850,71851],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,71853,71854],{},"下面是写法的部分展示，就按照下边的格式来写",[19,71856,71857],{},"例：",[54885,71859,71860],{},"\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,71862,71863],{},[4602,71864],{"alt":158,"src":71865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,71867,71868],{},"false只克隆标签，里边的内容不会克隆过来",[153,71870,71872],{"className":53706,"code":71871,"language":53708,"meta":158,"style":158},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[71,71873,71874],{"__ignoreMap":158},[162,71875,71876],{"class":164,"line":165},[162,71877,71871],{"class":168},[25089,71879,71881],{"id":71880},"_33114-删除节点","3.3.11.4 删除节点",[19,71883,71884],{},[4602,71885],{"alt":158,"src":71886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,71888,71889],{},"父亲删儿子",[19,71891,71892],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[3284,71894,71896],{"id":71895},"_3312-m端事件","3.3.12 M端事件",[19,71898,71899],{},"M端就是移动端",[19,71901,71902],{},[4602,71903],{"alt":158,"src":71904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[3284,71906,71908],{"id":71907},"_3313-插件","3.3.13 插件",[19,71910,71911],{},"要熟悉官网！！！",[19,71913,71914],{},[3538,71915,71916],{"href":71916,"rel":71917},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[26956],[19,71919,71920],{},[3538,71921,71922],{"href":71922,"rel":71923},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[26956],[3284,71925,71927],{"id":71926},"_3314-学生信息表","3.3.14 学生信息表",[1452,71929,71930,71933,71936,71939,71942,71945,71948,71951],{},[1455,71931,71932],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[1455,71934,71935],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[1455,71937,71938],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[1455,71940,71941],{},"用好表单元素自带的属性，value,name等",[1455,71943,71944],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[1455,71946,71947],{},"不要忘记事件对象",[1455,71949,71950],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[1455,71952,71953],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,71955,71956],{},"结构：",[153,71958,71960],{"className":53706,"code":71959,"language":53708,"meta":158,"style":158},"\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",[71,71961,71962,71972,71986,71990,71998,72012,72032,72053,72066,72090,72098,72102,72110,72123,72144,72172,72199,72204,72226,72246,72265,72273,72301,72323,72342,72362,72382,72402,72422,72430,72450,72458,72462,72475,72483,72491,72499,72512,72525,72538,72551,72564,72577,72590,72598,72606,72614,72619,72624,72629,72634,72639,72644,72649,72654,72659,72664,72669,72674,72679,72687,72695,72703,72707,72727,72746,72766,72786,72806,72826,72830,72835,72855,72860,72870,72875,72880,72900,72922,72927,72937,72941,72945,72950,72955,72984,72998,73013,73017,73021,73025,73030,73041,73054,73059,73064,73069,73074,73079,73083,73088,73093,73102,73107,73112,73124,73129,73136,73140,73145,73155,73160,73170,73175,73203,73224,73234,73254,73272,73289,73306,73323,73340,73344,73354,73359,73364,73369,73380,73384,73388,73392,73397,73402,73423,73435,73440,73445,73450,73464,73469,73476,73480,73484,73492,73496,73504,73508],{"__ignoreMap":158},[162,71963,71964,71966,71968,71970],{"class":164,"line":165},[162,71965,54370],{"class":168},[162,71967,54374],{"class":54373},[162,71969,54377],{"class":5082},[162,71971,54380],{"class":168},[162,71973,71974,71976,71978,71980,71982,71984],{"class":164,"line":197},[162,71975,4187],{"class":168},[162,71977,53708],{"class":54373},[162,71979,54389],{"class":5082},[162,71981,173],{"class":168},[162,71983,54394],{"class":179},[162,71985,54380],{"class":168},[162,71987,71988],{"class":164,"line":228},[162,71989,301],{"emptyLinePlaceholder":300},[162,71991,71992,71994,71996],{"class":164,"line":252},[162,71993,4187],{"class":168},[162,71995,54407],{"class":54373},[162,71997,54380],{"class":168},[162,71999,72000,72002,72004,72006,72008,72010],{"class":164,"line":328},[162,72001,55215],{"class":168},[162,72003,54417],{"class":54373},[162,72005,54420],{"class":5082},[162,72007,173],{"class":168},[162,72009,54425],{"class":179},[162,72011,62196],{"class":168},[162,72013,72014,72016,72018,72020,72022,72024,72026,72028,72030],{"class":164,"line":466},[162,72015,55215],{"class":168},[162,72017,54417],{"class":54373},[162,72019,18013],{"class":5082},[162,72021,173],{"class":168},[162,72023,54464],{"class":179},[162,72025,54444],{"class":5082},[162,72027,173],{"class":168},[162,72029,54471],{"class":179},[162,72031,62196],{"class":168},[162,72033,72034,72036,72038,72040,72042,72044,72046,72048,72051],{"class":164,"line":471},[162,72035,55215],{"class":168},[162,72037,54417],{"class":54373},[162,72039,54436],{"class":5082},[162,72041,173],{"class":168},[162,72043,54441],{"class":179},[162,72045,54444],{"class":5082},[162,72047,173],{"class":168},[162,72049,72050],{"class":179},"\"ie=edge\"",[162,72052,62196],{"class":168},[162,72054,72055,72057,72059,72062,72064],{"class":164,"line":687},[162,72056,55215],{"class":168},[162,72058,54480],{"class":54373},[162,72060,72061],{"class":168},">学生信息管理\u003C\u002F",[162,72063,54480],{"class":54373},[162,72065,54380],{"class":168},[162,72067,72068,72070,72073,72076,72078,72081,72083,72085,72088],{"class":164,"line":692},[162,72069,55215],{"class":168},[162,72071,72072],{"class":54373},"link",[162,72074,72075],{"class":5082}," rel",[162,72077,173],{"class":168},[162,72079,72080],{"class":179},"\"stylesheet\"",[162,72082,64125],{"class":5082},[162,72084,173],{"class":168},[162,72086,72087],{"class":179},"\"css\u002Findex.css\"",[162,72089,62196],{"class":168},[162,72091,72092,72094,72096],{"class":164,"line":698},[162,72093,54857],{"class":168},[162,72095,54407],{"class":54373},[162,72097,54380],{"class":168},[162,72099,72100],{"class":164,"line":2955},[162,72101,301],{"emptyLinePlaceholder":300},[162,72103,72104,72106,72108],{"class":164,"line":2960},[162,72105,4187],{"class":168},[162,72107,54872],{"class":54373},[162,72109,54380],{"class":168},[162,72111,72112,72114,72116,72119,72121],{"class":164,"line":2971},[162,72113,55215],{"class":168},[162,72115,10],{"class":54373},[162,72117,72118],{"class":168},">新增学员\u003C\u002F",[162,72120,10],{"class":54373},[162,72122,54380],{"class":168},[162,72124,72125,72127,72129,72131,72133,72135,72138,72140,72142],{"class":164,"line":2984},[162,72126,55215],{"class":168},[162,72128,69692],{"class":54373},[162,72130,56556],{"class":5082},[162,72132,173],{"class":168},[162,72134,65732],{"class":179},[162,72136,72137],{"class":5082}," autocomplete",[162,72139,173],{"class":168},[162,72141,34855],{"class":179},[162,72143,54380],{"class":168},[162,72145,72146,72149,72151,72153,72155,72157,72159,72161,72164,72166,72168,72170],{"class":164,"line":2989},[162,72147,72148],{"class":168},"    姓名：\u003C",[162,72150,56891],{"class":54373},[162,72152,56894],{"class":5082},[162,72154,173],{"class":168},[162,72156,65766],{"class":179},[162,72158,56556],{"class":5082},[162,72160,173],{"class":168},[162,72162,72163],{"class":179},"\"uname\"",[162,72165,18013],{"class":5082},[162,72167,173],{"class":168},[162,72169,72163],{"class":179},[162,72171,62196],{"class":168},[162,72173,72174,72177,72179,72181,72183,72185,72187,72189,72191,72193,72195,72197],{"class":164,"line":3011},[162,72175,72176],{"class":168},"    年龄：\u003C",[162,72178,56891],{"class":54373},[162,72180,56894],{"class":5082},[162,72182,173],{"class":168},[162,72184,65766],{"class":179},[162,72186,56556],{"class":5082},[162,72188,173],{"class":168},[162,72190,1864],{"class":179},[162,72192,18013],{"class":5082},[162,72194,173],{"class":168},[162,72196,1864],{"class":179},[162,72198,62196],{"class":168},[162,72200,72201],{"class":164,"line":3022},[162,72202,72203],{"class":168},"    性别:\n",[162,72205,72206,72208,72211,72213,72215,72218,72220,72222,72224],{"class":164,"line":3027},[162,72207,54414],{"class":168},[162,72209,72210],{"class":54373},"select",[162,72212,18013],{"class":5082},[162,72214,173],{"class":168},[162,72216,72217],{"class":179},"\"gender\"",[162,72219,56556],{"class":5082},[162,72221,173],{"class":168},[162,72223,72217],{"class":179},[162,72225,54380],{"class":168},[162,72227,72228,72230,72233,72235,72237,72239,72242,72244],{"class":164,"line":3046},[162,72229,58304],{"class":168},[162,72231,72232],{"class":54373},"option",[162,72234,69718],{"class":5082},[162,72236,173],{"class":168},[162,72238,13061],{"class":179},[162,72240,72241],{"class":168},">男\u003C\u002F",[162,72243,72232],{"class":54373},[162,72245,54380],{"class":168},[162,72247,72248,72250,72252,72254,72256,72258,72261,72263],{"class":164,"line":3052},[162,72249,58304],{"class":168},[162,72251,72232],{"class":54373},[162,72253,69718],{"class":5082},[162,72255,173],{"class":168},[162,72257,13130],{"class":179},[162,72259,72260],{"class":168},">女\u003C\u002F",[162,72262,72232],{"class":54373},[162,72264,54380],{"class":168},[162,72266,72267,72269,72271],{"class":164,"line":3057},[162,72268,54848],{"class":168},[162,72270,72210],{"class":54373},[162,72272,54380],{"class":168},[162,72274,72275,72278,72280,72282,72284,72286,72288,72290,72293,72295,72297,72299],{"class":164,"line":3072},[162,72276,72277],{"class":168},"    薪资：\u003C",[162,72279,56891],{"class":54373},[162,72281,56894],{"class":5082},[162,72283,173],{"class":168},[162,72285,65766],{"class":179},[162,72287,56556],{"class":5082},[162,72289,173],{"class":168},[162,72291,72292],{"class":179},"\"salary\"",[162,72294,18013],{"class":5082},[162,72296,173],{"class":168},[162,72298,72292],{"class":179},[162,72300,62196],{"class":168},[162,72302,72303,72306,72308,72310,72312,72315,72317,72319,72321],{"class":164,"line":3077},[162,72304,72305],{"class":168},"    就业城市：\u003C",[162,72307,72210],{"class":54373},[162,72309,18013],{"class":5082},[162,72311,173],{"class":168},[162,72313,72314],{"class":179},"\"city\"",[162,72316,56556],{"class":5082},[162,72318,173],{"class":168},[162,72320,72314],{"class":179},[162,72322,54380],{"class":168},[162,72324,72325,72327,72329,72331,72333,72335,72338,72340],{"class":164,"line":3100},[162,72326,58304],{"class":168},[162,72328,72232],{"class":54373},[162,72330,69718],{"class":5082},[162,72332,173],{"class":168},[162,72334,1033],{"class":179},[162,72336,72337],{"class":168},">北京\u003C\u002F",[162,72339,72232],{"class":54373},[162,72341,54380],{"class":168},[162,72343,72344,72346,72348,72350,72352,72355,72358,72360],{"class":164,"line":3140},[162,72345,58304],{"class":168},[162,72347,72232],{"class":54373},[162,72349,69718],{"class":5082},[162,72351,173],{"class":168},[162,72353,72354],{"class":179},"\"上海\"",[162,72356,72357],{"class":168},">上海\u003C\u002F",[162,72359,72232],{"class":54373},[162,72361,54380],{"class":168},[162,72363,72364,72366,72368,72370,72372,72375,72378,72380],{"class":164,"line":4878},[162,72365,58304],{"class":168},[162,72367,72232],{"class":54373},[162,72369,69718],{"class":5082},[162,72371,173],{"class":168},[162,72373,72374],{"class":179},"\"广州\"",[162,72376,72377],{"class":168},">广州\u003C\u002F",[162,72379,72232],{"class":54373},[162,72381,54380],{"class":168},[162,72383,72384,72386,72388,72390,72392,72395,72398,72400],{"class":164,"line":4883},[162,72385,58304],{"class":168},[162,72387,72232],{"class":54373},[162,72389,69718],{"class":5082},[162,72391,173],{"class":168},[162,72393,72394],{"class":179},"\"深圳\"",[162,72396,72397],{"class":168},">深圳\u003C\u002F",[162,72399,72232],{"class":54373},[162,72401,54380],{"class":168},[162,72403,72404,72406,72408,72410,72412,72415,72418,72420],{"class":164,"line":4897},[162,72405,58304],{"class":168},[162,72407,72232],{"class":54373},[162,72409,69718],{"class":5082},[162,72411,173],{"class":168},[162,72413,72414],{"class":179},"\"曹县\"",[162,72416,72417],{"class":168},">曹县\u003C\u002F",[162,72419,72232],{"class":54373},[162,72421,54380],{"class":168},[162,72423,72424,72426,72428],{"class":164,"line":4902},[162,72425,54848],{"class":168},[162,72427,72210],{"class":54373},[162,72429,54380],{"class":168},[162,72431,72432,72434,72436,72438,72440,72443,72446,72448],{"class":164,"line":5694},[162,72433,54414],{"class":168},[162,72435,56957],{"class":54373},[162,72437,56556],{"class":5082},[162,72439,173],{"class":168},[162,72441,72442],{"class":179},"\"add\"",[162,72444,72445],{"class":168},">录入\u003C\u002F",[162,72447,56957],{"class":54373},[162,72449,54380],{"class":168},[162,72451,72452,72454,72456],{"class":164,"line":5708},[162,72453,55487],{"class":168},[162,72455,69692],{"class":54373},[162,72457,54380],{"class":168},[162,72459,72460],{"class":164,"line":5716},[162,72461,301],{"emptyLinePlaceholder":300},[162,72463,72464,72466,72468,72471,72473],{"class":164,"line":5721},[162,72465,55215],{"class":168},[162,72467,10],{"class":54373},[162,72469,72470],{"class":168},">就业榜\u003C\u002F",[162,72472,10],{"class":54373},[162,72474,54380],{"class":168},[162,72476,72477,72479,72481],{"class":164,"line":5727},[162,72478,55215],{"class":168},[162,72480,26],{"class":54373},[162,72482,54380],{"class":168},[162,72484,72485,72487,72489],{"class":164,"line":5733},[162,72486,54414],{"class":168},[162,72488,29],{"class":54373},[162,72490,54380],{"class":168},[162,72492,72493,72495,72497],{"class":164,"line":5738},[162,72494,58304],{"class":168},[162,72496,32],{"class":54373},[162,72498,54380],{"class":168},[162,72500,72501,72503,72505,72508,72510],{"class":164,"line":11052},[162,72502,58372],{"class":168},[162,72504,35],{"class":54373},[162,72506,72507],{"class":168},">序号\u003C\u002F",[162,72509,35],{"class":54373},[162,72511,54380],{"class":168},[162,72513,72514,72516,72518,72521,72523],{"class":164,"line":11076},[162,72515,58372],{"class":168},[162,72517,35],{"class":54373},[162,72519,72520],{"class":168},">姓名\u003C\u002F",[162,72522,35],{"class":54373},[162,72524,54380],{"class":168},[162,72526,72527,72529,72531,72534,72536],{"class":164,"line":11081},[162,72528,58372],{"class":168},[162,72530,35],{"class":54373},[162,72532,72533],{"class":168},">年龄\u003C\u002F",[162,72535,35],{"class":54373},[162,72537,54380],{"class":168},[162,72539,72540,72542,72544,72547,72549],{"class":164,"line":11087},[162,72541,58372],{"class":168},[162,72543,35],{"class":54373},[162,72545,72546],{"class":168},">性别\u003C\u002F",[162,72548,35],{"class":54373},[162,72550,54380],{"class":168},[162,72552,72553,72555,72557,72560,72562],{"class":164,"line":11114},[162,72554,58372],{"class":168},[162,72556,35],{"class":54373},[162,72558,72559],{"class":168},">薪资\u003C\u002F",[162,72561,35],{"class":54373},[162,72563,54380],{"class":168},[162,72565,72566,72568,72570,72573,72575],{"class":164,"line":11119},[162,72567,58372],{"class":168},[162,72569,35],{"class":54373},[162,72571,72572],{"class":168},">就业城市\u003C\u002F",[162,72574,35],{"class":54373},[162,72576,54380],{"class":168},[162,72578,72579,72581,72583,72586,72588],{"class":164,"line":11125},[162,72580,58372],{"class":168},[162,72582,35],{"class":54373},[162,72584,72585],{"class":168},">操作\u003C\u002F",[162,72587,35],{"class":54373},[162,72589,54380],{"class":168},[162,72591,72592,72594,72596],{"class":164,"line":11137},[162,72593,58477],{"class":168},[162,72595,32],{"class":54373},[162,72597,54380],{"class":168},[162,72599,72600,72602,72604],{"class":164,"line":11149},[162,72601,54848],{"class":168},[162,72603,29],{"class":54373},[162,72605,54380],{"class":168},[162,72607,72608,72610,72612],{"class":164,"line":11161},[162,72609,54414],{"class":168},[162,72611,51],{"class":54373},[162,72613,54380],{"class":168},[162,72615,72616],{"class":164,"line":12816},[162,72617,72618],{"class":361},"      \u003C!-- \n",[162,72620,72621],{"class":164,"line":12841},[162,72622,72623],{"class":361},"        \u003Ctr>\n",[162,72625,72626],{"class":164,"line":12864},[162,72627,72628],{"class":361},"          \u003Ctd>1001\u003C\u002Ftd>\n",[162,72630,72631],{"class":164,"line":12888},[162,72632,72633],{"class":361},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[162,72635,72636],{"class":164,"line":12893},[162,72637,72638],{"class":361},"          \u003Ctd>19\u003C\u002Ftd>\n",[162,72640,72641],{"class":164,"line":12898},[162,72642,72643],{"class":361},"          \u003Ctd>男\u003C\u002Ftd>\n",[162,72645,72646],{"class":164,"line":12903},[162,72647,72648],{"class":361},"          \u003Ctd>15000\u003C\u002Ftd>\n",[162,72650,72651],{"class":164,"line":12912},[162,72652,72653],{"class":361},"          \u003Ctd>上海\u003C\u002Ftd>\n",[162,72655,72656],{"class":164,"line":12917},[162,72657,72658],{"class":361},"          \u003Ctd>\n",[162,72660,72661],{"class":164,"line":12923},[162,72662,72663],{"class":361},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[162,72665,72666],{"class":164,"line":12944},[162,72667,72668],{"class":361},"          \u003C\u002Ftd>\n",[162,72670,72671],{"class":164,"line":12950},[162,72672,72673],{"class":361},"        \u003C\u002Ftr> \n",[162,72675,72676],{"class":164,"line":12964},[162,72677,72678],{"class":361},"        -->\n",[162,72680,72681,72683,72685],{"class":164,"line":12970},[162,72682,54848],{"class":168},[162,72684,51],{"class":54373},[162,72686,54380],{"class":168},[162,72688,72689,72691,72693],{"class":164,"line":12997},[162,72690,55487],{"class":168},[162,72692,26],{"class":54373},[162,72694,54380],{"class":168},[162,72696,72697,72699,72701],{"class":164,"line":13006},[162,72698,55215],{"class":168},[162,72700,54885],{"class":54373},[162,72702,54380],{"class":168},[162,72704,72705],{"class":164,"line":13012},[162,72706,63027],{"class":361},[162,72708,72709,72711,72714,72716,72718,72720,72722,72725],{"class":164,"line":13020},[162,72710,14317],{"class":172},[162,72712,72713],{"class":207}," uname",[162,72715,16659],{"class":172},[162,72717,57466],{"class":168},[162,72719,57469],{"class":5082},[162,72721,604],{"class":168},[162,72723,72724],{"class":179},"'.uname'",[162,72726,434],{"class":168},[162,72728,72729,72731,72733,72735,72737,72739,72741,72744],{"class":164,"line":13025},[162,72730,14317],{"class":172},[162,72732,18780],{"class":207},[162,72734,16659],{"class":172},[162,72736,57466],{"class":168},[162,72738,57469],{"class":5082},[162,72740,604],{"class":168},[162,72742,72743],{"class":179},"'.age'",[162,72745,434],{"class":168},[162,72747,72748,72750,72753,72755,72757,72759,72761,72764],{"class":164,"line":19695},[162,72749,14317],{"class":172},[162,72751,72752],{"class":207}," gender",[162,72754,16659],{"class":172},[162,72756,57466],{"class":168},[162,72758,57469],{"class":5082},[162,72760,604],{"class":168},[162,72762,72763],{"class":179},"'.gender'",[162,72765,434],{"class":168},[162,72767,72768,72770,72773,72775,72777,72779,72781,72784],{"class":164,"line":19701},[162,72769,14317],{"class":172},[162,72771,72772],{"class":207}," salary",[162,72774,16659],{"class":172},[162,72776,57466],{"class":168},[162,72778,57469],{"class":5082},[162,72780,604],{"class":168},[162,72782,72783],{"class":179},"'.salary'",[162,72785,434],{"class":168},[162,72787,72788,72790,72793,72795,72797,72799,72801,72804],{"class":164,"line":19724},[162,72789,14317],{"class":172},[162,72791,72792],{"class":207}," city",[162,72794,16659],{"class":172},[162,72796,57466],{"class":168},[162,72798,57469],{"class":5082},[162,72800,604],{"class":168},[162,72802,72803],{"class":179},"'.city'",[162,72805,434],{"class":168},[162,72807,72808,72810,72813,72815,72817,72819,72821,72824],{"class":164,"line":19730},[162,72809,14317],{"class":172},[162,72811,72812],{"class":207}," tbody",[162,72814,16659],{"class":172},[162,72816,57466],{"class":168},[162,72818,57469],{"class":5082},[162,72820,604],{"class":168},[162,72822,72823],{"class":179},"'tbody'",[162,72825,434],{"class":168},[162,72827,72828],{"class":164,"line":19753},[162,72829,301],{"emptyLinePlaceholder":300},[162,72831,72832],{"class":164,"line":19767},[162,72833,72834],{"class":361},"    \u002F\u002F 获取所有带有name属性的元素\n",[162,72836,72837,72839,72842,72844,72846,72848,72850,72853],{"class":164,"line":19787},[162,72838,14317],{"class":172},[162,72840,72841],{"class":207}," items",[162,72843,16659],{"class":172},[162,72845,57466],{"class":168},[162,72847,58750],{"class":5082},[162,72849,604],{"class":168},[162,72851,72852],{"class":179},"'[name]'",[162,72854,434],{"class":168},[162,72856,72857],{"class":164,"line":19793},[162,72858,72859],{"class":361},"    \u002F\u002F 声明一个空的数组\n",[162,72861,72862,72864,72866,72868],{"class":164,"line":19804},[162,72863,14317],{"class":172},[162,72865,60764],{"class":207},[162,72867,16659],{"class":172},[162,72869,260],{"class":168},[162,72871,72872],{"class":164,"line":19827},[162,72873,72874],{"class":361},"    \u002F\u002F 1.录入模块\n",[162,72876,72877],{"class":164,"line":19849},[162,72878,72879],{"class":361},"    \u002F\u002F 1.1这是一个表单提交事件\n",[162,72881,72882,72884,72887,72889,72891,72893,72895,72898],{"class":164,"line":19854},[162,72883,14317],{"class":172},[162,72885,72886],{"class":207}," info",[162,72888,16659],{"class":172},[162,72890,57466],{"class":168},[162,72892,57469],{"class":5082},[162,72894,604],{"class":168},[162,72896,72897],{"class":179},"'.info'",[162,72899,434],{"class":168},[162,72901,72902,72905,72907,72909,72912,72914,72916,72918,72920],{"class":164,"line":19860},[162,72903,72904],{"class":168},"    info.",[162,72906,60882],{"class":5082},[162,72908,604],{"class":168},[162,72910,72911],{"class":179},"'submit'",[162,72913,183],{"class":168},[162,72915,57519],{"class":172},[162,72917,1003],{"class":168},[162,72919,3384],{"class":671},[162,72921,15537],{"class":168},[162,72923,72924],{"class":164,"line":19874},[162,72925,72926],{"class":361},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[162,72928,72929,72932,72935],{"class":164,"line":19887},[162,72930,72931],{"class":168},"      e.",[162,72933,72934],{"class":5082},"preventDefault",[162,72936,1526],{"class":168},[162,72938,72939],{"class":164,"line":19892},[162,72940,63081],{"class":361},[162,72942,72943],{"class":164,"line":19906},[162,72944,301],{"emptyLinePlaceholder":300},[162,72946,72947],{"class":164,"line":19911},[162,72948,72949],{"class":361},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[162,72951,72952],{"class":164,"line":19917},[162,72953,72954],{"class":361},"      \u002F\u002F 先遍历循环\n",[162,72956,72957,72959,72961,72963,72965,72967,72969,72971,72973,72976,72978,72980,72982],{"class":164,"line":19922},[162,72958,55354],{"class":172},[162,72960,1003],{"class":168},[162,72962,54918],{"class":172},[162,72964,2642],{"class":168},[162,72966,173],{"class":172},[162,72968,2717],{"class":207},[162,72970,12546],{"class":168},[162,72972,4187],{"class":172},[162,72974,72975],{"class":168}," items.",[162,72977,55039],{"class":207},[162,72979,6328],{"class":168},[162,72981,5410],{"class":172},[162,72983,15537],{"class":168},[162,72985,72986,72988,72991,72993,72996],{"class":164,"line":19936},[162,72987,5614],{"class":172},[162,72989,72990],{"class":168}," (items[i].value ",[162,72992,57556],{"class":172},[162,72994,72995],{"class":179}," ''",[162,72997,15537],{"class":168},[162,72999,73000,73003,73006,73008,73011],{"class":164,"line":19941},[162,73001,73002],{"class":172},"          return",[162,73004,73005],{"class":5082}," alert",[162,73007,604],{"class":168},[162,73009,73010],{"class":179},"'输入内容不能为空'",[162,73012,434],{"class":168},[162,73014,73015],{"class":164,"line":19946},[162,73016,5646],{"class":168},[162,73018,73019],{"class":164,"line":19960},[162,73020,55468],{"class":168},[162,73022,73023],{"class":164,"line":19972},[162,73024,301],{"emptyLinePlaceholder":300},[162,73026,73027],{"class":164,"line":19977},[162,73028,73029],{"class":361},"      \u002F\u002F 创建新的对象\n",[162,73031,73032,73034,73037,73039],{"class":164,"line":19990},[162,73033,61297],{"class":172},[162,73035,73036],{"class":207}," obj",[162,73038,16659],{"class":172},[162,73040,1722],{"class":168},[162,73042,73043,73046,73048,73050,73052],{"class":164,"line":19995},[162,73044,73045],{"class":168},"        stuID: arr.",[162,73047,55039],{"class":207},[162,73049,1239],{"class":172},[162,73051,28210],{"class":207},[162,73053,1735],{"class":168},[162,73055,73056],{"class":164,"line":20000},[162,73057,73058],{"class":168},"        uname: uname.value,\n",[162,73060,73061],{"class":164,"line":20005},[162,73062,73063],{"class":168},"        age: age.value,\n",[162,73065,73066],{"class":164,"line":20018},[162,73067,73068],{"class":168},"        gender: gender.value,\n",[162,73070,73071],{"class":164,"line":20023},[162,73072,73073],{"class":168},"        salary: salary.value,\n",[162,73075,73076],{"class":164,"line":35709},[162,73077,73078],{"class":168},"        city: city.value\n",[162,73080,73081],{"class":164,"line":35715},[162,73082,55468],{"class":168},[162,73084,73085],{"class":164,"line":35721},[162,73086,73087],{"class":361},"      \u002F\u002F console.log(obj);\n",[162,73089,73090],{"class":164,"line":35727},[162,73091,73092],{"class":361},"      \u002F\u002F 追加到数组里面\n",[162,73094,73095,73097,73099],{"class":164,"line":35733},[162,73096,61076],{"class":168},[162,73098,54955],{"class":5082},[162,73100,73101],{"class":168},"(obj)\n",[162,73103,73104],{"class":164,"line":35744},[162,73105,73106],{"class":361},"      \u002F\u002F console.log(arr);\n",[162,73108,73109],{"class":164,"line":35750},[162,73110,73111],{"class":361},"      \u002F\u002F 清空表单  reset重置表单\n",[162,73113,73114,73117,73119,73122],{"class":164,"line":35770},[162,73115,73116],{"class":207},"      this",[162,73118,3847],{"class":168},[162,73120,73121],{"class":5082},"reset",[162,73123,1526],{"class":168},[162,73125,73126],{"class":164,"line":35776},[162,73127,73128],{"class":361},"      \u002F\u002F 调用渲染函数\n",[162,73130,73131,73134],{"class":164,"line":35787},[162,73132,73133],{"class":5082},"      render",[162,73135,1526],{"class":168},[162,73137,73138],{"class":164,"line":35793},[162,73139,36536],{"class":168},[162,73141,73142],{"class":164,"line":35799},[162,73143,73144],{"class":361},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[162,73146,73147,73150,73153],{"class":164,"line":35805},[162,73148,73149],{"class":172},"    function",[162,73151,73152],{"class":5082}," render",[162,73154,13951],{"class":168},[162,73156,73157],{"class":164,"line":35811},[162,73158,73159],{"class":361},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[162,73161,73162,73165,73167],{"class":164,"line":35817},[162,73163,73164],{"class":168},"      tbody.innerHTML ",[162,73166,173],{"class":172},[162,73168,73169],{"class":179}," ''\n",[162,73171,73172],{"class":164,"line":35823},[162,73173,73174],{"class":361},"      \u002F\u002F 遍历数组\n",[162,73176,73177,73179,73181,73183,73185,73187,73189,73191,73193,73195,73197,73199,73201],{"class":164,"line":35829},[162,73178,55354],{"class":172},[162,73180,1003],{"class":168},[162,73182,54918],{"class":172},[162,73184,2642],{"class":168},[162,73186,173],{"class":172},[162,73188,2717],{"class":207},[162,73190,12546],{"class":168},[162,73192,4187],{"class":172},[162,73194,55036],{"class":168},[162,73196,55039],{"class":207},[162,73198,6328],{"class":168},[162,73200,5410],{"class":172},[162,73202,15537],{"class":168},[162,73204,73205,73207,73210,73212,73214,73217,73219,73222],{"class":164,"line":35849},[162,73206,64338],{"class":172},[162,73208,73209],{"class":207}," tr",[162,73211,16659],{"class":172},[162,73213,57466],{"class":168},[162,73215,73216],{"class":5082},"createElement",[162,73218,604],{"class":168},[162,73220,73221],{"class":179},"'tr'",[162,73223,434],{"class":168},[162,73225,73226,73229,73231],{"class":164,"line":35855},[162,73227,73228],{"class":168},"        tr.innerHTML ",[162,73230,173],{"class":172},[162,73232,73233],{"class":179}," `\n",[162,73235,73236,73239,73241,73243,73245,73248,73251],{"class":164,"line":35871},[162,73237,73238],{"class":179},"        \u003Ctd>${",[162,73240,6993],{"class":168},[162,73242,4168],{"class":179},[162,73244,3732],{"class":168},[162,73246,73247],{"class":179},"].",[162,73249,73250],{"class":168},"stuID",[162,73252,73253],{"class":179},"}\u003C\u002Ftd>\n",[162,73255,73256,73259,73261,73263,73265,73267,73270],{"class":164,"line":35877},[162,73257,73258],{"class":179},"          \u003Ctd>${",[162,73260,6993],{"class":168},[162,73262,4168],{"class":179},[162,73264,3732],{"class":168},[162,73266,73247],{"class":179},[162,73268,73269],{"class":168},"uname",[162,73271,73253],{"class":179},[162,73273,73274,73276,73278,73280,73282,73284,73287],{"class":164,"line":35891},[162,73275,73258],{"class":179},[162,73277,6993],{"class":168},[162,73279,4168],{"class":179},[162,73281,3732],{"class":168},[162,73283,73247],{"class":179},[162,73285,73286],{"class":168},"age",[162,73288,73253],{"class":179},[162,73290,73291,73293,73295,73297,73299,73301,73304],{"class":164,"line":35897},[162,73292,73258],{"class":179},[162,73294,6993],{"class":168},[162,73296,4168],{"class":179},[162,73298,3732],{"class":168},[162,73300,73247],{"class":179},[162,73302,73303],{"class":168},"gender",[162,73305,73253],{"class":179},[162,73307,73308,73310,73312,73314,73316,73318,73321],{"class":164,"line":35912},[162,73309,73258],{"class":179},[162,73311,6993],{"class":168},[162,73313,4168],{"class":179},[162,73315,3732],{"class":168},[162,73317,73247],{"class":179},[162,73319,73320],{"class":168},"salary",[162,73322,73253],{"class":179},[162,73324,73325,73327,73329,73331,73333,73335,73338],{"class":164,"line":35918},[162,73326,73258],{"class":179},[162,73328,6993],{"class":168},[162,73330,4168],{"class":179},[162,73332,3732],{"class":168},[162,73334,73247],{"class":179},[162,73336,73337],{"class":168},"city",[162,73339,73253],{"class":179},[162,73341,73342],{"class":164,"line":35927},[162,73343,72658],{"class":179},[162,73345,73346,73349,73351],{"class":164,"line":35933},[162,73347,73348],{"class":179},"            \u003Ca href=\"javascript:\" data-id=${",[162,73350,3732],{"class":168},[162,73352,73353],{"class":179},"}>删除\u003C\u002Fa>\n",[162,73355,73356],{"class":164,"line":35942},[162,73357,73358],{"class":179},"          \u003C\u002Ftd> \n",[162,73360,73361],{"class":164,"line":35948},[162,73362,73363],{"class":179},"          `\n",[162,73365,73366],{"class":164,"line":35954},[162,73367,73368],{"class":361},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[162,73370,73371,73374,73377],{"class":164,"line":35963},[162,73372,73373],{"class":168},"        tbody.",[162,73375,73376],{"class":5082},"appendChild",[162,73378,73379],{"class":168},"(tr)\n",[162,73381,73382],{"class":164,"line":35969},[162,73383,55468],{"class":168},[162,73385,73386],{"class":164,"line":35980},[162,73387,5305],{"class":168},[162,73389,73390],{"class":164,"line":35986},[162,73391,301],{"emptyLinePlaceholder":300},[162,73393,73394],{"class":164,"line":36005},[162,73395,73396],{"class":361},"    \u002F\u002F 3.删除委托\n",[162,73398,73399],{"class":164,"line":36011},[162,73400,73401],{"class":361},"    \u002F\u002F 3.1 事件委托 tbody\n",[162,73403,73404,73407,73409,73411,73413,73415,73417,73419,73421],{"class":164,"line":36022},[162,73405,73406],{"class":168},"    tbody.",[162,73408,60882],{"class":5082},[162,73410,604],{"class":168},[162,73412,60887],{"class":179},[162,73414,183],{"class":168},[162,73416,57519],{"class":172},[162,73418,1003],{"class":168},[162,73420,3384],{"class":671},[162,73422,15537],{"class":168},[162,73424,73425,73427,73429,73431,73433],{"class":164,"line":36028},[162,73426,57550],{"class":172},[162,73428,70101],{"class":168},[162,73430,57556],{"class":172},[162,73432,71323],{"class":179},[162,73434,15537],{"class":168},[162,73436,73437],{"class":164,"line":36048},[162,73438,73439],{"class":361},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[162,73441,73442],{"class":164,"line":36064},[162,73443,73444],{"class":361},"        \u002F\u002F console.log(e.target.dataset.id);\n",[162,73446,73447],{"class":164,"line":36070},[162,73448,73449],{"class":361},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[162,73451,73452,73455,73457,73460,73462],{"class":164,"line":36084},[162,73453,73454],{"class":168},"        arr.",[162,73456,61079],{"class":5082},[162,73458,73459],{"class":168},"(e.target.dataset.id, ",[162,73461,208],{"class":207},[162,73463,434],{"class":168},[162,73465,73466],{"class":164,"line":36090},[162,73467,73468],{"class":361},"        \u002F\u002F 重新渲染一次\n",[162,73470,73471,73474],{"class":164,"line":36096},[162,73472,73473],{"class":5082},"        render",[162,73475,1526],{"class":168},[162,73477,73478],{"class":164,"line":36107},[162,73479,55468],{"class":168},[162,73481,73482],{"class":164,"line":36113},[162,73483,36536],{"class":168},[162,73485,73486,73488,73490],{"class":164,"line":36119},[162,73487,55487],{"class":168},[162,73489,54885],{"class":54373},[162,73491,54380],{"class":168},[162,73493,73494],{"class":164,"line":36129},[162,73495,301],{"emptyLinePlaceholder":300},[162,73497,73498,73500,73502],{"class":164,"line":36135},[162,73499,54857],{"class":168},[162,73501,54872],{"class":54373},[162,73503,54380],{"class":168},[162,73505,73506],{"class":164,"line":36146},[162,73507,301],{"emptyLinePlaceholder":300},[162,73509,73510,73512,73514],{"class":164,"line":36152},[162,73511,54857],{"class":168},[162,73513,53708],{"class":54373},[162,73515,54380],{"class":168},[19,73517,73518],{},"样式：",[153,73520,73524],{"className":73521,"code":73522,"language":73523,"meta":158,"style":158},"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",[71,73525,73526,73531,73541,73550,73554,73558,73563,73573,73578,73582,73587,73597,73602,73611,73615,73619,73624,73629,73639,73649,73654,73658,73663,73672,73682,73687,73697,73707,73711,73716,73724,73728,73733,73738,73743,73751,73760,73764,73769,73778,73782,73787,73796,73800,73805,73814,73823,73831,73835,73840,73849,73859,73868,73878,73884,73893,73903,73913,73917,73922,73931,73939,73949,73957,73966,73975,73985,73993,73997,74002,74011],{"__ignoreMap":158},[162,73527,73528],{"class":164,"line":165},[162,73529,73530],{"class":168},"* {\n",[162,73532,73533,73536,73538],{"class":164,"line":197},[162,73534,73535],{"class":54373},"  margin",[162,73537,1730],{"class":168},[162,73539,73540],{"class":179},"0;\n",[162,73542,73543,73546,73548],{"class":164,"line":228},[162,73544,73545],{"class":179},"  padding",[162,73547,1730],{"class":168},[162,73549,73540],{"class":179},[162,73551,73552],{"class":164,"line":252},[162,73553,1498],{"class":168},[162,73555,73556],{"class":164,"line":328},[162,73557,301],{"emptyLinePlaceholder":300},[162,73559,73560],{"class":164,"line":466},[162,73561,73562],{"class":179},"a {\n",[162,73564,73565,73568,73570],{"class":164,"line":471},[162,73566,73567],{"class":54373},"  text-decoration",[162,73569,1730],{"class":168},[162,73571,73572],{"class":179},"none;\n",[162,73574,73575],{"class":164,"line":687},[162,73576,73577],{"class":179},"  color:#721c24;\n",[162,73579,73580],{"class":164,"line":692},[162,73581,1498],{"class":168},[162,73583,73584],{"class":164,"line":698},[162,73585,73586],{"class":179},"h1 {\n",[162,73588,73589,73592,73594],{"class":164,"line":2955},[162,73590,73591],{"class":54373},"  text-align",[162,73593,1730],{"class":168},[162,73595,73596],{"class":179},"center;\n",[162,73598,73599],{"class":164,"line":2960},[162,73600,73601],{"class":179},"  color:#333;\n",[162,73603,73604,73606,73608],{"class":164,"line":2971},[162,73605,73535],{"class":54373},[162,73607,1730],{"class":168},[162,73609,73610],{"class":179},"20px 0;\n",[162,73612,73613],{"class":164,"line":2984},[162,73614,5791],{"class":168},[162,73616,73617],{"class":164,"line":2989},[162,73618,1498],{"class":168},[162,73620,73621],{"class":164,"line":3011},[162,73622,73623],{"class":179},"table {\n",[162,73625,73626],{"class":164,"line":3022},[162,73627,73628],{"class":179},"  margin:0 auto;\n",[162,73630,73631,73634,73636],{"class":164,"line":3027},[162,73632,73633],{"class":54373},"  width",[162,73635,1730],{"class":168},[162,73637,73638],{"class":179},"800px;\n",[162,73640,73641,73644,73646],{"class":164,"line":3046},[162,73642,73643],{"class":54373},"  border-collapse",[162,73645,1730],{"class":168},[162,73647,73648],{"class":179},"collapse;\n",[162,73650,73651],{"class":164,"line":3052},[162,73652,73653],{"class":179},"  color:#004085;\n",[162,73655,73656],{"class":164,"line":3057},[162,73657,1498],{"class":168},[162,73659,73660],{"class":164,"line":3072},[162,73661,73662],{"class":179},"th {\n",[162,73664,73665,73667,73669],{"class":164,"line":3077},[162,73666,73545],{"class":54373},[162,73668,1730],{"class":168},[162,73670,73671],{"class":179},"10px;\n",[162,73673,73674,73677,73679],{"class":164,"line":3100},[162,73675,73676],{"class":54373},"  background",[162,73678,1730],{"class":168},[162,73680,73681],{"class":361},"#cfe5ff;\n",[162,73683,73684],{"class":164,"line":3140},[162,73685,73686],{"class":168},"  \n",[162,73688,73689,73692,73694],{"class":164,"line":4878},[162,73690,73691],{"class":54373},"  font-size",[162,73693,1730],{"class":168},[162,73695,73696],{"class":179},"20px;\n",[162,73698,73699,73702,73704],{"class":164,"line":4883},[162,73700,73701],{"class":54373},"  font-weight",[162,73703,1730],{"class":168},[162,73705,73706],{"class":179},"400;\n",[162,73708,73709],{"class":164,"line":4897},[162,73710,1498],{"class":168},[162,73712,73713],{"class":164,"line":4902},[162,73714,73715],{"class":179},"td,th {\n",[162,73717,73718,73721],{"class":164,"line":5694},[162,73719,73720],{"class":179},"  border:1px solid",[162,73722,73723],{"class":361}," #b8daff;\n",[162,73725,73726],{"class":164,"line":5708},[162,73727,1498],{"class":168},[162,73729,73730],{"class":164,"line":5716},[162,73731,73732],{"class":179},"td {\n",[162,73734,73735],{"class":164,"line":5721},[162,73736,73737],{"class":179},"  padding:10px;\n",[162,73739,73740],{"class":164,"line":5727},[162,73741,73742],{"class":179},"  color:#666;\n",[162,73744,73745,73747,73749],{"class":164,"line":5733},[162,73746,73591],{"class":54373},[162,73748,1730],{"class":168},[162,73750,73596],{"class":179},[162,73752,73753,73755,73757],{"class":164,"line":5738},[162,73754,73691],{"class":54373},[162,73756,1730],{"class":168},[162,73758,73759],{"class":179},"16px;\n",[162,73761,73762],{"class":164,"line":11052},[162,73763,1498],{"class":168},[162,73765,73766],{"class":164,"line":11076},[162,73767,73768],{"class":179},"tbody tr {\n",[162,73770,73771,73773,73775],{"class":164,"line":11081},[162,73772,73676],{"class":54373},[162,73774,1730],{"class":168},[162,73776,73777],{"class":361},"#fff;\n",[162,73779,73780],{"class":164,"line":11087},[162,73781,1498],{"class":168},[162,73783,73784],{"class":164,"line":11114},[162,73785,73786],{"class":179},"tbody tr:hover {\n",[162,73788,73789,73791,73793],{"class":164,"line":11119},[162,73790,73676],{"class":54373},[162,73792,1730],{"class":168},[162,73794,73795],{"class":361},"#e1ecf8;\n",[162,73797,73798],{"class":164,"line":11125},[162,73799,1498],{"class":168},[162,73801,73802],{"class":164,"line":11137},[162,73803,73804],{"class":179},".info {\n",[162,73806,73807,73809,73811],{"class":164,"line":11149},[162,73808,73633],{"class":54373},[162,73810,1730],{"class":168},[162,73812,73813],{"class":179},"900px;\n",[162,73815,73816,73818,73820],{"class":164,"line":11161},[162,73817,73535],{"class":54373},[162,73819,1730],{"class":168},[162,73821,73822],{"class":179},"50px auto;\n",[162,73824,73825,73827,73829],{"class":164,"line":12816},[162,73826,73591],{"class":54373},[162,73828,1730],{"class":168},[162,73830,73596],{"class":179},[162,73832,73833],{"class":164,"line":12841},[162,73834,1498],{"class":168},[162,73836,73837],{"class":164,"line":12864},[162,73838,73839],{"class":179},".info  input, .info select {\n",[162,73841,73842,73844,73846],{"class":164,"line":12888},[162,73843,73633],{"class":54373},[162,73845,1730],{"class":168},[162,73847,73848],{"class":179},"80px;\n",[162,73850,73851,73854,73856],{"class":164,"line":12893},[162,73852,73853],{"class":54373},"  height",[162,73855,1730],{"class":168},[162,73857,73858],{"class":179},"27px;\n",[162,73860,73861,73864,73866],{"class":164,"line":12898},[162,73862,73863],{"class":54373},"  outline",[162,73865,1730],{"class":168},[162,73867,73572],{"class":179},[162,73869,73870,73873,73875],{"class":164,"line":12903},[162,73871,73872],{"class":54373},"  border-radius",[162,73874,1730],{"class":168},[162,73876,73877],{"class":179},"5px;\n",[162,73879,73880,73882],{"class":164,"line":12912},[162,73881,73720],{"class":179},[162,73883,73723],{"class":361},[162,73885,73886,73889,73891],{"class":164,"line":12917},[162,73887,73888],{"class":54373},"  padding-left",[162,73890,1730],{"class":168},[162,73892,73877],{"class":179},[162,73894,73895,73898,73900],{"class":164,"line":12923},[162,73896,73897],{"class":54373},"  box-sizing",[162,73899,1730],{"class":168},[162,73901,73902],{"class":179},"border-box;\n",[162,73904,73905,73908,73910],{"class":164,"line":12944},[162,73906,73907],{"class":54373},"  margin-right",[162,73909,1730],{"class":168},[162,73911,73912],{"class":179},"15px;\n",[162,73914,73915],{"class":164,"line":12950},[162,73916,1498],{"class":168},[162,73918,73919],{"class":164,"line":12964},[162,73920,73921],{"class":179},".info button {\n",[162,73923,73924,73926,73928],{"class":164,"line":12970},[162,73925,73633],{"class":54373},[162,73927,1730],{"class":168},[162,73929,73930],{"class":179},"60px;\n",[162,73932,73933,73935,73937],{"class":164,"line":12997},[162,73934,73853],{"class":54373},[162,73936,1730],{"class":168},[162,73938,73858],{"class":179},[162,73940,73941,73944,73946],{"class":164,"line":13006},[162,73942,73943],{"class":54373},"  background-color",[162,73945,1730],{"class":168},[162,73947,73948],{"class":361},"#004085;\n",[162,73950,73951,73953,73955],{"class":164,"line":13012},[162,73952,73863],{"class":54373},[162,73954,1730],{"class":168},[162,73956,73572],{"class":179},[162,73958,73959,73962,73964],{"class":164,"line":13020},[162,73960,73961],{"class":54373},"  border",[162,73963,1730],{"class":168},[162,73965,73540],{"class":179},[162,73967,73968,73971,73973],{"class":164,"line":13025},[162,73969,73970],{"class":54373},"  color",[162,73972,1730],{"class":168},[162,73974,73777],{"class":361},[162,73976,73977,73980,73982],{"class":164,"line":19695},[162,73978,73979],{"class":54373},"  cursor",[162,73981,1730],{"class":168},[162,73983,73984],{"class":179},"pointer;\n",[162,73986,73987,73989,73991],{"class":164,"line":19701},[162,73988,73872],{"class":54373},[162,73990,1730],{"class":168},[162,73992,73877],{"class":179},[162,73994,73995],{"class":164,"line":19724},[162,73996,1498],{"class":168},[162,73998,73999],{"class":164,"line":19730},[162,74000,74001],{"class":179},".info .age {\n",[162,74003,74004,74006,74008],{"class":164,"line":19753},[162,74005,73633],{"class":54373},[162,74007,1730],{"class":168},[162,74009,74010],{"class":179},"50px;\n",[162,74012,74013],{"class":164,"line":19767},[162,74014,1498],{"class":168},[19,74016,74017],{},"思路：",[19,74019,74020],{},[4602,74021],{"alt":158,"src":74022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,74024,74025],{},[4602,74026],{"alt":158,"src":74027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,74029,74030],{},[4602,74031],{"alt":158,"src":74032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[3284,74034,74036],{"id":74035},"_3315-重绘回流","3.3.15 重绘回流",[19,74038,74039],{},[4602,74040],{"alt":158,"src":74041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,74043,74044],{},[4602,74045],{"alt":158,"src":74046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,74048,74049],{},[4602,74050],{"alt":158,"src":74051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,74053,74055],{"id":74054},"_34-bom","3.4 BOM",[19,74057,74058],{},[4602,74059],{"alt":158,"src":74060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,74062,74063],{},"平时写的document省略了window而已，实际上是window.document",[19,74065,74066],{},"函数也是这样，调用的时候实际为window.fn()",[19,74068,74069],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,74071,74072],{},"window大部分情况下可以省略",[3284,74074,74076],{"id":74075},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,74078,74079],{},"只执行一次",[19,74081,74082],{},[4602,74083],{"alt":158,"src":74084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,74086,74087],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,74089,74090],{},[4602,74091],{"alt":158,"src":74092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[3284,74094,74096],{"id":74095},"_342-js执行机制","3.4.2 JS执行机制",[19,74098,74099],{},[4602,74100],{"alt":158,"src":74101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,74103,74104],{},"两个的结果都是1111 3333 2222",[19,74106,74107],{},[4602,74108],{"alt":158,"src":74109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,74111,74112],{},[4602,74113],{"alt":158,"src":74114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,74116,74117],{},[4602,74118],{"alt":158,"src":74119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,74121,74122],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,74124,74125],{},"工作流程：",[19,74127,74128],{},[4602,74129],{"alt":158,"src":74130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,74132,74133],{},[4602,74134],{"alt":158,"src":74135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,74137,74138],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,74140,74141],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[3284,74143,74145],{"id":74144},"_343-location对象","3.4.3 location对象",[19,74147,74148],{},"location对象属于window这个全局对象下的，可以 省略window",[19,74150,74151],{},[4602,74152],{"alt":158,"src":74153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,74155,74156],{},"href可以跳转页面",[1452,74158,74159],{},[1455,74160,74161],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,74163,74164],{},"search得到提交信息之后网站后边的地址",[19,74166,74167],{},[4602,74168],{"alt":158,"src":74169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,74171,74172],{},[4602,74173],{"alt":158,"src":74174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[1452,74176,74177],{"start":197},[1455,74178,74179],{},"hash:这个获取单页面应用#后边的地址",[19,74181,74182],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,74184,74185],{},[4602,74186],{"alt":158,"src":74187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[153,74189,74191],{"className":56137,"code":74190,"language":56139,"meta":158,"style":158},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[71,74192,74193,74213,74233],{"__ignoreMap":158},[162,74194,74195,74197,74199,74201,74203,74206,74209,74211],{"class":164,"line":165},[162,74196,55215],{"class":168},[162,74198,3538],{"class":54373},[162,74200,64125],{"class":5082},[162,74202,173],{"class":168},[162,74204,74205],{"class":179},"\"#\u002Fmy\"",[162,74207,74208],{"class":168},">我的\u003C\u002F",[162,74210,3538],{"class":54373},[162,74212,54380],{"class":168},[162,74214,74215,74217,74219,74221,74223,74226,74229,74231],{"class":164,"line":197},[162,74216,55215],{"class":168},[162,74218,3538],{"class":54373},[162,74220,64125],{"class":5082},[162,74222,173],{"class":168},[162,74224,74225],{"class":179},"\"#\u002Ffriend\"",[162,74227,74228],{"class":168},">关注\u003C\u002F",[162,74230,3538],{"class":54373},[162,74232,54380],{"class":168},[162,74234,74235,74237,74239,74241,74243,74246,74249,74251],{"class":164,"line":228},[162,74236,55215],{"class":168},[162,74238,3538],{"class":54373},[162,74240,64125],{"class":5082},[162,74242,173],{"class":168},[162,74244,74245],{"class":179},"\"#\u002Fdownload\"",[162,74247,74248],{"class":168},">下载\u003C\u002F",[162,74250,3538],{"class":54373},[162,74252,54380],{"class":168},[19,74254,74255],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[1452,74257,74258],{"start":228},[1455,74259,74260,74261,74263,74264,74266],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[56786,74262],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[56786,74265],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[3284,74268,74270],{"id":74269},"_345-navigator对象","3.4.5 navigator对象",[19,74272,74273],{},[4602,74274],{"alt":158,"src":74275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[153,74277,74281],{"className":74278,"code":74279,"language":74280,"meta":158,"style":158},"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",[71,74282,74283,74288,74299,74311,74316,74367,74408,74413,74426,74438,74443],{"__ignoreMap":158},[162,74284,74285],{"class":164,"line":165},[162,74286,74287],{"class":361},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[162,74289,74290,74292,74294,74296],{"class":164,"line":197},[162,74291,3526],{"class":172},[162,74293,604],{"class":168},[162,74295,57519],{"class":172},[162,74297,74298],{"class":168}," () { \n",[162,74300,74301,74303,74306,74308],{"class":164,"line":228},[162,74302,9898],{"class":172},[162,74304,74305],{"class":207}," userAgent",[162,74307,16659],{"class":172},[162,74309,74310],{"class":168}," navigator.userAgent \n",[162,74312,74313],{"class":164,"line":252},[162,74314,74315],{"class":361},"\u002F\u002F 验证是否为Android或iPhone \n",[162,74317,74318,74320,74323,74325,74328,74331,74333,74335,74338,74340,74343,74347,74349,74351,74353,74356,74358,74360,74362,74364],{"class":164,"line":328},[162,74319,9898],{"class":172},[162,74321,74322],{"class":207}," android",[162,74324,16659],{"class":172},[162,74326,74327],{"class":168}," userAgent.",[162,74329,74330],{"class":5082},"match",[162,74332,604],{"class":168},[162,74334,946],{"class":179},[162,74336,74337],{"class":51050},"(Android);",[162,74339,4259],{"class":172},[162,74341,74342],{"class":207},"[\\s",[162,74344,74346],{"class":74345},"snhLl","\\\u002F",[162,74348,3120],{"class":207},[162,74350,3771],{"class":172},[162,74352,604],{"class":51050},[162,74354,74355],{"class":207},"[\\d.]",[162,74357,3771],{"class":172},[162,74359,3720],{"class":51050},[162,74361,4259],{"class":172},[162,74363,946],{"class":179},[162,74365,74366],{"class":168},") \n",[162,74368,74369,74371,74374,74376,74378,74380,74382,74384,74387,74390,74393,74395,74397,74400,74402,74404,74406],{"class":164,"line":466},[162,74370,9898],{"class":172},[162,74372,74373],{"class":207}," iphone",[162,74375,16659],{"class":172},[162,74377,74327],{"class":168},[162,74379,74330],{"class":5082},[162,74381,604],{"class":168},[162,74383,946],{"class":179},[162,74385,74386],{"class":51050},"(iPhone",[162,74388,74389],{"class":207},"\\s",[162,74391,74392],{"class":51050},"OS)",[162,74394,74389],{"class":207},[162,74396,604],{"class":51050},[162,74398,74399],{"class":207},"[\\d_]",[162,74401,3771],{"class":172},[162,74403,3720],{"class":51050},[162,74405,946],{"class":179},[162,74407,74366],{"class":168},[162,74409,74410],{"class":164,"line":471},[162,74411,74412],{"class":361},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[162,74414,74415,74417,74420,74423],{"class":164,"line":687},[162,74416,2703],{"class":172},[162,74418,74419],{"class":168}," (android ",[162,74421,74422],{"class":172},"||",[162,74424,74425],{"class":168}," iphone) { \n",[162,74427,74428,74431,74433,74436],{"class":164,"line":692},[162,74429,74430],{"class":168},"location.href ",[162,74432,173],{"class":172},[162,74434,74435],{"class":179}," 'http:\u002F\u002Fm.itcast.cn'",[162,74437,5791],{"class":168},[162,74439,74440],{"class":164,"line":698},[162,74441,74442],{"class":168},"} \n",[162,74444,74445],{"class":164,"line":2955},[162,74446,74447],{"class":168},"})()\n",[3284,74449,74451],{"id":74450},"_346-histroy对象","3.4.6 histroy对象",[19,74453,74454],{},[4602,74455],{"alt":158,"src":74456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,74458,74459],{},"浏览器地址的前进与后退!!!",[19,74461,74462],{},"history.back() 等效于 history.go(-1)",[19,74464,74465],{},"history.forward() 等效于 history.go(1)",[14,74467,74469],{"id":74468},"_35-本地存储","3.5 本地存储",[1452,74471,74472,74475,74478],{},[1455,74473,74474],{},"数据存储在用户浏览器中",[1455,74476,74477],{},"设置、读取方便、甚至页面刷新不丢失数据",[1455,74479,74480],{},"容量较大，sessionStorage和localStorage约 5M 左右",[3284,74482,74484],{"id":74483},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,74486,74487],{},"只能存储字符串",[19,74489,74490],{},[4602,74491],{"alt":158,"src":74492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,74494,74495],{},[4602,74496],{"alt":158,"src":74497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,74499,74500],{},"键值对要加引号,不然就会当变量来看了",[19,74502,74503],{},"localStorage.setItem('uname', 'pink')",[19,74505,74506],{},"刷新之后信息不再丢失",[19,74508,74509],{},"操作key,value会跟着变",[19,74511,74512],{},"删除只删除键就可以,即名字",[19,74514,74503],{},[19,74516,74517],{},"改:",[19,74519,74520],{},"localStorage.setItem('uname','red')",[19,74522,74523],{},"有这个键就是改,没有这个键就是改",[19,74525,74526],{},[4602,74527],{"alt":158,"src":74528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,74530,74531],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,74533,74534],{},[4602,74535],{"alt":158,"src":74536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,74538,74539],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[3284,74541,74543],{"id":74542},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,74545,74546],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,74548,74549],{},"特性:",[1452,74551,74552,74555,74558,74561],{},[1455,74553,74554],{},"生命周期为关闭浏览器窗口",[1455,74556,74557],{},"在同一个窗口(页面)下数据可以共享",[1455,74559,74560],{},"以键值对的形式存储使用",[1455,74562,74563],{},"用法跟localStorage 基本相同",[3284,74565,74567],{"id":74566},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,74569,74570],{},"本地只能存储字符串,无法直接存储复杂数据类型",[153,74572,74574],{"className":56137,"code":74573,"language":56139,"meta":158,"style":158},"\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",[71,74575,74576,74584,74589,74594,74599,74604,74608,74613,74618],{"__ignoreMap":158},[162,74577,74578,74580,74582],{"class":164,"line":165},[162,74579,4187],{"class":168},[162,74581,54885],{"class":54373},[162,74583,54380],{"class":168},[162,74585,74586],{"class":164,"line":197},[162,74587,74588],{"class":168},"    const obj = {\n",[162,74590,74591],{"class":164,"line":228},[162,74592,74593],{"class":168},"      uname: 'pink老师',\n",[162,74595,74596],{"class":164,"line":252},[162,74597,74598],{"class":168},"      age: 18,\n",[162,74600,74601],{"class":164,"line":328},[162,74602,74603],{"class":168},"      gender: '女'\n",[162,74605,74606],{"class":164,"line":466},[162,74607,5305],{"class":168},[162,74609,74610],{"class":164,"line":471},[162,74611,74612],{"class":168},"    \u002F\u002F 存储复杂数据类型\n",[162,74614,74615],{"class":164,"line":687},[162,74616,74617],{"class":168},"    localStorage.setItem('obj', obj)\n",[162,74619,74620,74622,74624],{"class":164,"line":692},[162,74621,55487],{"class":168},[162,74623,54885],{"class":54373},[162,74625,54380],{"class":168},[19,74627,74628],{},[4602,74629],{"alt":158,"src":74630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,74632,74633],{},"如果获取一下数据:",[19,74635,74636],{},"log(localStorage.getItem('obj'))",[19,74638,74639],{},[4602,74640],{"alt":158,"src":74641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,74643,74644],{},"发现直接存对象是使用不了的!!!",[25089,74646,74648],{"id":74647},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,74650,74651],{},[4602,74652],{"alt":158,"src":74653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[153,74655,74657],{"className":53706,"code":74656,"language":53708,"meta":158,"style":158},"\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",[71,74658,74659,74667,74677,74687,74696,74704,74708,74712,74738,74757,74765,74769,74774,74779],{"__ignoreMap":158},[162,74660,74661,74663,74665],{"class":164,"line":165},[162,74662,4187],{"class":168},[162,74664,54885],{"class":54373},[162,74666,54380],{"class":168},[162,74668,74669,74671,74673,74675],{"class":164,"line":197},[162,74670,14317],{"class":172},[162,74672,73036],{"class":207},[162,74674,16659],{"class":172},[162,74676,1722],{"class":168},[162,74678,74679,74682,74685],{"class":164,"line":228},[162,74680,74681],{"class":168},"      uname: ",[162,74683,74684],{"class":179},"'pink老师'",[162,74686,1735],{"class":168},[162,74688,74689,74692,74694],{"class":164,"line":252},[162,74690,74691],{"class":168},"      age: ",[162,74693,242],{"class":207},[162,74695,1735],{"class":168},[162,74697,74698,74701],{"class":164,"line":328},[162,74699,74700],{"class":168},"      gender: ",[162,74702,74703],{"class":179},"'女'\n",[162,74705,74706],{"class":164,"line":466},[162,74707,5305],{"class":168},[162,74709,74710],{"class":164,"line":471},[162,74711,74612],{"class":361},[162,74713,74714,74717,74720,74722,74725,74727,74730,74732,74735],{"class":164,"line":687},[162,74715,74716],{"class":168},"  localStorage.",[162,74718,74719],{"class":5082},"setItem",[162,74721,604],{"class":168},[162,74723,74724],{"class":179},"'obj'",[162,74726,183],{"class":168},[162,74728,74729],{"class":207},"JSON",[162,74731,3847],{"class":168},[162,74733,74734],{"class":5082},"stringify",[162,74736,74737],{"class":168},"(obj))\n",[162,74739,74740,74743,74745,74748,74751,74753,74755],{"class":164,"line":692},[162,74741,74742],{"class":168},"  console.",[162,74744,61316],{"class":5082},[162,74746,74747],{"class":168},"(localStorage.",[162,74749,74750],{"class":5082},"getItem",[162,74752,604],{"class":168},[162,74754,74724],{"class":179},[162,74756,586],{"class":168},[162,74758,74759,74761,74763],{"class":164,"line":698},[162,74760,55487],{"class":168},[162,74762,54885],{"class":54373},[162,74764,54380],{"class":168},[162,74766,74767],{"class":164,"line":2955},[162,74768,73686],{"class":168},[162,74770,74771],{"class":164,"line":2960},[162,74772,74773],{"class":168},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[162,74775,74776],{"class":164,"line":2971},[162,74777,74778],{"class":168},"  类型是字符串的\n",[162,74780,74781],{"class":164,"line":2984},[162,74782,74783],{"class":168},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[25089,74785,74787],{"id":74786},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,74789,74790],{},[4602,74791],{"alt":158,"src":74792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,74794,74795],{},[4602,74796],{"alt":158,"src":74797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[153,74799,74801],{"className":56137,"code":74800,"language":56139,"meta":158,"style":158},"  \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",[71,74802,74803,74811,74815,74819,74823,74827,74831,74836,74841,74846,74851,74856,74861,74866,74871],{"__ignoreMap":158},[162,74804,74805,74807,74809],{"class":164,"line":165},[162,74806,55215],{"class":168},[162,74808,54885],{"class":54373},[162,74810,54380],{"class":168},[162,74812,74813],{"class":164,"line":197},[162,74814,74588],{"class":168},[162,74816,74817],{"class":164,"line":228},[162,74818,74593],{"class":168},[162,74820,74821],{"class":164,"line":252},[162,74822,74598],{"class":168},[162,74824,74825],{"class":164,"line":328},[162,74826,74603],{"class":168},[162,74828,74829],{"class":164,"line":466},[162,74830,5305],{"class":168},[162,74832,74833],{"class":164,"line":471},[162,74834,74835],{"class":168},"    \u002F\u002F 1.存储复杂数据类型\n",[162,74837,74838],{"class":164,"line":687},[162,74839,74840],{"class":168},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[162,74842,74843],{"class":164,"line":692},[162,74844,74845],{"class":168},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[162,74847,74848],{"class":164,"line":698},[162,74849,74850],{"class":168},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[162,74852,74853],{"class":164,"line":2955},[162,74854,74855],{"class":168},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[162,74857,74858],{"class":164,"line":2960},[162,74859,74860],{"class":168},"    \u002F\u002F 取\n",[162,74862,74863],{"class":164,"line":2971},[162,74864,74865],{"class":168},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[162,74867,74868],{"class":164,"line":2984},[162,74869,74870],{"class":168},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[162,74872,74873,74875,74877],{"class":164,"line":2989},[162,74874,55487],{"class":168},[162,74876,54885],{"class":54373},[162,74878,54380],{"class":168},[19,74880,74881],{},[4602,74882],{"alt":158,"src":74883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[3284,74885,74887],{"id":74886},"_356-数组map方法","3.5.6 数组map方法",[19,74889,74890],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,74892,74893],{},[4602,74894],{"alt":158,"src":74895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,74897,74898],{},[4602,74899],{"alt":158,"src":74900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,74902,74903,74906],{},[3453,74904,74905],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,74908,74909],{},"map有返回值，但是forEach没有返回值",[19,74911,74912],{},"map是个方法。用的时候要加 ()",[19,74914,74915],{},"map返回的是一个数组",[3284,74917,74919],{"id":74918},"_357-数组中join方法","3.5.7 数组中join方法",[19,74921,74922],{},[4602,74923],{"alt":158,"src":74924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,74926,74927],{},"类似于python中拼接字符串一样！",[1452,74929,74930,74933,74936],{},[1455,74931,74932],{},"小括号为空则逗号分开",[1455,74934,74935],{},"小括号为空字符串 ''，则元素之间没有分隔符",[1455,74937,74938],{},"小括号用啥符号就用进行分割",[3284,74940,74942],{"id":74941},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[1452,74944,74945,74948,74951,74954,74957],{},[1455,74946,74947],{},"记住本地时间获取快速方式：new Date().toDateString()",[1455,74949,74950],{},"尽量减少DOM操作，用好map+join的渲染方式",[1455,74952,74953],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[1455,74955,74956],{},"return可以实现函数的结束",[1455,74958,74959],{},"禁止跳转是 preventDefault() 不要忘记",[153,74961,74963],{"className":53706,"code":74962,"language":53708,"meta":158,"style":158},"\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",[71,74964,74965,74975,74989,74993,75001,75015,75035,75047,75055,75061,75071,75081,75085,75089,75095,75105,75117,75121,75125,75132,75144,75158,75168,75172,75176,75183,75190,75197,75209,75221,75231,75243,75247,75251,75258,75265,75277,75289,75299,75311,75341,75345,75349,75356,75368,75380,75404,75414,75424,75428,75432,75440,75451,75463,75475,75487,75504,75516,75528,75532,75536,75543,75555,75567,75579,75590,75608,75621,75633,75657,75668,75672,75676,75684,75694,75698,75702,75708,75720,75731,75741,75745,75749,75755,75777,75781,75785,75791,75797,75809,75819,75831,75861,75874,75891,75895,75899,75910,75932,75942,75946,75950,75963,75973,75985,75997,76009,76021,76031,76041,76051,76062,76075,76079,76087,76095,76099,76107,76120,76140,76173,76206,76239,76265,76283,76301,76309,76335,76353,76371,76389,76407,76425,76433,76441,76459,76467,76496,76504,76512,76520,76533,76545,76557,76569,76581,76593,76606,76618,76626,76634,76642,76647,76652,76656,76660,76664,76668,76672,76676,76681,76686,76691,76696,76704,76712,76720,76725,76730,76735,76740,76745,76750,76755,76760,76765,76770,76775,76780,76785,76790,76794,76799,76804,76814,76823,76827,76832,76841,76857,76899,76939,76978,77043,77051,77055,77060,77078,77086,77091,77096,77126,77132,77137,77150,77162,77174,77186,77198,77210,77222,77226,77236,77240,77245,77250,77254,77263,77267,77272,77277,77296,77301,77321,77325,77330,77334,77339,77357,77375,77393,77412,77431,77450,77455,77461,77482,77488,77497,77503,77509,77515,77542,77555,77560,77570,77576,77582,77588,77594,77599,77605,77611,77617,77623,77656,77661,77666,77671,77676,77682,77688,77694,77705,77710,77716,77723,77737,77743,77767,77772,77777,77783,77789,77810,77816,77829,77835,77841,77847,77853,77858,77864,77870,77876,77894,77908,77914,77922,77928,77950,77955,77960,77965,77970,77975,77984,77993,77998],{"__ignoreMap":158},[162,74966,74967,74969,74971,74973],{"class":164,"line":165},[162,74968,54370],{"class":168},[162,74970,54374],{"class":54373},[162,74972,54377],{"class":5082},[162,74974,54380],{"class":168},[162,74976,74977,74979,74981,74983,74985,74987],{"class":164,"line":197},[162,74978,4187],{"class":168},[162,74980,53708],{"class":54373},[162,74982,54389],{"class":5082},[162,74984,173],{"class":168},[162,74986,54394],{"class":179},[162,74988,54380],{"class":168},[162,74990,74991],{"class":164,"line":228},[162,74992,301],{"emptyLinePlaceholder":300},[162,74994,74995,74997,74999],{"class":164,"line":252},[162,74996,4187],{"class":168},[162,74998,54407],{"class":54373},[162,75000,54380],{"class":168},[162,75002,75003,75005,75007,75009,75011,75013],{"class":164,"line":328},[162,75004,55215],{"class":168},[162,75006,54417],{"class":54373},[162,75008,54420],{"class":5082},[162,75010,173],{"class":168},[162,75012,54425],{"class":179},[162,75014,54380],{"class":168},[162,75016,75017,75019,75021,75023,75025,75027,75029,75031,75033],{"class":164,"line":466},[162,75018,55215],{"class":168},[162,75020,54417],{"class":54373},[162,75022,18013],{"class":5082},[162,75024,173],{"class":168},[162,75026,54464],{"class":179},[162,75028,54444],{"class":5082},[162,75030,173],{"class":168},[162,75032,54471],{"class":179},[162,75034,54380],{"class":168},[162,75036,75037,75039,75041,75043,75045],{"class":164,"line":471},[162,75038,55215],{"class":168},[162,75040,54480],{"class":54373},[162,75042,54483],{"class":168},[162,75044,54480],{"class":54373},[162,75046,54380],{"class":168},[162,75048,75049,75051,75053],{"class":164,"line":687},[162,75050,55215],{"class":168},[162,75052,3219],{"class":54373},[162,75054,54380],{"class":168},[162,75056,75057,75059],{"class":164,"line":692},[162,75058,9509],{"class":54373},[162,75060,1722],{"class":168},[162,75062,75063,75065,75067,75069],{"class":164,"line":698},[162,75064,57765],{"class":207},[162,75066,1730],{"class":168},[162,75068,312],{"class":207},[162,75070,4433],{"class":168},[162,75072,75073,75075,75077,75079],{"class":164,"line":2955},[162,75074,57776],{"class":207},[162,75076,1730],{"class":168},[162,75078,312],{"class":207},[162,75080,4433],{"class":168},[162,75082,75083],{"class":164,"line":2960},[162,75084,5305],{"class":168},[162,75086,75087],{"class":164,"line":2971},[162,75088,301],{"emptyLinePlaceholder":300},[162,75090,75091,75093],{"class":164,"line":2984},[162,75092,60348],{"class":54373},[162,75094,1722],{"class":168},[162,75096,75097,75099,75101,75103],{"class":164,"line":2989},[162,75098,60355],{"class":207},[162,75100,1730],{"class":168},[162,75102,54664],{"class":207},[162,75104,4433],{"class":168},[162,75106,75107,75109,75111,75113,75115],{"class":164,"line":3011},[162,75108,65145],{"class":207},[162,75110,1730],{"class":168},[162,75112,1011],{"class":207},[162,75114,54564],{"class":172},[162,75116,4433],{"class":168},[162,75118,75119],{"class":164,"line":3022},[162,75120,5305],{"class":168},[162,75122,75123],{"class":164,"line":3027},[162,75124,301],{"emptyLinePlaceholder":300},[162,75126,75127,75130],{"class":164,"line":3046},[162,75128,75129],{"class":5082},"    .info",[162,75131,1722],{"class":168},[162,75133,75134,75136,75138,75140,75142],{"class":164,"line":3052},[162,75135,57841],{"class":207},[162,75137,1730],{"class":168},[162,75139,54561],{"class":207},[162,75141,54564],{"class":172},[162,75143,4433],{"class":168},[162,75145,75146,75148,75150,75152,75154,75156],{"class":164,"line":3057},[162,75147,57776],{"class":207},[162,75149,1730],{"class":168},[162,75151,1006],{"class":207},[162,75153,54564],{"class":172},[162,75155,54628],{"class":207},[162,75157,4433],{"class":168},[162,75159,75160,75162,75164,75166],{"class":164,"line":3072},[162,75161,60355],{"class":207},[162,75163,1730],{"class":168},[162,75165,54664],{"class":207},[162,75167,4433],{"class":168},[162,75169,75170],{"class":164,"line":3077},[162,75171,5305],{"class":168},[162,75173,75174],{"class":164,"line":3100},[162,75175,301],{"emptyLinePlaceholder":300},[162,75177,75178,75181],{"class":164,"line":3140},[162,75179,75180],{"class":5082},"    .uname",[162,75182,1735],{"class":168},[162,75184,75185,75188],{"class":164,"line":4878},[162,75186,75187],{"class":5082},"    .age",[162,75189,1735],{"class":168},[162,75191,75192,75195],{"class":164,"line":4883},[162,75193,75194],{"class":5082},"    .salary",[162,75196,1722],{"class":168},[162,75198,75199,75201,75203,75205,75207],{"class":164,"line":4897},[162,75200,57841],{"class":207},[162,75202,1730],{"class":168},[162,75204,3608],{"class":207},[162,75206,54564],{"class":172},[162,75208,4433],{"class":168},[162,75210,75211,75213,75215,75217,75219],{"class":164,"line":4902},[162,75212,57855],{"class":207},[162,75214,1730],{"class":168},[162,75216,1011],{"class":207},[162,75218,54564],{"class":172},[162,75220,4433],{"class":168},[162,75222,75223,75225,75227,75229],{"class":164,"line":5694},[162,75224,64848],{"class":207},[162,75226,1730],{"class":168},[162,75228,57807],{"class":207},[162,75230,4433],{"class":168},[162,75232,75233,75235,75237,75239,75241],{"class":164,"line":5708},[162,75234,64818],{"class":207},[162,75236,1730],{"class":168},[162,75238,3863],{"class":207},[162,75240,54564],{"class":172},[162,75242,4433],{"class":168},[162,75244,75245],{"class":164,"line":5716},[162,75246,5305],{"class":168},[162,75248,75249],{"class":164,"line":5721},[162,75250,301],{"emptyLinePlaceholder":300},[162,75252,75253,75256],{"class":164,"line":5727},[162,75254,75255],{"class":5082},"    .gender",[162,75257,1735],{"class":168},[162,75259,75260,75263],{"class":164,"line":5733},[162,75261,75262],{"class":5082},"    .city",[162,75264,1722],{"class":168},[162,75266,75267,75269,75271,75273,75275],{"class":164,"line":5738},[162,75268,57841],{"class":207},[162,75270,1730],{"class":168},[162,75272,3608],{"class":207},[162,75274,54564],{"class":172},[162,75276,4433],{"class":168},[162,75278,75279,75281,75283,75285,75287],{"class":164,"line":11052},[162,75280,57855],{"class":207},[162,75282,1730],{"class":168},[162,75284,4106],{"class":207},[162,75286,54564],{"class":172},[162,75288,4433],{"class":168},[162,75290,75291,75293,75295,75297],{"class":164,"line":11076},[162,75292,64848],{"class":207},[162,75294,1730],{"class":168},[162,75296,57807],{"class":207},[162,75298,4433],{"class":168},[162,75300,75301,75303,75305,75307,75309],{"class":164,"line":11081},[162,75302,64818],{"class":207},[162,75304,1730],{"class":168},[162,75306,3863],{"class":207},[162,75308,54564],{"class":172},[162,75310,4433],{"class":168},[162,75312,75313,75315,75317,75319,75321,75323,75326,75328,75330,75332,75335,75337,75339],{"class":164,"line":11087},[162,75314,65045],{"class":207},[162,75316,1730],{"class":168},[162,75318,208],{"class":207},[162,75320,54564],{"class":172},[162,75322,54593],{"class":207},[162,75324,75325],{"class":207}," rgb",[162,75327,604],{"class":168},[162,75329,4845],{"class":207},[162,75331,183],{"class":168},[162,75333,75334],{"class":207},"197",[162,75336,183],{"class":168},[162,75338,75334],{"class":207},[162,75340,5836],{"class":168},[162,75342,75343],{"class":164,"line":11114},[162,75344,5305],{"class":168},[162,75346,75347],{"class":164,"line":11119},[162,75348,301],{"emptyLinePlaceholder":300},[162,75350,75351,75354],{"class":164,"line":11125},[162,75352,75353],{"class":54373},"    button",[162,75355,1722],{"class":168},[162,75357,75358,75360,75362,75364,75366],{"class":164,"line":11137},[162,75359,57855],{"class":207},[162,75361,1730],{"class":168},[162,75363,4106],{"class":207},[162,75365,54564],{"class":172},[162,75367,4433],{"class":168},[162,75369,75370,75372,75374,75376,75378],{"class":164,"line":11149},[162,75371,57841],{"class":207},[162,75373,1730],{"class":168},[162,75375,3774],{"class":207},[162,75377,54564],{"class":172},[162,75379,4433],{"class":168},[162,75381,75382,75384,75386,75389,75391,75393,75395,75398,75400,75402],{"class":164,"line":11161},[162,75383,57954],{"class":207},[162,75385,1730],{"class":168},[162,75387,75388],{"class":207},"rgb",[162,75390,604],{"class":168},[162,75392,4242],{"class":207},[162,75394,183],{"class":168},[162,75396,75397],{"class":207},"187",[162,75399,183],{"class":168},[162,75401,3596],{"class":207},[162,75403,5836],{"class":168},[162,75405,75406,75408,75410,75412],{"class":164,"line":12816},[162,75407,60485],{"class":207},[162,75409,1730],{"class":168},[162,75411,63910],{"class":207},[162,75413,4433],{"class":168},[162,75415,75416,75418,75420,75422],{"class":164,"line":12841},[162,75417,65045],{"class":207},[162,75419,1730],{"class":168},[162,75421,312],{"class":207},[162,75423,4433],{"class":168},[162,75425,75426],{"class":164,"line":12864},[162,75427,5305],{"class":168},[162,75429,75430],{"class":164,"line":12888},[162,75431,301],{"emptyLinePlaceholder":300},[162,75433,75434,75436,75438],{"class":164,"line":12893},[162,75435,75353],{"class":54373},[162,75437,54760],{"class":54373},[162,75439,1722],{"class":168},[162,75441,75442,75444,75446,75449],{"class":164,"line":12898},[162,75443,58079],{"class":207},[162,75445,1730],{"class":168},[162,75447,75448],{"class":207},"inline-block",[162,75450,4433],{"class":168},[162,75452,75453,75455,75457,75459,75461],{"class":164,"line":12903},[162,75454,57841],{"class":207},[162,75456,1730],{"class":168},[162,75458,1006],{"class":207},[162,75460,54564],{"class":172},[162,75462,4433],{"class":168},[162,75464,75465,75467,75469,75471,75473],{"class":164,"line":12912},[162,75466,57855],{"class":207},[162,75468,1730],{"class":168},[162,75470,1006],{"class":207},[162,75472,54564],{"class":172},[162,75474,4433],{"class":168},[162,75476,75477,75479,75481,75483,75485],{"class":164,"line":12917},[162,75478,60428],{"class":207},[162,75480,1730],{"class":168},[162,75482,3762],{"class":207},[162,75484,54564],{"class":172},[162,75486,4433],{"class":168},[162,75488,75489,75491,75493,75495,75497,75499,75502],{"class":164,"line":12923},[162,75490,65045],{"class":207},[162,75492,1730],{"class":168},[162,75494,208],{"class":207},[162,75496,54564],{"class":172},[162,75498,54593],{"class":207},[162,75500,75501],{"class":207}," #fff",[162,75503,4433],{"class":168},[162,75505,75506,75508,75510,75512,75514],{"class":164,"line":12944},[162,75507,58204],{"class":207},[162,75509,1730],{"class":168},[162,75511,637],{"class":207},[162,75513,54564],{"class":172},[162,75515,4433],{"class":168},[162,75517,75518,75520,75522,75524,75526],{"class":164,"line":12950},[162,75519,64818],{"class":207},[162,75521,1730],{"class":168},[162,75523,208],{"class":207},[162,75525,54564],{"class":172},[162,75527,4433],{"class":168},[162,75529,75530],{"class":164,"line":12964},[162,75531,5305],{"class":168},[162,75533,75534],{"class":164,"line":12970},[162,75535,301],{"emptyLinePlaceholder":300},[162,75537,75538,75541],{"class":164,"line":12997},[162,75539,75540],{"class":5082},"    .total",[162,75542,1722],{"class":168},[162,75544,75545,75547,75549,75551,75553],{"class":164,"line":13006},[162,75546,57841],{"class":207},[162,75548,1730],{"class":168},[162,75550,64697],{"class":207},[162,75552,54564],{"class":172},[162,75554,4433],{"class":168},[162,75556,75557,75559,75561,75563,75565],{"class":164,"line":13012},[162,75558,57855],{"class":207},[162,75560,1730],{"class":168},[162,75562,3693],{"class":207},[162,75564,54564],{"class":172},[162,75566,4433],{"class":168},[162,75568,75569,75571,75573,75575,75577],{"class":164,"line":13020},[162,75570,60428],{"class":207},[162,75572,1730],{"class":168},[162,75574,3693],{"class":207},[162,75576,54564],{"class":172},[162,75578,4433],{"class":168},[162,75580,75581,75583,75585,75588],{"class":164,"line":13025},[162,75582,60355],{"class":207},[162,75584,1730],{"class":168},[162,75586,75587],{"class":207},"right",[162,75589,4433],{"class":168},[162,75591,75592,75594,75596,75598,75600,75602,75604,75606],{"class":164,"line":19695},[162,75593,57776],{"class":207},[162,75595,1730],{"class":168},[162,75597,3693],{"class":207},[162,75599,54564],{"class":172},[162,75601,54628],{"class":207},[162,75603,5156],{"class":207},[162,75605,54564],{"class":172},[162,75607,4433],{"class":168},[162,75609,75610,75613,75615,75617,75619],{"class":164,"line":19701},[162,75611,75612],{"class":207},"      padding-right",[162,75614,1730],{"class":168},[162,75616,1006],{"class":207},[162,75618,54564],{"class":172},[162,75620,4433],{"class":168},[162,75622,75623,75625,75627,75629,75631],{"class":164,"line":19724},[162,75624,57992],{"class":207},[162,75626,1730],{"class":168},[162,75628,3813],{"class":207},[162,75630,54564],{"class":172},[162,75632,4433],{"class":168},[162,75634,75635,75637,75639,75641,75643,75646,75648,75651,75653,75655],{"class":164,"line":19730},[162,75636,57954],{"class":207},[162,75638,1730],{"class":168},[162,75640,75388],{"class":207},[162,75642,604],{"class":168},[162,75644,75645],{"class":207},"237",[162,75647,183],{"class":168},[162,75649,75650],{"class":207},"235",[162,75652,183],{"class":168},[162,75654,75650],{"class":207},[162,75656,5836],{"class":168},[162,75658,75659,75662,75664,75666],{"class":164,"line":19753},[162,75660,75661],{"class":207},"      box-sizing",[162,75663,1730],{"class":168},[162,75665,63574],{"class":207},[162,75667,4433],{"class":168},[162,75669,75670],{"class":164,"line":19767},[162,75671,5305],{"class":168},[162,75673,75674],{"class":164,"line":19787},[162,75675,301],{"emptyLinePlaceholder":300},[162,75677,75678,75680,75682],{"class":164,"line":19793},[162,75679,75540],{"class":5082},[162,75681,54760],{"class":54373},[162,75683,1722],{"class":168},[162,75685,75686,75688,75690,75692],{"class":164,"line":19804},[162,75687,60485],{"class":207},[162,75689,1730],{"class":168},[162,75691,60490],{"class":207},[162,75693,4433],{"class":168},[162,75695,75696],{"class":164,"line":19827},[162,75697,5305],{"class":168},[162,75699,75700],{"class":164,"line":19849},[162,75701,301],{"emptyLinePlaceholder":300},[162,75703,75704,75706],{"class":164,"line":19854},[162,75705,68090],{"class":54373},[162,75707,1722],{"class":168},[162,75709,75710,75712,75714,75716,75718],{"class":164,"line":19860},[162,75711,57841],{"class":207},[162,75713,1730],{"class":168},[162,75715,64697],{"class":207},[162,75717,54564],{"class":172},[162,75719,4433],{"class":168},[162,75721,75722,75724,75726,75729],{"class":164,"line":19874},[162,75723,57776],{"class":207},[162,75725,1730],{"class":168},[162,75727,75728],{"class":207},"auto",[162,75730,4433],{"class":168},[162,75732,75733,75735,75737,75739],{"class":164,"line":19887},[162,75734,68097],{"class":207},[162,75736,1730],{"class":168},[162,75738,68102],{"class":207},[162,75740,4433],{"class":168},[162,75742,75743],{"class":164,"line":19892},[162,75744,5305],{"class":168},[162,75746,75747],{"class":164,"line":19906},[162,75748,301],{"emptyLinePlaceholder":300},[162,75750,75751,75753],{"class":164,"line":19911},[162,75752,68182],{"class":54373},[162,75754,1722],{"class":168},[162,75756,75757,75759,75761,75763,75765,75767,75769,75771,75773,75775],{"class":164,"line":19917},[162,75758,57954],{"class":207},[162,75760,1730],{"class":168},[162,75762,75388],{"class":207},[162,75764,604],{"class":168},[162,75766,75645],{"class":207},[162,75768,183],{"class":168},[162,75770,75650],{"class":207},[162,75772,183],{"class":168},[162,75774,75650],{"class":207},[162,75776,5836],{"class":168},[162,75778,75779],{"class":164,"line":19922},[162,75780,5305],{"class":168},[162,75782,75783],{"class":164,"line":19936},[162,75784,301],{"emptyLinePlaceholder":300},[162,75786,75787,75789],{"class":164,"line":19941},[162,75788,68182],{"class":54373},[162,75790,1735],{"class":168},[162,75792,75793,75795],{"class":164,"line":19946},[162,75794,68248],{"class":54373},[162,75796,1722],{"class":168},[162,75798,75799,75801,75803,75805,75807],{"class":164,"line":19960},[162,75800,57855],{"class":207},[162,75802,1730],{"class":168},[162,75804,3571],{"class":207},[162,75806,54564],{"class":172},[162,75808,4433],{"class":168},[162,75810,75811,75813,75815,75817],{"class":164,"line":19972},[162,75812,60355],{"class":207},[162,75814,1730],{"class":168},[162,75816,26827],{"class":207},[162,75818,4433],{"class":168},[162,75820,75821,75823,75825,75827,75829],{"class":164,"line":19977},[162,75822,57992],{"class":207},[162,75824,1730],{"class":168},[162,75826,3838],{"class":207},[162,75828,54564],{"class":172},[162,75830,4433],{"class":168},[162,75832,75833,75835,75837,75839,75841,75843,75845,75847,75850,75852,75855,75857,75859],{"class":164,"line":19990},[162,75834,65045],{"class":207},[162,75836,1730],{"class":168},[162,75838,208],{"class":207},[162,75840,54564],{"class":172},[162,75842,54593],{"class":207},[162,75844,75325],{"class":207},[162,75846,604],{"class":168},[162,75848,75849],{"class":207},"228",[162,75851,183],{"class":168},[162,75853,75854],{"class":207},"225",[162,75856,183],{"class":168},[162,75858,75854],{"class":207},[162,75860,5836],{"class":168},[162,75862,75863,75866,75868,75870,75872],{"class":164,"line":19995},[162,75864,75865],{"class":207},"      padding-left",[162,75867,1730],{"class":168},[162,75869,637],{"class":207},[162,75871,54564],{"class":172},[162,75873,4433],{"class":168},[162,75875,75876,75878,75880,75882,75885,75887,75889],{"class":164,"line":20000},[162,75877,64928],{"class":207},[162,75879,1730],{"class":168},[162,75881,31210],{"class":207},[162,75883,75884],{"class":207}," linear",[162,75886,64935],{"class":207},[162,75888,3979],{"class":172},[162,75890,4433],{"class":168},[162,75892,75893],{"class":164,"line":20005},[162,75894,5305],{"class":168},[162,75896,75897],{"class":164,"line":20018},[162,75898,301],{"emptyLinePlaceholder":300},[162,75900,75901,75904,75906,75908],{"class":164,"line":20023},[162,75902,75903],{"class":54373},"    tbody",[162,75905,73209],{"class":54373},[162,75907,64008],{"class":5082},[162,75909,1722],{"class":168},[162,75911,75912,75914,75916,75918,75920,75922,75924,75926,75928,75930],{"class":164,"line":35709},[162,75913,57954],{"class":207},[162,75915,1730],{"class":168},[162,75917,75388],{"class":207},[162,75919,604],{"class":168},[162,75921,75645],{"class":207},[162,75923,183],{"class":168},[162,75925,75650],{"class":207},[162,75927,183],{"class":168},[162,75929,75650],{"class":207},[162,75931,5836],{"class":168},[162,75933,75934,75936,75938,75940],{"class":164,"line":35715},[162,75935,65093],{"class":207},[162,75937,1730],{"class":168},[162,75939,65098],{"class":207},[162,75941,4433],{"class":168},[162,75943,75944],{"class":164,"line":35721},[162,75945,5305],{"class":168},[162,75947,75948],{"class":164,"line":35727},[162,75949,301],{"emptyLinePlaceholder":300},[162,75951,75952,75954,75956,75959,75961],{"class":164,"line":35733},[162,75953,75903],{"class":54373},[162,75955,73209],{"class":54373},[162,75957,75958],{"class":54373}," td",[162,75960,4538],{"class":54373},[162,75962,1722],{"class":168},[162,75964,75965,75967,75969,75971],{"class":164,"line":35744},[162,75966,58079],{"class":207},[162,75968,1730],{"class":168},[162,75970,63937],{"class":207},[162,75972,4433],{"class":168},[162,75974,75975,75977,75979,75981,75983],{"class":164,"line":35750},[162,75976,57841],{"class":207},[162,75978,1730],{"class":168},[162,75980,4184],{"class":207},[162,75982,54564],{"class":172},[162,75984,4433],{"class":168},[162,75986,75987,75989,75991,75993,75995],{"class":164,"line":35770},[162,75988,57855],{"class":207},[162,75990,1730],{"class":168},[162,75992,4106],{"class":207},[162,75994,54564],{"class":172},[162,75996,4433],{"class":168},[162,75998,75999,76001,76003,76005,76007],{"class":164,"line":35776},[162,76000,60428],{"class":207},[162,76002,1730],{"class":168},[162,76004,4106],{"class":207},[162,76006,54564],{"class":172},[162,76008,4433],{"class":168},[162,76010,76011,76013,76015,76017,76019],{"class":164,"line":35787},[162,76012,65145],{"class":207},[162,76014,1730],{"class":168},[162,76016,213],{"class":207},[162,76018,54564],{"class":172},[162,76020,4433],{"class":168},[162,76022,76023,76025,76027,76029],{"class":164,"line":35793},[162,76024,60485],{"class":207},[162,76026,1730],{"class":168},[162,76028,63910],{"class":207},[162,76030,4433],{"class":168},[162,76032,76033,76035,76037,76039],{"class":164,"line":35799},[162,76034,60355],{"class":207},[162,76036,1730],{"class":168},[162,76038,54664],{"class":207},[162,76040,4433],{"class":168},[162,76042,76043,76045,76047,76049],{"class":164,"line":35805},[162,76044,67037],{"class":207},[162,76046,1730],{"class":168},[162,76048,57807],{"class":207},[162,76050,4433],{"class":168},[162,76052,76053,76055,76057,76060],{"class":164,"line":35811},[162,76054,57954],{"class":207},[162,76056,1730],{"class":168},[162,76058,76059],{"class":207},"orange",[162,76061,4433],{"class":168},[162,76063,76064,76066,76068,76071,76073],{"class":164,"line":35817},[162,76065,58204],{"class":207},[162,76067,1730],{"class":168},[162,76069,76070],{"class":207},"12.5",[162,76072,54564],{"class":172},[162,76074,4433],{"class":168},[162,76076,76077],{"class":164,"line":35823},[162,76078,5305],{"class":168},[162,76080,76081,76083,76085],{"class":164,"line":35829},[162,76082,55487],{"class":168},[162,76084,3219],{"class":54373},[162,76086,54380],{"class":168},[162,76088,76089,76091,76093],{"class":164,"line":35849},[162,76090,54857],{"class":168},[162,76092,54407],{"class":54373},[162,76094,54380],{"class":168},[162,76096,76097],{"class":164,"line":35855},[162,76098,301],{"emptyLinePlaceholder":300},[162,76100,76101,76103,76105],{"class":164,"line":35871},[162,76102,4187],{"class":168},[162,76104,54872],{"class":54373},[162,76106,54380],{"class":168},[162,76108,76109,76111,76113,76116,76118],{"class":164,"line":35877},[162,76110,55215],{"class":168},[162,76112,14],{"class":54373},[162,76114,76115],{"class":168},">学生就业统计表\u003C\u002F",[162,76117,14],{"class":54373},[162,76119,54380],{"class":168},[162,76121,76122,76124,76126,76128,76130,76132,76134,76136,76138],{"class":164,"line":35891},[162,76123,55215],{"class":168},[162,76125,69692],{"class":54373},[162,76127,56556],{"class":5082},[162,76129,173],{"class":168},[162,76131,65732],{"class":179},[162,76133,72137],{"class":5082},[162,76135,173],{"class":168},[162,76137,34855],{"class":179},[162,76139,54380],{"class":168},[162,76141,76142,76144,76146,76148,76150,76152,76154,76156,76158,76160,76162,76165,76167,76169,76171],{"class":164,"line":35897},[162,76143,54414],{"class":168},[162,76145,56891],{"class":54373},[162,76147,56894],{"class":5082},[162,76149,173],{"class":168},[162,76151,65766],{"class":179},[162,76153,18013],{"class":5082},[162,76155,173],{"class":168},[162,76157,72163],{"class":179},[162,76159,64088],{"class":5082},[162,76161,173],{"class":168},[162,76163,76164],{"class":179},"\"姓名\"",[162,76166,56556],{"class":5082},[162,76168,173],{"class":168},[162,76170,72163],{"class":179},[162,76172,54380],{"class":168},[162,76174,76175,76177,76179,76181,76183,76185,76187,76189,76191,76193,76195,76198,76200,76202,76204],{"class":164,"line":35912},[162,76176,54414],{"class":168},[162,76178,56891],{"class":54373},[162,76180,56894],{"class":5082},[162,76182,173],{"class":168},[162,76184,65766],{"class":179},[162,76186,18013],{"class":5082},[162,76188,173],{"class":168},[162,76190,1864],{"class":179},[162,76192,64088],{"class":5082},[162,76194,173],{"class":168},[162,76196,76197],{"class":179},"\"年龄\"",[162,76199,56556],{"class":5082},[162,76201,173],{"class":168},[162,76203,1864],{"class":179},[162,76205,54380],{"class":168},[162,76207,76208,76210,76212,76214,76216,76218,76220,76222,76224,76226,76228,76231,76233,76235,76237],{"class":164,"line":35918},[162,76209,54414],{"class":168},[162,76211,56891],{"class":54373},[162,76213,56894],{"class":5082},[162,76215,173],{"class":168},[162,76217,65766],{"class":179},[162,76219,18013],{"class":5082},[162,76221,173],{"class":168},[162,76223,72292],{"class":179},[162,76225,64088],{"class":5082},[162,76227,173],{"class":168},[162,76229,76230],{"class":179},"\"薪资\"",[162,76232,56556],{"class":5082},[162,76234,173],{"class":168},[162,76236,72292],{"class":179},[162,76238,54380],{"class":168},[162,76240,76241,76243,76245,76247,76249,76251,76253,76255,76257,76259,76261,76263],{"class":164,"line":35927},[162,76242,54414],{"class":168},[162,76244,72210],{"class":54373},[162,76246,18013],{"class":5082},[162,76248,173],{"class":168},[162,76250,72217],{"class":179},[162,76252,18052],{"class":5082},[162,76254,173],{"class":168},[162,76256,10756],{"class":179},[162,76258,56556],{"class":5082},[162,76260,173],{"class":168},[162,76262,72217],{"class":179},[162,76264,54380],{"class":168},[162,76266,76267,76269,76271,76273,76275,76277,76279,76281],{"class":164,"line":35933},[162,76268,58304],{"class":168},[162,76270,72232],{"class":54373},[162,76272,69718],{"class":5082},[162,76274,173],{"class":168},[162,76276,13061],{"class":179},[162,76278,72241],{"class":168},[162,76280,72232],{"class":54373},[162,76282,54380],{"class":168},[162,76284,76285,76287,76289,76291,76293,76295,76297,76299],{"class":164,"line":35942},[162,76286,58304],{"class":168},[162,76288,72232],{"class":54373},[162,76290,69718],{"class":5082},[162,76292,173],{"class":168},[162,76294,13130],{"class":179},[162,76296,72260],{"class":168},[162,76298,72232],{"class":54373},[162,76300,54380],{"class":168},[162,76302,76303,76305,76307],{"class":164,"line":35948},[162,76304,54848],{"class":168},[162,76306,72210],{"class":54373},[162,76308,54380],{"class":168},[162,76310,76311,76313,76315,76317,76319,76321,76323,76325,76327,76329,76331,76333],{"class":164,"line":35954},[162,76312,54414],{"class":168},[162,76314,72210],{"class":54373},[162,76316,18013],{"class":5082},[162,76318,173],{"class":168},[162,76320,72314],{"class":179},[162,76322,18052],{"class":5082},[162,76324,173],{"class":168},[162,76326,10756],{"class":179},[162,76328,56556],{"class":5082},[162,76330,173],{"class":168},[162,76332,72314],{"class":179},[162,76334,54380],{"class":168},[162,76336,76337,76339,76341,76343,76345,76347,76349,76351],{"class":164,"line":35963},[162,76338,58304],{"class":168},[162,76340,72232],{"class":54373},[162,76342,69718],{"class":5082},[162,76344,173],{"class":168},[162,76346,1033],{"class":179},[162,76348,72337],{"class":168},[162,76350,72232],{"class":54373},[162,76352,54380],{"class":168},[162,76354,76355,76357,76359,76361,76363,76365,76367,76369],{"class":164,"line":35969},[162,76356,58304],{"class":168},[162,76358,72232],{"class":54373},[162,76360,69718],{"class":5082},[162,76362,173],{"class":168},[162,76364,72354],{"class":179},[162,76366,72357],{"class":168},[162,76368,72232],{"class":54373},[162,76370,54380],{"class":168},[162,76372,76373,76375,76377,76379,76381,76383,76385,76387],{"class":164,"line":35980},[162,76374,58304],{"class":168},[162,76376,72232],{"class":54373},[162,76378,69718],{"class":5082},[162,76380,173],{"class":168},[162,76382,72374],{"class":179},[162,76384,72377],{"class":168},[162,76386,72232],{"class":54373},[162,76388,54380],{"class":168},[162,76390,76391,76393,76395,76397,76399,76401,76403,76405],{"class":164,"line":35986},[162,76392,58304],{"class":168},[162,76394,72232],{"class":54373},[162,76396,69718],{"class":5082},[162,76398,173],{"class":168},[162,76400,72394],{"class":179},[162,76402,72397],{"class":168},[162,76404,72232],{"class":54373},[162,76406,54380],{"class":168},[162,76408,76409,76411,76413,76415,76417,76419,76421,76423],{"class":164,"line":36005},[162,76410,58304],{"class":168},[162,76412,72232],{"class":54373},[162,76414,69718],{"class":5082},[162,76416,173],{"class":168},[162,76418,72414],{"class":179},[162,76420,72417],{"class":168},[162,76422,72232],{"class":54373},[162,76424,54380],{"class":168},[162,76426,76427,76429,76431],{"class":164,"line":36011},[162,76428,54848],{"class":168},[162,76430,72210],{"class":54373},[162,76432,54380],{"class":168},[162,76434,76435,76437,76439],{"class":164,"line":36022},[162,76436,54414],{"class":168},[162,76438,56957],{"class":54373},[162,76440,54380],{"class":168},[162,76442,76443,76445,76447,76450,76452,76455,76457],{"class":164,"line":36028},[162,76444,58304],{"class":168},[162,76446,162],{"class":54373},[162,76448,76449],{"class":168},">+\u003C\u002F",[162,76451,162],{"class":54373},[162,76453,76454],{"class":168},">添加\u003C\u002F",[162,76456,56957],{"class":54373},[162,76458,54380],{"class":168},[162,76460,76461,76463,76465],{"class":164,"line":36048},[162,76462,55487],{"class":168},[162,76464,69692],{"class":54373},[162,76466,54380],{"class":168},[162,76468,76469,76471,76473,76475,76477,76479,76482,76484,76487,76489,76492,76494],{"class":164,"line":36064},[162,76470,55215],{"class":168},[162,76472,54683],{"class":54373},[162,76474,56556],{"class":5082},[162,76476,173],{"class":168},[162,76478,65648],{"class":179},[162,76480,76481],{"class":168},">共有数据 \u003C",[162,76483,162],{"class":54373},[162,76485,76486],{"class":168},">0\u003C\u002F",[162,76488,162],{"class":54373},[162,76490,76491],{"class":168},"> 条\u003C\u002F",[162,76493,54683],{"class":54373},[162,76495,54380],{"class":168},[162,76497,76498,76500,76502],{"class":164,"line":36070},[162,76499,55215],{"class":168},[162,76501,26],{"class":54373},[162,76503,54380],{"class":168},[162,76505,76506,76508,76510],{"class":164,"line":36084},[162,76507,54414],{"class":168},[162,76509,29],{"class":54373},[162,76511,54380],{"class":168},[162,76513,76514,76516,76518],{"class":164,"line":36090},[162,76515,58304],{"class":168},[162,76517,32],{"class":54373},[162,76519,54380],{"class":168},[162,76521,76522,76524,76526,76529,76531],{"class":164,"line":36096},[162,76523,58372],{"class":168},[162,76525,35],{"class":54373},[162,76527,76528],{"class":168},">ID\u003C\u002F",[162,76530,35],{"class":54373},[162,76532,54380],{"class":168},[162,76534,76535,76537,76539,76541,76543],{"class":164,"line":36107},[162,76536,58372],{"class":168},[162,76538,35],{"class":54373},[162,76540,72520],{"class":168},[162,76542,35],{"class":54373},[162,76544,54380],{"class":168},[162,76546,76547,76549,76551,76553,76555],{"class":164,"line":36113},[162,76548,58372],{"class":168},[162,76550,35],{"class":54373},[162,76552,72533],{"class":168},[162,76554,35],{"class":54373},[162,76556,54380],{"class":168},[162,76558,76559,76561,76563,76565,76567],{"class":164,"line":36119},[162,76560,58372],{"class":168},[162,76562,35],{"class":54373},[162,76564,72546],{"class":168},[162,76566,35],{"class":54373},[162,76568,54380],{"class":168},[162,76570,76571,76573,76575,76577,76579],{"class":164,"line":36129},[162,76572,58372],{"class":168},[162,76574,35],{"class":54373},[162,76576,72559],{"class":168},[162,76578,35],{"class":54373},[162,76580,54380],{"class":168},[162,76582,76583,76585,76587,76589,76591],{"class":164,"line":36135},[162,76584,58372],{"class":168},[162,76586,35],{"class":54373},[162,76588,72572],{"class":168},[162,76590,35],{"class":54373},[162,76592,54380],{"class":168},[162,76594,76595,76597,76599,76602,76604],{"class":164,"line":36146},[162,76596,58372],{"class":168},[162,76598,35],{"class":54373},[162,76600,76601],{"class":168},">录入时间\u003C\u002F",[162,76603,35],{"class":54373},[162,76605,54380],{"class":168},[162,76607,76608,76610,76612,76614,76616],{"class":164,"line":36152},[162,76609,58372],{"class":168},[162,76611,35],{"class":54373},[162,76613,72585],{"class":168},[162,76615,35],{"class":54373},[162,76617,54380],{"class":168},[162,76619,76620,76622,76624],{"class":164,"line":36162},[162,76621,58477],{"class":168},[162,76623,32],{"class":54373},[162,76625,54380],{"class":168},[162,76627,76628,76630,76632],{"class":164,"line":36167},[162,76629,54848],{"class":168},[162,76631,29],{"class":54373},[162,76633,54380],{"class":168},[162,76635,76636,76638,76640],{"class":164,"line":36173},[162,76637,54414],{"class":168},[162,76639,51],{"class":54373},[162,76641,54380],{"class":168},[162,76643,76644],{"class":164,"line":36222},[162,76645,76646],{"class":361},"      \u003C!-- \u003Ctr>\n",[162,76648,76649],{"class":164,"line":36269},[162,76650,76651],{"class":361},"        \u003Ctd>1\u003C\u002Ftd>\n",[162,76653,76654],{"class":164,"line":36274},[162,76655,76651],{"class":361},[162,76657,76658],{"class":164,"line":36280},[162,76659,76651],{"class":361},[162,76661,76662],{"class":164,"line":36299},[162,76663,76651],{"class":361},[162,76665,76666],{"class":164,"line":36305},[162,76667,76651],{"class":361},[162,76669,76670],{"class":164,"line":36324},[162,76671,76651],{"class":361},[162,76673,76674],{"class":164,"line":36330},[162,76675,76651],{"class":361},[162,76677,76678],{"class":164,"line":36336},[162,76679,76680],{"class":361},"        \u003Ctd>\n",[162,76682,76683],{"class":164,"line":36346},[162,76684,76685],{"class":361},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[162,76687,76688],{"class":164,"line":36351},[162,76689,76690],{"class":361},"        \u003C\u002Ftd>\n",[162,76692,76693],{"class":164,"line":36357},[162,76694,76695],{"class":361},"      \u003C\u002Ftr> -->\n",[162,76697,76698,76700,76702],{"class":164,"line":36373},[162,76699,54848],{"class":168},[162,76701,51],{"class":54373},[162,76703,54380],{"class":168},[162,76705,76706,76708,76710],{"class":164,"line":36418},[162,76707,55487],{"class":168},[162,76709,26],{"class":54373},[162,76711,54380],{"class":168},[162,76713,76714,76716,76718],{"class":164,"line":36424},[162,76715,55215],{"class":168},[162,76717,54885],{"class":54373},[162,76719,54380],{"class":168},[162,76721,76722],{"class":164,"line":36430},[162,76723,76724],{"class":361},"    \u002F\u002F const initData = [{\n",[162,76726,76727],{"class":164,"line":36436},[162,76728,76729],{"class":361},"    \u002F\u002F   unameId: 1,\n",[162,76731,76732],{"class":164,"line":36447},[162,76733,76734],{"class":361},"    \u002F\u002F   uname: '华晨宇',\n",[162,76736,76737],{"class":164,"line":36453},[162,76738,76739],{"class":361},"    \u002F\u002F   age: 22,\n",[162,76741,76742],{"class":164,"line":36459},[162,76743,76744],{"class":361},"    \u002F\u002F   salary: 12000,\n",[162,76746,76747],{"class":164,"line":36465},[162,76748,76749],{"class":361},"    \u002F\u002F   gender: '男',\n",[162,76751,76752],{"class":164,"line":36483},[162,76753,76754],{"class":361},"    \u002F\u002F   city: '北京',\n",[162,76756,76757],{"class":164,"line":36497},[162,76758,76759],{"class":361},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[162,76761,76762],{"class":164,"line":36506},[162,76763,76764],{"class":361},"    \u002F\u002F }]\n",[162,76766,76767],{"class":164,"line":36515},[162,76768,76769],{"class":361},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[162,76771,76772],{"class":164,"line":36524},[162,76773,76774],{"class":361},"    \u002F\u002F 1.渲染业务\n",[162,76776,76777],{"class":164,"line":36533},[162,76778,76779],{"class":361},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[162,76781,76782],{"class":164,"line":36539},[162,76783,76784],{"class":361},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[162,76786,76787],{"class":164,"line":36545},[162,76788,76789],{"class":361},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[162,76791,76792],{"class":164,"line":36553},[162,76793,301],{"emptyLinePlaceholder":300},[162,76795,76796],{"class":164,"line":36558},[162,76797,76798],{"class":361},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[162,76800,76801],{"class":164,"line":36564},[162,76802,76803],{"class":361},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[162,76805,76806,76808,76810,76812],{"class":164,"line":36575},[162,76807,14317],{"class":172},[162,76809,60764],{"class":207},[162,76811,16659],{"class":172},[162,76813,260],{"class":168},[162,76815,76816,76819,76821],{"class":164,"line":36581},[162,76817,76818],{"class":168},"    console.",[162,76820,61316],{"class":5082},[162,76822,55482],{"class":168},[162,76824,76825],{"class":164,"line":36601},[162,76826,301],{"emptyLinePlaceholder":300},[162,76828,76829],{"class":164,"line":36607},[162,76830,76831],{"class":361},"    \u002F\u002F 时间函数\n",[162,76833,76834,76836,76839],{"class":164,"line":36613},[162,76835,73149],{"class":172},[162,76837,76838],{"class":5082}," getTime",[162,76840,13951],{"class":168},[162,76842,76843,76845,76848,76850,76852,76855],{"class":164,"line":36619},[162,76844,61297],{"class":172},[162,76846,76847],{"class":207}," date",[162,76849,16659],{"class":172},[162,76851,14674],{"class":172},[162,76853,76854],{"class":5082}," Date",[162,76856,1526],{"class":168},[162,76858,76859,76861,76863,76865,76868,76871,76873,76875,76877,76880,76883,76885,76887,76889,76891,76893,76895,76897],{"class":164,"line":36636},[162,76860,61297],{"class":172},[162,76862,19182],{"class":207},[162,76864,16659],{"class":172},[162,76866,76867],{"class":168}," date.",[162,76869,76870],{"class":5082},"getHours",[162,76872,16145],{"class":168},[162,76874,4187],{"class":172},[162,76876,5156],{"class":207},[162,76878,76879],{"class":172}," ?",[162,76881,76882],{"class":179}," '0'",[162,76884,1239],{"class":172},[162,76886,76867],{"class":168},[162,76888,76870],{"class":5082},[162,76890,16145],{"class":168},[162,76892,1332],{"class":172},[162,76894,76867],{"class":168},[162,76896,76870],{"class":5082},[162,76898,1526],{"class":168},[162,76900,76901,76903,76906,76908,76910,76913,76915,76917,76919,76921,76923,76925,76927,76929,76931,76933,76935,76937],{"class":164,"line":36642},[162,76902,61297],{"class":172},[162,76904,76905],{"class":207}," m",[162,76907,16659],{"class":172},[162,76909,76867],{"class":168},[162,76911,76912],{"class":5082},"getMinutes",[162,76914,16145],{"class":168},[162,76916,4187],{"class":172},[162,76918,5156],{"class":207},[162,76920,76879],{"class":172},[162,76922,76882],{"class":179},[162,76924,1239],{"class":172},[162,76926,76867],{"class":168},[162,76928,76912],{"class":5082},[162,76930,16145],{"class":168},[162,76932,1332],{"class":172},[162,76934,76867],{"class":168},[162,76936,76912],{"class":5082},[162,76938,1526],{"class":168},[162,76940,76941,76943,76945,76947,76949,76952,76954,76956,76958,76960,76962,76964,76966,76968,76970,76972,76974,76976],{"class":164,"line":36648},[162,76942,61297],{"class":172},[162,76944,11532],{"class":207},[162,76946,16659],{"class":172},[162,76948,76867],{"class":168},[162,76950,76951],{"class":5082},"getSeconds",[162,76953,16145],{"class":168},[162,76955,4187],{"class":172},[162,76957,5156],{"class":207},[162,76959,76879],{"class":172},[162,76961,76882],{"class":179},[162,76963,1239],{"class":172},[162,76965,76867],{"class":168},[162,76967,76951],{"class":5082},[162,76969,16145],{"class":168},[162,76971,1332],{"class":172},[162,76973,76867],{"class":168},[162,76975,76951],{"class":5082},[162,76977,1526],{"class":168},[162,76979,76980,76982,76985,76987,76989,76992,76994,76997,76999,77002,77004,77006,77009,77011,77013,77015,77017,77019,77021,77024,77026,77029,77031,77034,77036,77038,77040],{"class":164,"line":36654},[162,76981,61297],{"class":172},[162,76983,76984],{"class":207}," str",[162,76986,16659],{"class":172},[162,76988,65970],{"class":179},[162,76990,76991],{"class":168},"date",[162,76993,3847],{"class":179},[162,76995,76996],{"class":5082},"getFullYear",[162,76998,5544],{"class":179},[162,77000,77001],{"class":179},"}\u002F${",[162,77003,76991],{"class":168},[162,77005,3847],{"class":179},[162,77007,77008],{"class":5082},"getMonth",[162,77010,16145],{"class":179},[162,77012,3771],{"class":172},[162,77014,28210],{"class":207},[162,77016,77001],{"class":179},[162,77018,76991],{"class":168},[162,77020,3847],{"class":179},[162,77022,77023],{"class":5082},"getDate",[162,77025,5544],{"class":179},[162,77027,77028],{"class":179},"} ${",[162,77030,3706],{"class":168},[162,77032,77033],{"class":179},"}:${",[162,77035,3833],{"class":168},[162,77037,77033],{"class":179},[162,77039,3979],{"class":168},[162,77041,77042],{"class":179},"}`\n",[162,77044,77045,77048],{"class":164,"line":36660},[162,77046,77047],{"class":172},"      return",[162,77049,77050],{"class":168}," str\n",[162,77052,77053],{"class":164,"line":36666},[162,77054,5305],{"class":168},[162,77056,77057],{"class":164,"line":36693},[162,77058,77059],{"class":361},"    \u002F\u002F 渲染函数\n",[162,77061,77062,77064,77066,77068,77070,77072,77074,77076],{"class":164,"line":36717},[162,77063,14317],{"class":172},[162,77065,72812],{"class":207},[162,77067,16659],{"class":172},[162,77069,57466],{"class":168},[162,77071,57469],{"class":5082},[162,77073,604],{"class":168},[162,77075,72823],{"class":179},[162,77077,434],{"class":168},[162,77079,77080,77082,77084],{"class":164,"line":36723},[162,77081,73149],{"class":172},[162,77083,73152],{"class":5082},[162,77085,13951],{"class":168},[162,77087,77088],{"class":164,"line":36729},[162,77089,77090],{"class":361},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[162,77092,77093],{"class":164,"line":36735},[162,77094,77095],{"class":361},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[162,77097,77098,77100,77103,77105,77107,77110,77112,77114,77116,77119,77121,77124],{"class":164,"line":36746},[162,77099,61297],{"class":172},[162,77101,77102],{"class":207}," trArr",[162,77104,16659],{"class":172},[162,77106,55036],{"class":168},[162,77108,77109],{"class":5082},"map",[162,77111,604],{"class":168},[162,77113,57519],{"class":172},[162,77115,1003],{"class":168},[162,77117,77118],{"class":671},"ele",[162,77120,183],{"class":168},[162,77122,77123],{"class":671},"index",[162,77125,15537],{"class":168},[162,77127,77128,77130],{"class":164,"line":36757},[162,77129,17846],{"class":172},[162,77131,73233],{"class":179},[162,77133,77134],{"class":164,"line":36763},[162,77135,77136],{"class":179},"      \u003Ctr>\n",[162,77138,77139,77141,77143,77145,77148],{"class":164,"line":36780},[162,77140,73238],{"class":179},[162,77142,77118],{"class":168},[162,77144,3847],{"class":179},[162,77146,77147],{"class":168},"unameId",[162,77149,73253],{"class":179},[162,77151,77152,77154,77156,77158,77160],{"class":164,"line":36803},[162,77153,73238],{"class":179},[162,77155,77118],{"class":168},[162,77157,3847],{"class":179},[162,77159,73269],{"class":168},[162,77161,73253],{"class":179},[162,77163,77164,77166,77168,77170,77172],{"class":164,"line":36826},[162,77165,73238],{"class":179},[162,77167,77118],{"class":168},[162,77169,3847],{"class":179},[162,77171,73286],{"class":168},[162,77173,73253],{"class":179},[162,77175,77176,77178,77180,77182,77184],{"class":164,"line":36832},[162,77177,73238],{"class":179},[162,77179,77118],{"class":168},[162,77181,3847],{"class":179},[162,77183,73303],{"class":168},[162,77185,73253],{"class":179},[162,77187,77188,77190,77192,77194,77196],{"class":164,"line":36837},[162,77189,73238],{"class":179},[162,77191,77118],{"class":168},[162,77193,3847],{"class":179},[162,77195,73320],{"class":168},[162,77197,73253],{"class":179},[162,77199,77200,77202,77204,77206,77208],{"class":164,"line":36846},[162,77201,73238],{"class":179},[162,77203,77118],{"class":168},[162,77205,3847],{"class":179},[162,77207,73337],{"class":168},[162,77209,73253],{"class":179},[162,77211,77212,77214,77216,77218,77220],{"class":164,"line":36856},[162,77213,73238],{"class":179},[162,77215,77118],{"class":168},[162,77217,3847],{"class":179},[162,77219,5505],{"class":168},[162,77221,73253],{"class":179},[162,77223,77224],{"class":164,"line":36862},[162,77225,76680],{"class":179},[162,77227,77228,77231,77233],{"class":164,"line":36867},[162,77229,77230],{"class":179},"          \u003Ca href=\"#\" data-id=\"${",[162,77232,77123],{"class":168},[162,77234,77235],{"class":179},"}\">删除\u003C\u002Fa>\n",[162,77237,77238],{"class":164,"line":36873},[162,77239,76690],{"class":179},[162,77241,77242],{"class":164,"line":36886},[162,77243,77244],{"class":179},"      \u003C\u002Ftr>\n",[162,77246,77247],{"class":164,"line":36892},[162,77248,77249],{"class":179},"  `\n",[162,77251,77252],{"class":164,"line":36903},[162,77253,67882],{"class":168},[162,77255,77256,77258,77260],{"class":164,"line":36914},[162,77257,61313],{"class":168},[162,77259,61316],{"class":5082},[162,77261,77262],{"class":168},"(trArr)\n",[162,77264,77265],{"class":164,"line":36933},[162,77266,301],{"emptyLinePlaceholder":300},[162,77268,77269],{"class":164,"line":52591},[162,77270,77271],{"class":361},"      \u002F\u002F (2) 把数组转换为字符串join\n",[162,77273,77274],{"class":164,"line":52596},[162,77275,77276],{"class":361},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[162,77278,77279,77281,77283,77286,77289,77291,77294],{"class":164,"line":52605},[162,77280,73164],{"class":168},[162,77282,173],{"class":172},[162,77284,77285],{"class":168}," trArr.",[162,77287,77288],{"class":5082},"join",[162,77290,604],{"class":168},[162,77292,77293],{"class":179},"''",[162,77295,434],{"class":168},[162,77297,77298],{"class":164,"line":52614},[162,77299,77300],{"class":361},"      \u002F\u002F 显示共有几条\n",[162,77302,77303,77305,77307,77309,77312,77315,77317,77319],{"class":164,"line":52619},[162,77304,58840],{"class":168},[162,77306,57469],{"class":5082},[162,77308,604],{"class":168},[162,77310,77311],{"class":179},"'.total span'",[162,77313,77314],{"class":168},").innerHTML ",[162,77316,173],{"class":172},[162,77318,55036],{"class":168},[162,77320,58900],{"class":207},[162,77322,77323],{"class":164,"line":52624},[162,77324,5305],{"class":168},[162,77326,77327],{"class":164,"line":52629},[162,77328,77329],{"class":361},"    \u002F\u002F render()\n",[162,77331,77332],{"class":164,"line":52642},[162,77333,301],{"emptyLinePlaceholder":300},[162,77335,77336],{"class":164,"line":52647},[162,77337,77338],{"class":361},"    \u002F\u002F 获取DOM对象\n",[162,77340,77341,77343,77345,77347,77349,77351,77353,77355],{"class":164,"line":52656},[162,77342,14317],{"class":172},[162,77344,72886],{"class":207},[162,77346,16659],{"class":172},[162,77348,57466],{"class":168},[162,77350,57469],{"class":5082},[162,77352,604],{"class":168},[162,77354,72897],{"class":179},[162,77356,434],{"class":168},[162,77358,77359,77361,77363,77365,77367,77369,77371,77373],{"class":164,"line":52665},[162,77360,14317],{"class":172},[162,77362,72713],{"class":207},[162,77364,16659],{"class":172},[162,77366,57466],{"class":168},[162,77368,57469],{"class":5082},[162,77370,604],{"class":168},[162,77372,72724],{"class":179},[162,77374,434],{"class":168},[162,77376,77377,77379,77381,77383,77385,77387,77389,77391],{"class":164,"line":52682},[162,77378,14317],{"class":172},[162,77380,18780],{"class":207},[162,77382,16659],{"class":172},[162,77384,57466],{"class":168},[162,77386,57469],{"class":5082},[162,77388,604],{"class":168},[162,77390,72743],{"class":179},[162,77392,434],{"class":168},[162,77394,77396,77398,77400,77402,77404,77406,77408,77410],{"class":164,"line":77395},231,[162,77397,14317],{"class":172},[162,77399,72772],{"class":207},[162,77401,16659],{"class":172},[162,77403,57466],{"class":168},[162,77405,57469],{"class":5082},[162,77407,604],{"class":168},[162,77409,72783],{"class":179},[162,77411,434],{"class":168},[162,77413,77415,77417,77419,77421,77423,77425,77427,77429],{"class":164,"line":77414},232,[162,77416,14317],{"class":172},[162,77418,72752],{"class":207},[162,77420,16659],{"class":172},[162,77422,57466],{"class":168},[162,77424,57469],{"class":5082},[162,77426,604],{"class":168},[162,77428,72763],{"class":179},[162,77430,434],{"class":168},[162,77432,77434,77436,77438,77440,77442,77444,77446,77448],{"class":164,"line":77433},233,[162,77435,14317],{"class":172},[162,77437,72792],{"class":207},[162,77439,16659],{"class":172},[162,77441,57466],{"class":168},[162,77443,57469],{"class":5082},[162,77445,604],{"class":168},[162,77447,72803],{"class":179},[162,77449,434],{"class":168},[162,77451,77453],{"class":164,"line":77452},234,[162,77454,301],{"emptyLinePlaceholder":300},[162,77456,77458],{"class":164,"line":77457},235,[162,77459,77460],{"class":361},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[162,77462,77464,77466,77468,77470,77472,77474,77476,77478,77480],{"class":164,"line":77463},236,[162,77465,72904],{"class":168},[162,77467,60882],{"class":5082},[162,77469,604],{"class":168},[162,77471,72911],{"class":179},[162,77473,183],{"class":168},[162,77475,57519],{"class":172},[162,77477,1003],{"class":168},[162,77479,3384],{"class":671},[162,77481,15537],{"class":168},[162,77483,77485],{"class":164,"line":77484},237,[162,77486,77487],{"class":361},"      \u002F\u002F 禁止浏览器跳转\n",[162,77489,77491,77493,77495],{"class":164,"line":77490},238,[162,77492,72931],{"class":168},[162,77494,72934],{"class":5082},[162,77496,1526],{"class":168},[162,77498,77500],{"class":164,"line":77499},239,[162,77501,77502],{"class":361},"      \u002F\u002F 非空判断\n",[162,77504,77506],{"class":164,"line":77505},240,[162,77507,77508],{"class":361},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[162,77510,77512],{"class":164,"line":77511},241,[162,77513,77514],{"class":361},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[162,77516,77518,77520,77522,77524,77527,77529,77532,77535,77537,77539],{"class":164,"line":77517},242,[162,77519,57550],{"class":172},[162,77521,1003],{"class":168},[162,77523,3526],{"class":172},[162,77525,77526],{"class":168},"uname.value ",[162,77528,74422],{"class":172},[162,77530,77531],{"class":172}," !",[162,77533,77534],{"class":168},"age.value ",[162,77536,74422],{"class":172},[162,77538,77531],{"class":172},[162,77540,77541],{"class":168},"salary.value) {\n",[162,77543,77545,77547,77549,77551,77553],{"class":164,"line":77544},243,[162,77546,17846],{"class":172},[162,77548,73005],{"class":5082},[162,77550,604],{"class":168},[162,77552,73010],{"class":179},[162,77554,434],{"class":168},[162,77556,77558],{"class":164,"line":77557},244,[162,77559,55468],{"class":168},[162,77561,77563,77565,77567],{"class":164,"line":77562},245,[162,77564,61076],{"class":168},[162,77566,54955],{"class":5082},[162,77568,77569],{"class":168},"({\n",[162,77571,77573],{"class":164,"line":77572},246,[162,77574,77575],{"class":361},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[162,77577,77579],{"class":164,"line":77578},247,[162,77580,77581],{"class":361},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[162,77583,77585],{"class":164,"line":77584},248,[162,77586,77587],{"class":361},"        \u002F\u002F 对象的序号应为数组长度+1\n",[162,77589,77591],{"class":164,"line":77590},249,[162,77592,77593],{"class":361},"        \u002F\u002F unameId: arr.length + 1,\n",[162,77595,77597],{"class":164,"line":77596},250,[162,77598,301],{"emptyLinePlaceholder":300},[162,77600,77602],{"class":164,"line":77601},251,[162,77603,77604],{"class":361},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[162,77606,77608],{"class":164,"line":77607},252,[162,77609,77610],{"class":361},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[162,77612,77614],{"class":164,"line":77613},253,[162,77615,77616],{"class":361},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[162,77618,77620],{"class":164,"line":77619},254,[162,77621,77622],{"class":361},"        \u002F\u002F 0当假看\n",[162,77624,77626,77629,77631,77633,77636,77638,77640,77642,77645,77647,77649,77652,77654],{"class":164,"line":77625},255,[162,77627,77628],{"class":168},"        unameId: arr.",[162,77630,55039],{"class":207},[162,77632,76879],{"class":172},[162,77634,77635],{"class":168}," arr[arr.",[162,77637,55039],{"class":207},[162,77639,55341],{"class":172},[162,77641,28210],{"class":207},[162,77643,77644],{"class":168},"].unameId ",[162,77646,3771],{"class":172},[162,77648,28210],{"class":207},[162,77650,77651],{"class":172}," :",[162,77653,28210],{"class":207},[162,77655,1735],{"class":168},[162,77657,77659],{"class":164,"line":77658},256,[162,77660,73058],{"class":168},[162,77662,77664],{"class":164,"line":77663},257,[162,77665,73063],{"class":168},[162,77667,77669],{"class":164,"line":77668},258,[162,77670,73073],{"class":168},[162,77672,77674],{"class":164,"line":77673},259,[162,77675,73068],{"class":168},[162,77677,77679],{"class":164,"line":77678},260,[162,77680,77681],{"class":168},"        city: city.value,\n",[162,77683,77685],{"class":164,"line":77684},261,[162,77686,77687],{"class":361},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[162,77689,77691],{"class":164,"line":77690},262,[162,77692,77693],{"class":361},"        \u002F\u002F time: new Date().toDateString()\n",[162,77695,77697,77700,77703],{"class":164,"line":77696},263,[162,77698,77699],{"class":168},"        time: ",[162,77701,77702],{"class":5082},"getTime",[162,77704,1526],{"class":168},[162,77706,77708],{"class":164,"line":77707},264,[162,77709,67882],{"class":168},[162,77711,77713],{"class":164,"line":77712},265,[162,77714,77715],{"class":361},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[162,77717,77719,77721],{"class":164,"line":77718},266,[162,77720,73133],{"class":5082},[162,77722,1526],{"class":168},[162,77724,77726,77728,77730,77732,77734],{"class":164,"line":77725},267,[162,77727,73116],{"class":207},[162,77729,3847],{"class":168},[162,77731,73121],{"class":5082},[162,77733,16145],{"class":168},[162,77735,77736],{"class":361},"\u002F\u002F重置表单\n",[162,77738,77740],{"class":164,"line":77739},268,[162,77741,77742],{"class":361},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[162,77744,77746,77749,77751,77753,77756,77758,77760,77762,77764],{"class":164,"line":77745},269,[162,77747,77748],{"class":168},"      localStorage.",[162,77750,74719],{"class":5082},[162,77752,604],{"class":168},[162,77754,77755],{"class":179},"'data'",[162,77757,183],{"class":168},[162,77759,74729],{"class":207},[162,77761,3847],{"class":168},[162,77763,74734],{"class":5082},[162,77765,77766],{"class":168},"(arr))\n",[162,77768,77770],{"class":164,"line":77769},270,[162,77771,36536],{"class":168},[162,77773,77775],{"class":164,"line":77774},271,[162,77776,301],{"emptyLinePlaceholder":300},[162,77778,77780],{"class":164,"line":77779},272,[162,77781,77782],{"class":361},"    \u002F\u002F 3.删除业务\n",[162,77784,77786],{"class":164,"line":77785},273,[162,77787,77788],{"class":361},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[162,77790,77792,77794,77796,77798,77800,77802,77804,77806,77808],{"class":164,"line":77791},274,[162,77793,73406],{"class":168},[162,77795,60882],{"class":5082},[162,77797,604],{"class":168},[162,77799,60887],{"class":179},[162,77801,183],{"class":168},[162,77803,57519],{"class":172},[162,77805,1003],{"class":168},[162,77807,3384],{"class":671},[162,77809,15537],{"class":168},[162,77811,77813],{"class":164,"line":77812},275,[162,77814,77815],{"class":361},"      \u002F\u002F 判断是否点击的是删除按钮\n",[162,77817,77819,77821,77823,77825,77827],{"class":164,"line":77818},276,[162,77820,57550],{"class":172},[162,77822,70101],{"class":168},[162,77824,57556],{"class":172},[162,77826,71323],{"class":179},[162,77828,15537],{"class":168},[162,77830,77832],{"class":164,"line":77831},277,[162,77833,77834],{"class":361},"        \u002F\u002F alert(1)\n",[162,77836,77838],{"class":164,"line":77837},278,[162,77839,77840],{"class":361},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[162,77842,77844],{"class":164,"line":77843},279,[162,77845,77846],{"class":361},"        \u002F\u002F console.log(e.target)\n",[162,77848,77850],{"class":164,"line":77849},280,[162,77851,77852],{"class":361},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[162,77854,77856],{"class":164,"line":77855},281,[162,77857,301],{"emptyLinePlaceholder":300},[162,77859,77861],{"class":164,"line":77860},282,[162,77862,77863],{"class":361},"        \u002F\u002F 确认框，确然是否真的要删除\n",[162,77865,77867],{"class":164,"line":77866},283,[162,77868,77869],{"class":361},"        \u002F\u002F confirm()为确认框\n",[162,77871,77873],{"class":164,"line":77872},284,[162,77874,77875],{"class":361},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[162,77877,77879,77881,77883,77886,77888,77891],{"class":164,"line":77878},285,[162,77880,5614],{"class":172},[162,77882,1003],{"class":168},[162,77884,77885],{"class":5082},"confirm",[162,77887,604],{"class":168},[162,77889,77890],{"class":179},"'您确定要删除这条数据吗？'",[162,77892,77893],{"class":168},")) {\n",[162,77895,77897,77900,77902,77904,77906],{"class":164,"line":77896},286,[162,77898,77899],{"class":168},"          arr.",[162,77901,61079],{"class":5082},[162,77903,73459],{"class":168},[162,77905,208],{"class":207},[162,77907,434],{"class":168},[162,77909,77911],{"class":164,"line":77910},287,[162,77912,77913],{"class":361},"          \u002F\u002F 3.4 重新渲染页面\n",[162,77915,77917,77920],{"class":164,"line":77916},288,[162,77918,77919],{"class":5082},"          render",[162,77921,1526],{"class":168},[162,77923,77925],{"class":164,"line":77924},289,[162,77926,77927],{"class":361},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[162,77929,77931,77934,77936,77938,77940,77942,77944,77946,77948],{"class":164,"line":77930},290,[162,77932,77933],{"class":168},"          localStorage.",[162,77935,74719],{"class":5082},[162,77937,604],{"class":168},[162,77939,77755],{"class":179},[162,77941,183],{"class":168},[162,77943,74729],{"class":207},[162,77945,3847],{"class":168},[162,77947,74734],{"class":5082},[162,77949,77766],{"class":168},[162,77951,77953],{"class":164,"line":77952},291,[162,77954,5646],{"class":168},[162,77956,77958],{"class":164,"line":77957},292,[162,77959,55468],{"class":168},[162,77961,77963],{"class":164,"line":77962},293,[162,77964,301],{"emptyLinePlaceholder":300},[162,77966,77968],{"class":164,"line":77967},294,[162,77969,36536],{"class":168},[162,77971,77973],{"class":164,"line":77972},295,[162,77974,301],{"emptyLinePlaceholder":300},[162,77976,77978,77980,77982],{"class":164,"line":77977},296,[162,77979,55487],{"class":168},[162,77981,54885],{"class":54373},[162,77983,54380],{"class":168},[162,77985,77987,77989,77991],{"class":164,"line":77986},297,[162,77988,54857],{"class":168},[162,77990,54872],{"class":54373},[162,77992,54380],{"class":168},[162,77994,77996],{"class":164,"line":77995},298,[162,77997,301],{"emptyLinePlaceholder":300},[162,77999,78001,78003,78005],{"class":164,"line":78000},299,[162,78002,54857],{"class":168},[162,78004,53708],{"class":54373},[162,78006,54380],{"class":168},[14,78008,78010],{"id":78009},"_36-正则表达式","3.6 正则表达式",[19,78012,78013],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,78015,78016],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,78018,78019],{},"正则表达式的作用：",[4279,78021,78022,78029,78035],{},[1455,78023,78024,78025,78028],{},"表单验证（ ",[3453,78026,78027],{},"匹配"," ）",[1455,78030,78031,78032,78028],{},"过滤敏感词（ ",[3453,78033,78034],{},"替换",[1455,78036,78037,78038,78028],{},"字符串中提取我们想要的部分（ ",[3453,78039,78040],{},"提取",[3284,78042,78044],{"id":78043},"_361-语法","3.6.1 语法",[19,78046,78047],{},"正则表达式使用步骤：",[1452,78049,78050,78053],{},[1455,78051,78052],{},"定义规则",[1455,78054,78055],{},"查找是否匹配",[19,78057,78058],{},"正则表达式里边不需要写引号",[19,78060,78061],{},[4602,78062],{"alt":158,"src":78063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,78065,78066],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,78068,78069],{},"reg.test(str)",[19,78071,78072],{},[4602,78073],{"alt":158,"src":78074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,78076,78077],{},[4602,78078],{"alt":158,"src":78079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[3284,78081,78083],{"id":78082},"_362-元字符","3.6.2 元字符",[1452,78085,78086,78089,78092,78095,78102],{},[1455,78087,78088],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[1455,78090,78091],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[1455,78093,78094],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[1455,78096,78097,78098],{},"正则验证工具：",[3538,78099,78100],{"href":78100,"rel":78101},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[26956],[1455,78103,78104],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[25089,78106,78108],{"id":78107},"_3621-边界符","3.6.2.1 边界符",[19,78110,78111],{},[4602,78112],{"alt":158,"src":78113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,78115,78116],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,78118,78119],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,78121,78122],{},"只匹配一次",[19,78124,78125],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[25089,78127,78129],{"id":78128},"_3622-量词","3.6.2.2 量词",[19,78131,78132],{},[4602,78133],{"alt":158,"src":78134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,78136,78137],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[25089,78139,78141],{"id":78140},"_3623-元字符","3.6.2.3 元字符",[19,78143,78144],{},[4602,78145],{"alt":158,"src":78146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,78148,78149],{},"匹配的是a或b或c []只选一个",[19,78151,78152],{},[4602,78153],{"alt":158,"src":78154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,78156,78157],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,78159,78160],{},[4602,78161],{"alt":158,"src":78162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,78164,78165],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,78167,78168],{},[4602,78169],{"alt":158,"src":78170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[153,78172,78174],{"className":53706,"code":78173,"language":53708,"meta":158,"style":158},"\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",[71,78175,78176,78186,78200,78204,78212,78226,78246,78258,78266,78270,78278,78286,78291,78322,78349,78377,78381,78386,78414,78445,78450,78455,78486,78518,78550,78554,78559,78590,78620,78650,78654,78659,78690,78721,78751,78781,78785,78790,78823,78827,78832,78863,78894,78898,78903,78934,78964,78995,78999,79004,79036,79067,79098,79125,79156,79188,79221,79252,79283,79315,79346,79354,79362,79366],{"__ignoreMap":158},[162,78177,78178,78180,78182,78184],{"class":164,"line":165},[162,78179,54370],{"class":168},[162,78181,54374],{"class":54373},[162,78183,54377],{"class":5082},[162,78185,54380],{"class":168},[162,78187,78188,78190,78192,78194,78196,78198],{"class":164,"line":197},[162,78189,4187],{"class":168},[162,78191,53708],{"class":54373},[162,78193,54389],{"class":5082},[162,78195,173],{"class":168},[162,78197,54394],{"class":179},[162,78199,54380],{"class":168},[162,78201,78202],{"class":164,"line":228},[162,78203,301],{"emptyLinePlaceholder":300},[162,78205,78206,78208,78210],{"class":164,"line":252},[162,78207,4187],{"class":168},[162,78209,54407],{"class":54373},[162,78211,54380],{"class":168},[162,78213,78214,78216,78218,78220,78222,78224],{"class":164,"line":328},[162,78215,55215],{"class":168},[162,78217,54417],{"class":54373},[162,78219,54420],{"class":5082},[162,78221,173],{"class":168},[162,78223,54425],{"class":179},[162,78225,54380],{"class":168},[162,78227,78228,78230,78232,78234,78236,78238,78240,78242,78244],{"class":164,"line":466},[162,78229,55215],{"class":168},[162,78231,54417],{"class":54373},[162,78233,18013],{"class":5082},[162,78235,173],{"class":168},[162,78237,54464],{"class":179},[162,78239,54444],{"class":5082},[162,78241,173],{"class":168},[162,78243,54471],{"class":179},[162,78245,54380],{"class":168},[162,78247,78248,78250,78252,78254,78256],{"class":164,"line":471},[162,78249,55215],{"class":168},[162,78251,54480],{"class":54373},[162,78253,54483],{"class":168},[162,78255,54480],{"class":54373},[162,78257,54380],{"class":168},[162,78259,78260,78262,78264],{"class":164,"line":687},[162,78261,54857],{"class":168},[162,78263,54407],{"class":54373},[162,78265,54380],{"class":168},[162,78267,78268],{"class":164,"line":692},[162,78269,301],{"emptyLinePlaceholder":300},[162,78271,78272,78274,78276],{"class":164,"line":698},[162,78273,4187],{"class":168},[162,78275,54872],{"class":54373},[162,78277,54380],{"class":168},[162,78279,78280,78282,78284],{"class":164,"line":2955},[162,78281,55215],{"class":168},[162,78283,54885],{"class":54373},[162,78285,54380],{"class":168},[162,78287,78288],{"class":164,"line":2960},[162,78289,78290],{"class":361},"    \u002F\u002F 元字符中\n",[162,78292,78293,78295,78297,78299,78301,78304,78306,78308,78311,78313,78316,78319],{"class":164,"line":2971},[162,78294,76818],{"class":168},[162,78296,61316],{"class":5082},[162,78298,604],{"class":168},[162,78300,946],{"class":179},[162,78302,78303],{"class":51050},"哈",[162,78305,946],{"class":179},[162,78307,3847],{"class":168},[162,78309,78310],{"class":5082},"test",[162,78312,604],{"class":168},[162,78314,78315],{"class":179},"'哈'",[162,78317,78318],{"class":168},"))  ",[162,78320,78321],{"class":361},"\u002F\u002Ftrue\n",[162,78323,78324,78326,78328,78330,78332,78334,78336,78338,78340,78342,78345,78347],{"class":164,"line":2984},[162,78325,76818],{"class":168},[162,78327,61316],{"class":5082},[162,78329,604],{"class":168},[162,78331,946],{"class":179},[162,78333,78303],{"class":51050},[162,78335,946],{"class":179},[162,78337,3847],{"class":168},[162,78339,78310],{"class":5082},[162,78341,604],{"class":168},[162,78343,78344],{"class":179},"'哈哈'",[162,78346,78318],{"class":168},[162,78348,78321],{"class":361},[162,78350,78351,78353,78355,78357,78359,78361,78363,78365,78367,78369,78372,78375],{"class":164,"line":2989},[162,78352,76818],{"class":168},[162,78354,61316],{"class":5082},[162,78356,604],{"class":168},[162,78358,946],{"class":179},[162,78360,78303],{"class":51050},[162,78362,946],{"class":179},[162,78364,3847],{"class":168},[162,78366,78310],{"class":5082},[162,78368,604],{"class":168},[162,78370,78371],{"class":179},"'二哈'",[162,78373,78374],{"class":168},"))   ",[162,78376,78321],{"class":361},[162,78378,78379],{"class":164,"line":3011},[162,78380,301],{"emptyLinePlaceholder":300},[162,78382,78383],{"class":164,"line":3022},[162,78384,78385],{"class":361},"    \u002F\u002F 1.边界符\n",[162,78387,78388,78390,78392,78394,78396,78398,78400,78402,78404,78406,78408,78410,78412],{"class":164,"line":3027},[162,78389,76818],{"class":168},[162,78391,61316],{"class":5082},[162,78393,604],{"class":168},[162,78395,946],{"class":179},[162,78397,4239],{"class":172},[162,78399,78303],{"class":51050},[162,78401,946],{"class":179},[162,78403,3847],{"class":168},[162,78405,78310],{"class":5082},[162,78407,604],{"class":168},[162,78409,78315],{"class":179},[162,78411,78318],{"class":168},[162,78413,78321],{"class":361},[162,78415,78416,78418,78420,78422,78424,78426,78428,78430,78432,78434,78436,78438,78440,78442],{"class":164,"line":3046},[162,78417,76818],{"class":168},[162,78419,61316],{"class":5082},[162,78421,604],{"class":168},[162,78423,946],{"class":179},[162,78425,4239],{"class":172},[162,78427,78303],{"class":51050},[162,78429,3599],{"class":172},[162,78431,946],{"class":179},[162,78433,3847],{"class":168},[162,78435,78310],{"class":5082},[162,78437,604],{"class":168},[162,78439,78344],{"class":179},[162,78441,78318],{"class":168},[162,78443,78444],{"class":361},"\u002F\u002Ffalse\n",[162,78446,78447],{"class":164,"line":3052},[162,78448,78449],{"class":361},"    \u002F\u002F 2.量词\n",[162,78451,78452],{"class":164,"line":3057},[162,78453,78454],{"class":361},"    \u002F\u002F 量词 * 类似于 >= 0\n",[162,78456,78457,78459,78461,78463,78465,78467,78469,78472,78474,78476,78478,78480,78482,78484],{"class":164,"line":3072},[162,78458,76818],{"class":168},[162,78460,61316],{"class":5082},[162,78462,604],{"class":168},[162,78464,946],{"class":179},[162,78466,4239],{"class":172},[162,78468,78303],{"class":51050},[162,78470,78471],{"class":172},"*$",[162,78473,946],{"class":179},[162,78475,3847],{"class":168},[162,78477,78310],{"class":5082},[162,78479,604],{"class":168},[162,78481,78344],{"class":179},[162,78483,78318],{"class":168},[162,78485,78321],{"class":361},[162,78487,78488,78490,78492,78494,78496,78498,78500,78502,78504,78506,78508,78510,78513,78515],{"class":164,"line":3077},[162,78489,76818],{"class":168},[162,78491,61316],{"class":5082},[162,78493,604],{"class":168},[162,78495,946],{"class":179},[162,78497,4239],{"class":172},[162,78499,78303],{"class":51050},[162,78501,78471],{"class":172},[162,78503,946],{"class":179},[162,78505,3847],{"class":168},[162,78507,78310],{"class":5082},[162,78509,604],{"class":168},[162,78511,78512],{"class":179},"'二哈好傻'",[162,78514,78318],{"class":168},[162,78516,78517],{"class":361},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[162,78519,78520,78522,78524,78526,78528,78530,78532,78534,78536,78538,78540,78542,78545,78547],{"class":164,"line":3100},[162,78521,76818],{"class":168},[162,78523,61316],{"class":5082},[162,78525,604],{"class":168},[162,78527,946],{"class":179},[162,78529,4239],{"class":172},[162,78531,78303],{"class":51050},[162,78533,78471],{"class":172},[162,78535,946],{"class":179},[162,78537,3847],{"class":168},[162,78539,78310],{"class":5082},[162,78541,604],{"class":168},[162,78543,78544],{"class":179},"'哈好哈'",[162,78546,78374],{"class":168},[162,78548,78549],{"class":361},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[162,78551,78552],{"class":164,"line":3140},[162,78553,301],{"emptyLinePlaceholder":300},[162,78555,78556],{"class":164,"line":4878},[162,78557,78558],{"class":361},"    \u002F\u002F +类似于>=1\n",[162,78560,78561,78563,78565,78567,78569,78571,78573,78576,78578,78580,78582,78584,78586,78588],{"class":164,"line":4883},[162,78562,76818],{"class":168},[162,78564,61316],{"class":5082},[162,78566,604],{"class":168},[162,78568,946],{"class":179},[162,78570,4239],{"class":172},[162,78572,78303],{"class":51050},[162,78574,78575],{"class":172},"+$",[162,78577,946],{"class":179},[162,78579,3847],{"class":168},[162,78581,78310],{"class":5082},[162,78583,604],{"class":168},[162,78585,78344],{"class":179},[162,78587,78318],{"class":168},[162,78589,78321],{"class":361},[162,78591,78592,78594,78596,78598,78600,78602,78604,78606,78608,78610,78612,78614,78616,78618],{"class":164,"line":4897},[162,78593,76818],{"class":168},[162,78595,61316],{"class":5082},[162,78597,604],{"class":168},[162,78599,946],{"class":179},[162,78601,4239],{"class":172},[162,78603,78303],{"class":51050},[162,78605,78575],{"class":172},[162,78607,946],{"class":179},[162,78609,3847],{"class":168},[162,78611,78310],{"class":5082},[162,78613,604],{"class":168},[162,78615,78512],{"class":179},[162,78617,78318],{"class":168},[162,78619,78517],{"class":361},[162,78621,78622,78624,78626,78628,78630,78632,78634,78636,78638,78640,78642,78644,78646,78648],{"class":164,"line":4902},[162,78623,76818],{"class":168},[162,78625,61316],{"class":5082},[162,78627,604],{"class":168},[162,78629,946],{"class":179},[162,78631,4239],{"class":172},[162,78633,78303],{"class":51050},[162,78635,78575],{"class":172},[162,78637,946],{"class":179},[162,78639,3847],{"class":168},[162,78641,78310],{"class":5082},[162,78643,604],{"class":168},[162,78645,78544],{"class":179},[162,78647,78374],{"class":168},[162,78649,78444],{"class":361},[162,78651,78652],{"class":164,"line":5694},[162,78653,301],{"emptyLinePlaceholder":300},[162,78655,78656],{"class":164,"line":5708},[162,78657,78658],{"class":361},"    \u002F\u002F ?类似于0次或一次\n",[162,78660,78661,78663,78665,78667,78669,78671,78674,78676,78678,78680,78682,78684,78686,78688],{"class":164,"line":5716},[162,78662,76818],{"class":168},[162,78664,61316],{"class":5082},[162,78666,604],{"class":168},[162,78668,946],{"class":179},[162,78670,4239],{"class":172},[162,78672,78673],{"class":51050},"哈？",[162,78675,3599],{"class":172},[162,78677,946],{"class":179},[162,78679,3847],{"class":168},[162,78681,78310],{"class":5082},[162,78683,604],{"class":168},[162,78685,77293],{"class":179},[162,78687,78374],{"class":168},[162,78689,78321],{"class":361},[162,78691,78692,78694,78696,78698,78700,78702,78704,78707,78709,78711,78713,78715,78717,78719],{"class":164,"line":5721},[162,78693,76818],{"class":168},[162,78695,61316],{"class":5082},[162,78697,604],{"class":168},[162,78699,946],{"class":179},[162,78701,4239],{"class":172},[162,78703,78303],{"class":51050},[162,78705,78706],{"class":172},"?$",[162,78708,946],{"class":179},[162,78710,3847],{"class":168},[162,78712,78310],{"class":5082},[162,78714,604],{"class":168},[162,78716,78344],{"class":179},[162,78718,78318],{"class":168},[162,78720,78444],{"class":361},[162,78722,78723,78725,78727,78729,78731,78733,78735,78737,78739,78741,78743,78745,78747,78749],{"class":164,"line":5727},[162,78724,76818],{"class":168},[162,78726,61316],{"class":5082},[162,78728,604],{"class":168},[162,78730,946],{"class":179},[162,78732,4239],{"class":172},[162,78734,78303],{"class":51050},[162,78736,78706],{"class":172},[162,78738,946],{"class":179},[162,78740,3847],{"class":168},[162,78742,78310],{"class":5082},[162,78744,604],{"class":168},[162,78746,78512],{"class":179},[162,78748,78318],{"class":168},[162,78750,78517],{"class":361},[162,78752,78753,78755,78757,78759,78761,78763,78765,78767,78769,78771,78773,78775,78777,78779],{"class":164,"line":5733},[162,78754,76818],{"class":168},[162,78756,61316],{"class":5082},[162,78758,604],{"class":168},[162,78760,946],{"class":179},[162,78762,4239],{"class":172},[162,78764,78303],{"class":51050},[162,78766,78706],{"class":172},[162,78768,946],{"class":179},[162,78770,3847],{"class":168},[162,78772,78310],{"class":5082},[162,78774,604],{"class":168},[162,78776,78544],{"class":179},[162,78778,78318],{"class":168},[162,78780,78444],{"class":361},[162,78782,78783],{"class":164,"line":5738},[162,78784,301],{"emptyLinePlaceholder":300},[162,78786,78787],{"class":164,"line":11052},[162,78788,78789],{"class":361},"    \u002F\u002F {n}写几，就必须出现几次\n",[162,78791,78792,78794,78796,78798,78800,78802,78804,78807,78809,78811,78813,78815,78818,78821],{"class":164,"line":11076},[162,78793,76818],{"class":168},[162,78795,61316],{"class":5082},[162,78797,604],{"class":168},[162,78799,946],{"class":179},[162,78801,4239],{"class":172},[162,78803,78303],{"class":51050},[162,78805,78806],{"class":172},"{4}$",[162,78808,946],{"class":179},[162,78810,3847],{"class":168},[162,78812,78310],{"class":5082},[162,78814,604],{"class":168},[162,78816,78817],{"class":179},"'哈哈哈哈'",[162,78819,78820],{"class":168},")) ",[162,78822,78321],{"class":361},[162,78824,78825],{"class":164,"line":11081},[162,78826,301],{"emptyLinePlaceholder":300},[162,78828,78829],{"class":164,"line":11087},[162,78830,78831],{"class":361},"    \u002F\u002F {n,}大于等于n次\n",[162,78833,78834,78836,78838,78840,78842,78844,78846,78849,78851,78853,78855,78857,78859,78861],{"class":164,"line":11114},[162,78835,76818],{"class":168},[162,78837,61316],{"class":5082},[162,78839,604],{"class":168},[162,78841,946],{"class":179},[162,78843,4239],{"class":172},[162,78845,78303],{"class":51050},[162,78847,78848],{"class":172},"{4,}$",[162,78850,946],{"class":179},[162,78852,3847],{"class":168},[162,78854,78310],{"class":5082},[162,78856,604],{"class":168},[162,78858,78817],{"class":179},[162,78860,78820],{"class":168},[162,78862,78321],{"class":361},[162,78864,78865,78867,78869,78871,78873,78875,78877,78879,78881,78883,78885,78887,78890,78892],{"class":164,"line":11119},[162,78866,76818],{"class":168},[162,78868,61316],{"class":5082},[162,78870,604],{"class":168},[162,78872,946],{"class":179},[162,78874,4239],{"class":172},[162,78876,78303],{"class":51050},[162,78878,78848],{"class":172},[162,78880,946],{"class":179},[162,78882,3847],{"class":168},[162,78884,78310],{"class":5082},[162,78886,604],{"class":168},[162,78888,78889],{"class":179},"'哈哈哈哈哈'",[162,78891,78820],{"class":168},[162,78893,78321],{"class":361},[162,78895,78896],{"class":164,"line":11125},[162,78897,301],{"emptyLinePlaceholder":300},[162,78899,78900],{"class":164,"line":11137},[162,78901,78902],{"class":361},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[162,78904,78905,78907,78909,78911,78913,78915,78917,78920,78922,78924,78926,78928,78930,78932],{"class":164,"line":11149},[162,78906,76818],{"class":168},[162,78908,61316],{"class":5082},[162,78910,604],{"class":168},[162,78912,946],{"class":179},[162,78914,4239],{"class":172},[162,78916,78303],{"class":51050},[162,78918,78919],{"class":172},"{4,6}$",[162,78921,946],{"class":179},[162,78923,3847],{"class":168},[162,78925,78310],{"class":5082},[162,78927,604],{"class":168},[162,78929,78817],{"class":179},[162,78931,78820],{"class":168},[162,78933,78321],{"class":361},[162,78935,78936,78938,78940,78942,78944,78946,78948,78950,78952,78954,78956,78958,78960,78962],{"class":164,"line":11161},[162,78937,76818],{"class":168},[162,78939,61316],{"class":5082},[162,78941,604],{"class":168},[162,78943,946],{"class":179},[162,78945,4239],{"class":172},[162,78947,78303],{"class":51050},[162,78949,78919],{"class":172},[162,78951,946],{"class":179},[162,78953,3847],{"class":168},[162,78955,78310],{"class":5082},[162,78957,604],{"class":168},[162,78959,78889],{"class":179},[162,78961,78820],{"class":168},[162,78963,78321],{"class":361},[162,78965,78966,78968,78970,78972,78974,78976,78978,78980,78982,78984,78986,78988,78991,78993],{"class":164,"line":12816},[162,78967,76818],{"class":168},[162,78969,61316],{"class":5082},[162,78971,604],{"class":168},[162,78973,946],{"class":179},[162,78975,4239],{"class":172},[162,78977,78303],{"class":51050},[162,78979,78919],{"class":172},[162,78981,946],{"class":179},[162,78983,3847],{"class":168},[162,78985,78310],{"class":5082},[162,78987,604],{"class":168},[162,78989,78990],{"class":179},"'哈哈哈哈哈哈哈'",[162,78992,78820],{"class":168},[162,78994,78444],{"class":361},[162,78996,78997],{"class":164,"line":12841},[162,78998,301],{"emptyLinePlaceholder":300},[162,79000,79001],{"class":164,"line":12864},[162,79002,79003],{"class":361},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[162,79005,79006,79008,79010,79012,79014,79016,79019,79021,79023,79025,79027,79029,79032,79034],{"class":164,"line":12888},[162,79007,76818],{"class":168},[162,79009,61316],{"class":5082},[162,79011,604],{"class":168},[162,79013,946],{"class":179},[162,79015,4239],{"class":172},[162,79017,79018],{"class":207},"[abc]",[162,79020,3599],{"class":172},[162,79022,946],{"class":179},[162,79024,3847],{"class":168},[162,79026,78310],{"class":5082},[162,79028,604],{"class":168},[162,79030,79031],{"class":179},"'a'",[162,79033,78318],{"class":168},[162,79035,78321],{"class":361},[162,79037,79038,79040,79042,79044,79046,79048,79050,79052,79054,79056,79058,79060,79063,79065],{"class":164,"line":12893},[162,79039,76818],{"class":168},[162,79041,61316],{"class":5082},[162,79043,604],{"class":168},[162,79045,946],{"class":179},[162,79047,4239],{"class":172},[162,79049,79018],{"class":207},[162,79051,3599],{"class":172},[162,79053,946],{"class":179},[162,79055,3847],{"class":168},[162,79057,78310],{"class":5082},[162,79059,604],{"class":168},[162,79061,79062],{"class":179},"'b'",[162,79064,78318],{"class":168},[162,79066,78321],{"class":361},[162,79068,79069,79071,79073,79075,79077,79079,79081,79083,79085,79087,79089,79091,79094,79096],{"class":164,"line":12898},[162,79070,76818],{"class":168},[162,79072,61316],{"class":5082},[162,79074,604],{"class":168},[162,79076,946],{"class":179},[162,79078,4239],{"class":172},[162,79080,79018],{"class":207},[162,79082,3599],{"class":172},[162,79084,946],{"class":179},[162,79086,3847],{"class":168},[162,79088,78310],{"class":5082},[162,79090,604],{"class":168},[162,79092,79093],{"class":179},"'c'",[162,79095,78318],{"class":168},[162,79097,78321],{"class":361},[162,79099,79100,79102,79104,79106,79108,79110,79112,79114,79116,79118,79121,79123],{"class":164,"line":12903},[162,79101,76818],{"class":168},[162,79103,61316],{"class":5082},[162,79105,604],{"class":168},[162,79107,946],{"class":179},[162,79109,79018],{"class":207},[162,79111,946],{"class":179},[162,79113,3847],{"class":168},[162,79115,78310],{"class":5082},[162,79117,604],{"class":168},[162,79119,79120],{"class":179},"'ab'",[162,79122,78318],{"class":168},[162,79124,78321],{"class":361},[162,79126,79127,79129,79131,79133,79135,79137,79139,79141,79143,79145,79147,79149,79151,79153],{"class":164,"line":12912},[162,79128,76818],{"class":168},[162,79130,61316],{"class":5082},[162,79132,604],{"class":168},[162,79134,946],{"class":179},[162,79136,4239],{"class":172},[162,79138,79018],{"class":207},[162,79140,3599],{"class":172},[162,79142,946],{"class":179},[162,79144,3847],{"class":168},[162,79146,78310],{"class":5082},[162,79148,604],{"class":168},[162,79150,79120],{"class":179},[162,79152,78318],{"class":168},[162,79154,79155],{"class":361},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[162,79157,79158,79160,79162,79164,79166,79168,79170,79173,79175,79177,79179,79181,79183,79185],{"class":164,"line":12917},[162,79159,76818],{"class":168},[162,79161,61316],{"class":5082},[162,79163,604],{"class":168},[162,79165,946],{"class":179},[162,79167,4239],{"class":172},[162,79169,79018],{"class":207},[162,79171,79172],{"class":172},"{2}$",[162,79174,946],{"class":179},[162,79176,3847],{"class":168},[162,79178,78310],{"class":5082},[162,79180,604],{"class":168},[162,79182,79120],{"class":179},[162,79184,78318],{"class":168},[162,79186,79187],{"class":361},"\u002F\u002Ftrue   可以选两个\n",[162,79189,79190,79192,79194,79196,79198,79200,79203,79205,79207,79209,79211,79213,79216,79218],{"class":164,"line":12923},[162,79191,76818],{"class":168},[162,79193,61316],{"class":5082},[162,79195,604],{"class":168},[162,79197,946],{"class":179},[162,79199,4239],{"class":172},[162,79201,79202],{"class":207},"[a-z]",[162,79204,3599],{"class":172},[162,79206,946],{"class":179},[162,79208,3847],{"class":168},[162,79210,78310],{"class":5082},[162,79212,604],{"class":168},[162,79214,79215],{"class":179},"'p'",[162,79217,78374],{"class":168},[162,79219,79220],{"class":361},"\u002F\u002Ftrue   依然只能选一个\n",[162,79222,79223,79225,79227,79229,79231,79233,79236,79238,79240,79242,79244,79246,79248,79250],{"class":164,"line":12944},[162,79224,76818],{"class":168},[162,79226,61316],{"class":5082},[162,79228,604],{"class":168},[162,79230,946],{"class":179},[162,79232,4239],{"class":172},[162,79234,79235],{"class":207},"[A-Z]",[162,79237,3599],{"class":172},[162,79239,946],{"class":179},[162,79241,3847],{"class":168},[162,79243,78310],{"class":5082},[162,79245,604],{"class":168},[162,79247,79215],{"class":179},[162,79249,78374],{"class":168},[162,79251,78444],{"class":361},[162,79253,79254,79256,79258,79260,79262,79264,79266,79268,79270,79272,79274,79276,79279,79281],{"class":164,"line":12950},[162,79255,76818],{"class":168},[162,79257,61316],{"class":5082},[162,79259,604],{"class":168},[162,79261,946],{"class":179},[162,79263,4239],{"class":172},[162,79265,79235],{"class":207},[162,79267,3599],{"class":172},[162,79269,946],{"class":179},[162,79271,3847],{"class":168},[162,79273,78310],{"class":5082},[162,79275,604],{"class":168},[162,79277,79278],{"class":179},"'P'",[162,79280,78374],{"class":168},[162,79282,78321],{"class":361},[162,79284,79285,79287,79289,79291,79293,79295,79298,79300,79302,79304,79306,79308,79311,79313],{"class":164,"line":12964},[162,79286,76818],{"class":168},[162,79288,61316],{"class":5082},[162,79290,604],{"class":168},[162,79292,946],{"class":179},[162,79294,4239],{"class":172},[162,79296,79297],{"class":207},"[0-9]",[162,79299,3599],{"class":172},[162,79301,946],{"class":179},[162,79303,3847],{"class":168},[162,79305,78310],{"class":5082},[162,79307,604],{"class":168},[162,79309,79310],{"class":179},"'0'",[162,79312,78374],{"class":168},[162,79314,78321],{"class":361},[162,79316,79317,79319,79321,79323,79325,79327,79330,79332,79334,79336,79338,79340,79342,79344],{"class":164,"line":12970},[162,79318,76818],{"class":168},[162,79320,61316],{"class":5082},[162,79322,604],{"class":168},[162,79324,946],{"class":179},[162,79326,4239],{"class":172},[162,79328,79329],{"class":207},"[a-zA-Z0-9]",[162,79331,3599],{"class":172},[162,79333,946],{"class":179},[162,79335,3847],{"class":168},[162,79337,78310],{"class":5082},[162,79339,604],{"class":168},[162,79341,79215],{"class":179},[162,79343,78318],{"class":168},[162,79345,78321],{"class":361},[162,79347,79348,79350,79352],{"class":164,"line":12997},[162,79349,55487],{"class":168},[162,79351,54885],{"class":54373},[162,79353,54380],{"class":168},[162,79355,79356,79358,79360],{"class":164,"line":13006},[162,79357,54857],{"class":168},[162,79359,54872],{"class":54373},[162,79361,54380],{"class":168},[162,79363,79364],{"class":164,"line":13012},[162,79365,301],{"emptyLinePlaceholder":300},[162,79367,79368,79370,79372],{"class":164,"line":13020},[162,79369,54857],{"class":168},[162,79371,53708],{"class":54373},[162,79373,54380],{"class":168},[25089,79375,79377],{"id":79376},"_3624-修饰符","3.6.2.4 修饰符",[19,79379,79380],{},[4602,79381],{"alt":158,"src":79382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,79384,79385],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,79387,79388],{},[4602,79389],{"alt":158,"src":79390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[153,79392,79394],{"className":53706,"code":79393,"language":53708,"meta":158,"style":158},"\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",[71,79395,79396,79406,79420,79428,79442,79462,79474,79482,79490,79498,79530,79561,79566,79598,79609,79642,79651,79659,79667],{"__ignoreMap":158},[162,79397,79398,79400,79402,79404],{"class":164,"line":165},[162,79399,54370],{"class":168},[162,79401,54374],{"class":54373},[162,79403,54377],{"class":5082},[162,79405,54380],{"class":168},[162,79407,79408,79410,79412,79414,79416,79418],{"class":164,"line":197},[162,79409,4187],{"class":168},[162,79411,53708],{"class":54373},[162,79413,54389],{"class":5082},[162,79415,173],{"class":168},[162,79417,54394],{"class":179},[162,79419,54380],{"class":168},[162,79421,79422,79424,79426],{"class":164,"line":228},[162,79423,4187],{"class":168},[162,79425,54407],{"class":54373},[162,79427,54380],{"class":168},[162,79429,79430,79432,79434,79436,79438,79440],{"class":164,"line":252},[162,79431,55215],{"class":168},[162,79433,54417],{"class":54373},[162,79435,54420],{"class":5082},[162,79437,173],{"class":168},[162,79439,54425],{"class":179},[162,79441,54380],{"class":168},[162,79443,79444,79446,79448,79450,79452,79454,79456,79458,79460],{"class":164,"line":328},[162,79445,55215],{"class":168},[162,79447,54417],{"class":54373},[162,79449,18013],{"class":5082},[162,79451,173],{"class":168},[162,79453,54464],{"class":179},[162,79455,54444],{"class":5082},[162,79457,173],{"class":168},[162,79459,54471],{"class":179},[162,79461,54380],{"class":168},[162,79463,79464,79466,79468,79470,79472],{"class":164,"line":466},[162,79465,55215],{"class":168},[162,79467,54480],{"class":54373},[162,79469,54483],{"class":168},[162,79471,54480],{"class":54373},[162,79473,54380],{"class":168},[162,79475,79476,79478,79480],{"class":164,"line":471},[162,79477,54857],{"class":168},[162,79479,54407],{"class":54373},[162,79481,54380],{"class":168},[162,79483,79484,79486,79488],{"class":164,"line":687},[162,79485,4187],{"class":168},[162,79487,54872],{"class":54373},[162,79489,54380],{"class":168},[162,79491,79492,79494,79496],{"class":164,"line":692},[162,79493,55215],{"class":168},[162,79495,54885],{"class":54373},[162,79497,54380],{"class":168},[162,79499,79500,79502,79504,79506,79508,79510,79513,79515,79517,79519,79521,79523,79526,79528],{"class":164,"line":698},[162,79501,76818],{"class":168},[162,79503,61316],{"class":5082},[162,79505,604],{"class":168},[162,79507,946],{"class":179},[162,79509,4239],{"class":172},[162,79511,79512],{"class":51050},"java",[162,79514,3599],{"class":172},[162,79516,946],{"class":179},[162,79518,3847],{"class":168},[162,79520,78310],{"class":5082},[162,79522,604],{"class":168},[162,79524,79525],{"class":179},"'java'",[162,79527,78820],{"class":168},[162,79529,78321],{"class":361},[162,79531,79532,79534,79536,79538,79540,79542,79544,79546,79548,79550,79552,79554,79557,79559],{"class":164,"line":2955},[162,79533,76818],{"class":168},[162,79535,61316],{"class":5082},[162,79537,604],{"class":168},[162,79539,946],{"class":179},[162,79541,4239],{"class":172},[162,79543,79512],{"class":51050},[162,79545,3599],{"class":172},[162,79547,946],{"class":179},[162,79549,3847],{"class":168},[162,79551,78310],{"class":5082},[162,79553,604],{"class":168},[162,79555,79556],{"class":179},"'Java'",[162,79558,78820],{"class":168},[162,79560,78444],{"class":361},[162,79562,79563],{"class":164,"line":2960},[162,79564,79565],{"class":361},"    \u002F\u002F 不区分大小写、\n",[162,79567,79568,79570,79572,79574,79576,79578,79580,79582,79584,79586,79588,79590,79592,79594,79596],{"class":164,"line":2971},[162,79569,76818],{"class":168},[162,79571,61316],{"class":5082},[162,79573,604],{"class":168},[162,79575,946],{"class":179},[162,79577,4239],{"class":172},[162,79579,79512],{"class":51050},[162,79581,3599],{"class":172},[162,79583,946],{"class":179},[162,79585,3732],{"class":172},[162,79587,3847],{"class":168},[162,79589,78310],{"class":5082},[162,79591,604],{"class":168},[162,79593,79556],{"class":179},[162,79595,78820],{"class":168},[162,79597,78321],{"class":361},[162,79599,79600,79602,79604,79606],{"class":164,"line":2984},[162,79601,14317],{"class":172},[162,79603,76984],{"class":207},[162,79605,16659],{"class":172},[162,79607,79608],{"class":179}," 'java是一门编程语言，学完java工资很高'\n",[162,79610,79611,79613,79616,79618,79621,79624,79626,79628,79630,79632,79635,79637,79640],{"class":164,"line":2989},[162,79612,14317],{"class":172},[162,79614,79615],{"class":207}," result",[162,79617,16659],{"class":172},[162,79619,79620],{"class":168}," str.",[162,79622,79623],{"class":5082},"replace",[162,79625,604],{"class":168},[162,79627,946],{"class":179},[162,79629,79512],{"class":51050},[162,79631,946],{"class":179},[162,79633,79634],{"class":172},"ig",[162,79636,183],{"class":168},[162,79638,79639],{"class":179},"'前端'",[162,79641,434],{"class":168},[162,79643,79644,79646,79648],{"class":164,"line":3011},[162,79645,76818],{"class":168},[162,79647,61316],{"class":5082},[162,79649,79650],{"class":168},"(result)\n",[162,79652,79653,79655,79657],{"class":164,"line":3022},[162,79654,55487],{"class":168},[162,79656,54885],{"class":54373},[162,79658,54380],{"class":168},[162,79660,79661,79663,79665],{"class":164,"line":3027},[162,79662,54857],{"class":168},[162,79664,54872],{"class":54373},[162,79666,54380],{"class":168},[162,79668,79669,79671,79673],{"class":164,"line":3046},[162,79670,54857],{"class":168},[162,79672,53708],{"class":54373},[162,79674,54380],{"class":168},[3219,79676,79677],{},"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":158,"searchDepth":197,"depth":197,"links":79679},[79680,79690,79702,79719,79726,79734],{"id":56430,"depth":197,"text":56431,"children":79681},[79682,79683,79684,79685,79686,79687,79688,79689],{"id":56434,"depth":228,"text":56435},{"id":56467,"depth":228,"text":56468},{"id":56506,"depth":228,"text":56507},{"id":56664,"depth":228,"text":56665},{"id":56712,"depth":228,"text":56713},{"id":56849,"depth":228,"text":56850},{"id":57171,"depth":228,"text":57172},{"id":60158,"depth":228,"text":60159},{"id":60186,"depth":197,"text":60187,"children":79691},[79692,79693,79694,79695,79696,79697,79698,79699,79700,79701],{"id":60190,"depth":228,"text":60191},{"id":60213,"depth":228,"text":60214},{"id":61128,"depth":228,"text":61129},{"id":61818,"depth":228,"text":61819},{"id":62100,"depth":228,"text":62101},{"id":66259,"depth":228,"text":66260},{"id":66429,"depth":228,"text":66430},{"id":66557,"depth":228,"text":66558},{"id":66582,"depth":228,"text":66583},{"id":67971,"depth":228,"text":67972},{"id":69124,"depth":197,"text":69125,"children":79703},[79704,79705,79706,79707,79708,79709,79710,79711,79712,79713,79714,79715,79716,79717,79718],{"id":69128,"depth":228,"text":69129},{"id":69782,"depth":228,"text":69783},{"id":71477,"depth":228,"text":71478},{"id":71518,"depth":228,"text":71519},{"id":71560,"depth":228,"text":71561},{"id":71574,"depth":228,"text":71575},{"id":71623,"depth":228,"text":71624},{"id":71635,"depth":228,"text":71636},{"id":71650,"depth":228,"text":71651},{"id":71686,"depth":228,"text":71687},{"id":71767,"depth":228,"text":71768},{"id":71895,"depth":228,"text":71896},{"id":71907,"depth":228,"text":71908},{"id":71926,"depth":228,"text":71927},{"id":74035,"depth":228,"text":74036},{"id":74054,"depth":197,"text":74055,"children":79720},[79721,79722,79723,79724,79725],{"id":74075,"depth":228,"text":74076},{"id":74095,"depth":228,"text":74096},{"id":74144,"depth":228,"text":74145},{"id":74269,"depth":228,"text":74270},{"id":74450,"depth":228,"text":74451},{"id":74468,"depth":197,"text":74469,"children":79727},[79728,79729,79730,79731,79732,79733],{"id":74483,"depth":228,"text":74484},{"id":74542,"depth":228,"text":74543},{"id":74566,"depth":228,"text":74567},{"id":74886,"depth":228,"text":74887},{"id":74918,"depth":228,"text":74919},{"id":74941,"depth":228,"text":74942},{"id":78009,"depth":197,"text":78010,"children":79735},[79736,79737],{"id":78043,"depth":228,"text":78044},{"id":78082,"depth":228,"text":78083},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":56402,"description":3241},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":79744,"title":79745,"body":79746,"description":3241,"extension":3242,"meta":95883,"navigation":300,"path":95884,"seo":95885,"stem":95886,"__hash__":95887},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":79747,"toc":95819},[79748,79751,79754,79758,79762,79767,79772,79783,79787,79792,79795,79799,79802,79807,79811,79815,79818,79823,79826,79830,79833,79841,79844,79848,79853,79858,79861,79865,79870,79875,79878,79882,79887,79890,79895,79898,79903,79906,79911,79916,79919,79922,79926,79931,79936,79939,79943,79947,79950,79953,79956,79960,79964,79969,79974,79977,79981,79986,79991,79994,79997,80000,80003,80006,80009,80012,80015,80018,80023,80027,80032,80037,80040,80043,80046,80049,80052,80055,80058,80061,80065,80069,80072,80075,80078,80083,80085,80088,80091,80094,80097,80100,80103,80106,80109,80112,80115,80118,80121,80124,80129,80134,80139,80142,80146,80149,80154,80158,80160,80171,80176,80277,80280,80283,80286,80289,80292,80295,80298,80301,80303,80306,80309,80312,80315,80318,80320,80323,80326,80329,80332,80335,80338,80340,80343,80345,80347,80350,80354,80358,80361,80364,80367,80370,80373,80376,80379,80382,80385,80390,80510,80513,80516,80521,80524,80527,80530,80533,80538,80541,80544,80547,80550,80555,80558,80658,80723,80797,80801,80804,80807,80811,80814,80828,80857,80860,80863,80866,80869,80872,80875,80878,80880,80883,80886,80889,80892,80896,80901,80905,80910,80985,80988,81171,81174,81177,81180,81183,81186,81188,81191,81194,81197,81200,81203,81206,81208,81212,81215,81220,81223,81226,81229,81232,81234,81239,81242,81245,81248,81251,81253,81258,81261,81264,81266,81268,81271,81275,81278,81281,81286,81289,81292,81295,81345,81350,81354,81359,81362,81431,81434,81443,81447,81452,81455,81458,81466,81469,81486,83288,83292,83296,83301,83304,83308,83314,83320,83472,83477,83482,83485,83488,83491,83494,83497,83500,83503,83506,83509,83512,83515,83518,83523,83527,83530,83541,83545,83550,83553,83556,83559,83562,83565,83567,83570,83573,83576,83579,83581,83598,83601,83605,83608,83613,83618,83621,83624,83628,83631,83634,83643,83646,83650,83653,83658,83663,83730,83734,83737,83740,83745,83750,83836,83841,83845,83848,83851,83866,83869,83874,83878,83883,83992,83995,84006,84156,84160,84165,84274,84278,84283,84288,84293,84296,84303,84323,84359,84523,84528,84531,84536,84543,84546,84549,84552,84611,84667,84723,84727,84732,85047,85050,85054,85057,85062,85171,85176,85180,85185,85189,85260,85264,85266,85269,85272,85310,85586,85590,85607,85673,85707,85711,85714,85719,85748,85755,85764,85769,85784,85789,85798,85801,85938,85942,86004,86008,86013,86258,86262,86267,86270,86273,86276,86279,86283,86288,87869,87873,87877,87883,87886,87891,87895,87898,87903,87906,87917,87921,87926,87930,87935,87940,87943,87948,87952,87956,87959,87964,87969,87972,87975,87978,88100,88105,88207,88210,88213,88217,88222,88394,88399,88403,88406,88411,88477,88482,88485,88616,88619,88624,88627,88630,88721,88726,88729,88732,88735,88738,88743,88748,88751,88756,88761,88766,88770,88773,88776,88781,88786,88791,88796,88850,88853,88856,88861,88864,88867,88872,88877,88882,88886,88891,88905,88910,88913,88918,88922,88927,88932,88937,88942,88947,88952,88957,88962,88965,88969,88974,88977,88980,88983,88988,88993,88996,88999,89003,89006,89009,89014,89019,89024,89029,89032,89037,89042,89103,89108,89111,89116,90357,90362,90366,90370,90375,90378,90383,90388,90391,90396,90398,90403,90407,90410,90413,90424,90428,90433,90438,90493,90498,90503,90508,90719,90724,90728,90733,90736,90738,90741,90744,91191,91196,91203,91209,91212,91215,91479,91484,91488,91753,91758,91762,91767,91772,91777,91782,92113,92116,92121,92126,92129,92133,92137,92142,92147,92152,92157,92162,92167,92171,92174,92179,92184,92187,92261,92266,92271,92276,92278,92281,92651,92656,92661,92666,92669,92672,92774,92779,92784,92887,92891,92896,92900,92904,92909,92914,92917,92922,92925,92928,93321,93326,93329,93332,93335,93338,93858,93862,93867,93872,93877,93880,93885,93888,93891,94273,94278,94280,94282,94285,94288,94800,94804,94865,94868,94871,94874,94878,94881,94886,94891,95816],[10,79749,79745],{"id":79750},"_4js进阶",[19,79752,79753],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,79755,79757],{"id":79756},"_41-作用域","4.1 作用域",[3284,79759,79761],{"id":79760},"_411-局部作用域","4.1.1 局部作用域",[19,79763,79764],{},[4602,79765],{"alt":158,"src":79766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,79768,79769],{},[4602,79770],{"alt":158,"src":79771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[4279,79773,79774,79777,79780],{},[1455,79775,79776],{},"函数作用域在函数内部",[1455,79778,79779],{},"块级作用域在{}",[1455,79781,79782],{},"对象的那个{}不是作用域，不是块作用域",[3284,79784,79786],{"id":79785},"_412-全局作用域","4.1.2 全局作用域",[19,79788,79789],{},[4602,79790],{"alt":158,"src":79791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,79793,79794],{},"window.a=10不要这样写",[3284,79796,79798],{"id":79797},"_413-作用域链","4.1.3 作用域链",[19,79800,79801],{},"变量查找机制",[19,79803,79804],{},[4602,79805],{"alt":158,"src":79806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,79808,79810],{"id":79809},"_42-垃圾回收机制","4.2 垃圾回收机制",[3284,79812,79814],{"id":79813},"_421-大体介绍","4.2.1 大体介绍",[19,79816,79817],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,79819,79820],{},[4602,79821],{"alt":158,"src":79822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,79824,79825],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[3284,79827,79829],{"id":79828},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,79831,79832],{},"堆栈空间分配区别：",[1452,79834,79835,79838],{},[1455,79836,79837],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[1455,79839,79840],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,79842,79843],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[25089,79845,79847],{"id":79846},"_4221-引用计数","4.2.2.1 引用计数",[19,79849,79850],{},[4602,79851],{"alt":158,"src":79852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,79854,79855],{},[4602,79856],{"alt":158,"src":79857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,79859,79860],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[25089,79862,79864],{"id":79863},"_4222-标记清除法","4.2.2.2 标记清除法",[19,79866,79867],{},[4602,79868],{"alt":158,"src":79869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,79871,79872],{},[4602,79873],{"alt":158,"src":79874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,79876,79877],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,79879,79881],{"id":79880},"_43-闭包","4.3 闭包",[19,79883,79884],{},[4602,79885],{"alt":158,"src":79886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,79888,79889],{},"闭包：内层函数+外层函数的变量",[19,79891,79892],{},[4602,79893],{"alt":158,"src":79894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,79896,79897],{},"closure就是闭包",[19,79899,79900],{},[4602,79901],{"alt":158,"src":79902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,79904,79905],{},"内层函数必须包含外层函数的变量才是闭包",[19,79907,79908],{},[4602,79909],{"alt":158,"src":79910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,79912,79913],{},[4602,79914],{"alt":158,"src":79915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,79917,79918],{},"闭包可能会引起内存泄漏",[19,79920,79921],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,79923,79925],{"id":79924},"_44-变量提升","4.4 变量提升",[19,79927,79928],{},[4602,79929],{"alt":158,"src":79930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,79932,79933],{},[4602,79934],{"alt":158,"src":79935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,79937,79938],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,79940,79942],{"id":79941},"_45-函数进阶","4.5 函数进阶",[3284,79944,79946],{"id":79945},"_451-函数提升","4.5.1 函数提升",[19,79948,79949],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,79951,79952],{},"只提升函数声明，不提升函数调用",[54885,79954,79955],{},"\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",[3284,79957,79959],{"id":79958},"_452-函数参数","4.5.2 函数参数",[25089,79961,79963],{"id":79962},"_4521-动态参数","4.5.2.1 动态参数",[19,79965,79966],{},[4602,79967],{"alt":158,"src":79968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,79970,79971],{},[4602,79972],{"alt":158,"src":79973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,79975,79976],{},"箭头函数里边没有arguments",[25089,79978,79980],{"id":79979},"_4522-剩余参数","4.5.2.2 剩余参数",[19,79982,79983],{},[4602,79984],{"alt":158,"src":79985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,79987,79988],{},[4602,79989],{"alt":158,"src":79990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,79992,79993],{},"剩余参数使用的时候不需要写...",[19,79995,79996],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,79998,79999],{},"  function getSum(a,b,...arr) {",[19,80001,80002],{},"  console.log(11)",[19,80004,80005],{},"  }",[19,80007,80008],{},"  getSum(1,2,3,4)",[19,80010,80011],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,80013,80014],{},"  getSum(1,2)",[19,80016,80017],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,80019,80020],{},[4602,80021],{"alt":158,"src":80022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[25089,80024,80026],{"id":80025},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,80028,80029],{},[4602,80030],{"alt":158,"src":80031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,80033,80034],{},[4602,80035],{"alt":158,"src":80036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,80038,80039],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,80041,80042],{},"展开运算符可以用于数组之间的合并：",[19,80044,80045],{},"const arr1 = [1, 2, 3]",[19,80047,80048],{},"const arr2 = [3, 4, 5]",[19,80050,80051],{},"const arr = [...arr1, ...arr2]",[19,80053,80054],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,80056,80057],{},"剩余参数：函数参数使用，得到真数组",[19,80059,80060],{},"展开运算符：数组中使用，数组展开",[3284,80062,80064],{"id":80063},"_453-箭头函数","4.5.3 箭头函数",[25089,80066,80068],{"id":80067},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,80070,80071],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,80073,80074],{},"它不是万能的！！！",[19,80076,80077],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,80079,80080],{},[4602,80081],{"alt":158,"src":80082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,80084,3344],{},[19,80086,80087],{},"① 只有一个形参的时候，可以省略小括号：",[19,80089,80090],{},"const fn=x=>{console.log(x)}",[19,80092,80093],{},"② 只有一行代码时可以省略大括号：",[19,80095,80096],{},"const fn=x=>console.log(11)",[19,80098,80099],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,80101,80102],{},"const fn=x=>x+x",[19,80104,80105],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,80107,80108],{},"⑤ 阻止表单默认提交：",[19,80110,80111],{},"const form = document.querySelector('form')",[19,80113,80114],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,80116,80117],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,80119,80120],{},"const fn=uname=>({uname:uname})",[19,80122,80123],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,80125,80126],{},[4602,80127],{"alt":158,"src":80128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,80130,80131],{},[4602,80132],{"alt":158,"src":80133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,80135,80136],{},[4602,80137],{"alt":158,"src":80138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,80140,80141],{},"一定不要忘记用()，有()就理解为自带return",[25089,80143,80145],{"id":80144},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,80147,80148],{},"箭头函数是没有动态参数的arguments",[19,80150,80151],{},[4602,80152],{"alt":158,"src":80153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[25089,80155,80157],{"id":80156},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,80159,14428],{},[1452,80161,80162,80165,80168],{},[1455,80163,80164],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[1455,80166,80167],{},"事件回调函数使用箭头函数时，this 为全局的 window",[1455,80169,80170],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,80172,80173],{},[4602,80174],{"alt":158,"src":80175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[153,80177,80179],{"className":56137,"code":80178,"language":56139,"meta":158,"style":158},"  \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",[71,80180,80181,80189,80194,80199,80204,80209,80214,80218,80223,80227,80231,80236,80241,80246,80250,80254,80259,80264,80269],{"__ignoreMap":158},[162,80182,80183,80185,80187],{"class":164,"line":165},[162,80184,55215],{"class":168},[162,80186,54885],{"class":54373},[162,80188,54380],{"class":168},[162,80190,80191],{"class":164,"line":197},[162,80192,80193],{"class":168},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[162,80195,80196],{"class":164,"line":228},[162,80197,80198],{"class":168},"    console.log(this) \u002F\u002F指向window\n",[162,80200,80201],{"class":164,"line":252},[162,80202,80203],{"class":168},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[162,80205,80206],{"class":164,"line":328},[162,80207,80208],{"class":168},"    function fn() {\n",[162,80210,80211],{"class":164,"line":466},[162,80212,80213],{"class":168},"      console.log(this)  \u002F\u002F指向window\n",[162,80215,80216],{"class":164,"line":471},[162,80217,5305],{"class":168},[162,80219,80220],{"class":164,"line":687},[162,80221,80222],{"class":168},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[162,80224,80225],{"class":164,"line":692},[162,80226,301],{"emptyLinePlaceholder":300},[162,80228,80229],{"class":164,"line":698},[162,80230,74588],{"class":168},[162,80232,80233],{"class":164,"line":2955},[162,80234,80235],{"class":168},"      name: 'andy',\n",[162,80237,80238],{"class":164,"line":2960},[162,80239,80240],{"class":168},"      sayHai: function () {\n",[162,80242,80243],{"class":164,"line":2971},[162,80244,80245],{"class":168},"        console.log(this)\n",[162,80247,80248],{"class":164,"line":2984},[162,80249,55468],{"class":168},[162,80251,80252],{"class":164,"line":2989},[162,80253,5305],{"class":168},[162,80255,80256],{"class":164,"line":3011},[162,80257,80258],{"class":168},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[162,80260,80261],{"class":164,"line":3022},[162,80262,80263],{"class":168},"    \u002F\u002F 2.箭头函数的this\n",[162,80265,80266],{"class":164,"line":3027},[162,80267,80268],{"class":168},"    const fn = () => console.log(this)\n",[162,80270,80271,80273,80275],{"class":164,"line":3046},[162,80272,55487],{"class":168},[162,80274,54885],{"class":54373},[162,80276,54380],{"class":168},[19,80278,80279],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,80281,80282],{},"const fn = () => console.log(this)",[19,80284,80285],{},"fn() \u002F\u002F指向window",[19,80287,80288],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,80290,80291],{},"①",[19,80293,80294],{},"const obj = {",[19,80296,80297],{},"uname: 'pink老师',",[19,80299,80300],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,80302,976],{},[19,80304,80305],{},"调用对象里边的函数",[19,80307,80308],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,80310,80311],{},"obj.sayHai()",[19,80313,80314],{},"②",[19,80316,80317],{},"const obj1 = {",[19,80319,80297],{},[19,80321,80322],{},"sayHai: function () {",[19,80324,80325],{},"let i = 10",[19,80327,80328],{},"const count = () => {",[19,80330,80331],{},"console.log(this)",[19,80333,80334],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,80336,80337],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,80339,976],{},[19,80341,80342],{},"count()",[19,80344,976],{},[19,80346,976],{},[19,80348,80349],{},"obj1.sayHai()",[14,80351,80353],{"id":80352},"_46-解构赋值","4.6 解构赋值",[3284,80355,80357],{"id":80356},"_461-数组解构","4.6.1 数组解构",[19,80359,80360],{},"以前要是使用数组中的值的话：",[19,80362,80363],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,80365,80366],{},"const arr=[100,60,80]",[19,80368,80369],{},"const max=arr[0]",[19,80371,80372],{},"const min=arr[1]",[19,80374,80375],{},"const avg=arr[2]",[19,80377,80378],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,80380,80381],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,80383,80384],{},"这个写法就类似于上边的那种用很多const的方法",[19,80386,80387],{},[4602,80388],{"alt":158,"src":80389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[153,80391,80393],{"className":53706,"code":80392,"language":53708,"meta":158,"style":158},"①变量之间交换值:\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",[71,80394,80395,80400,80405,80410,80415,80420,80424,80428,80433,80437,80442,80447,80451,80456,80461,80472,80482,80487,80492,80497,80501,80505],{"__ignoreMap":158},[162,80396,80397],{"class":164,"line":165},[162,80398,80399],{"class":168},"①变量之间交换值:\n",[162,80401,80402],{"class":164,"line":197},[162,80403,80404],{"class":168},"let a=1\n",[162,80406,80407],{"class":164,"line":228},[162,80408,80409],{"class":168},"let b=2;\n",[162,80411,80412],{"class":164,"line":252},[162,80413,80414],{"class":168},"必须加这行代码，不然就会报错\n",[162,80416,80417],{"class":164,"line":328},[162,80418,80419],{"class":168},"[b,a]=[a,b]\n",[162,80421,80422],{"class":164,"line":466},[162,80423,301],{"emptyLinePlaceholder":300},[162,80425,80426],{"class":164,"line":471},[162,80427,301],{"emptyLinePlaceholder":300},[162,80429,80430],{"class":164,"line":687},[162,80431,80432],{"class":168},"可以写成下面的方式：\n",[162,80434,80435],{"class":164,"line":692},[162,80436,80404],{"class":168},[162,80438,80439],{"class":164,"line":698},[162,80440,80441],{"class":168},"let b=2\n",[162,80443,80444],{"class":164,"line":2955},[162,80445,80446],{"class":168},";[b,a]=[a,b]\n",[162,80448,80449],{"class":164,"line":2960},[162,80450,301],{"emptyLinePlaceholder":300},[162,80452,80453],{"class":164,"line":2971},[162,80454,80455],{"class":168},"②排序\n",[162,80457,80458],{"class":164,"line":2984},[162,80459,80460],{"class":168},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[162,80462,80463,80466,80469],{"class":164,"line":2989},[162,80464,80465],{"class":168},"for (let i = 0; i ",[162,80467,4187],{"class":80468},"s7hpK",[162,80470,80471],{"class":168}," arr1.length; i++) {\n",[162,80473,80474,80477,80479],{"class":164,"line":3011},[162,80475,80476],{"class":168},"   for (let j = 0; j ",[162,80478,4187],{"class":80468},[162,80480,80481],{"class":168}," arr1.length - 1; j++) {\n",[162,80483,80484],{"class":164,"line":3022},[162,80485,80486],{"class":168},"      if (arr1[j] > arr1[j + 1]) {\n",[162,80488,80489],{"class":164,"line":3027},[162,80490,80491],{"class":168},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[162,80493,80494],{"class":164,"line":3046},[162,80495,80496],{"class":168},"       }\n",[162,80498,80499],{"class":164,"line":3052},[162,80500,7421],{"class":168},[162,80502,80503],{"class":164,"line":3057},[162,80504,1498],{"class":168},[162,80506,80507],{"class":164,"line":3072},[162,80508,80509],{"class":168},"console.log(arr1)\n",[19,80511,80512],{},"数组解构的细节：",[19,80514,80515],{},"①变量多，单元值少",[19,80517,80518],{},[4602,80519],{"alt":158,"src":80520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,80522,80523],{},"防止出现undefined的方法：",[19,80525,80526],{},"const [a=0,b=0] =[1]",[19,80528,80529],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,80531,80532],{},"②变量少，单元值多",[19,80534,80535],{},[4602,80536],{"alt":158,"src":80537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,80539,80540],{},"此时可以使用剩余参数来接收多余的值",[19,80542,80543],{},"const [a,b,...c]=[1,2,3,4]",[19,80545,80546],{},"console.log(c) 输出[3,4]",[19,80548,80549],{},"③可以按需导入，忽略某些返回值",[19,80551,80552],{},[4602,80553],{"alt":158,"src":80554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,80556,80557],{},"④支持多维数组的结构",[153,80559,80563],{"className":80560,"code":80561,"language":80562,"meta":158,"style":158},"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",[71,80564,80565,80593,80609,80624,80639],{"__ignoreMap":158},[162,80566,80567,80569,80571,80573,80575,80577,80579,80581,80584,80586,80588,80590],{"class":164,"line":165},[162,80568,9898],{"class":172},[162,80570,54905],{"class":168},[162,80572,173],{"class":172},[162,80574,176],{"class":168},[162,80576,208],{"class":207},[162,80578,183],{"class":168},[162,80580,213],{"class":207},[162,80582,80583],{"class":168},", [",[162,80585,218],{"class":207},[162,80587,183],{"class":168},[162,80589,223],{"class":207},[162,80591,80592],{"class":168},"]]\n",[162,80594,80595,80598,80600,80602,80604,80606],{"class":164,"line":197},[162,80596,80597],{"class":168},"console.",[162,80599,61316],{"class":5082},[162,80601,6964],{"class":168},[162,80603,312],{"class":207},[162,80605,7328],{"class":168},[162,80607,80608],{"class":361},"  \u002F\u002F1\n",[162,80610,80611,80613,80615,80617,80619,80621],{"class":164,"line":228},[162,80612,80597],{"class":168},[162,80614,61316],{"class":5082},[162,80616,6964],{"class":168},[162,80618,208],{"class":207},[162,80620,7328],{"class":168},[162,80622,80623],{"class":361},"  \u002F\u002F2\n",[162,80625,80626,80628,80630,80632,80634,80636],{"class":164,"line":252},[162,80627,80597],{"class":168},[162,80629,61316],{"class":5082},[162,80631,6964],{"class":168},[162,80633,213],{"class":207},[162,80635,7328],{"class":168},[162,80637,80638],{"class":361},"  \u002F\u002F[3,4]\n",[162,80640,80641,80643,80645,80647,80649,80651,80653,80655],{"class":164,"line":328},[162,80642,80597],{"class":168},[162,80644,61316],{"class":5082},[162,80646,6964],{"class":168},[162,80648,213],{"class":207},[162,80650,8010],{"class":168},[162,80652,312],{"class":207},[162,80654,7328],{"class":168},[162,80656,80657],{"class":361},"  \u002F\u002F3\n",[153,80659,80661],{"className":80560,"code":80660,"language":80562,"meta":158,"style":158},"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",[71,80662,80663,80690,80701,80712],{"__ignoreMap":158},[162,80664,80665,80667,80670,80672,80674,80676,80678,80680,80682,80684,80686,80688],{"class":164,"line":165},[162,80666,9898],{"class":172},[162,80668,80669],{"class":168}," [a, b, c] ",[162,80671,173],{"class":172},[162,80673,176],{"class":168},[162,80675,208],{"class":207},[162,80677,183],{"class":168},[162,80679,213],{"class":207},[162,80681,80583],{"class":168},[162,80683,218],{"class":207},[162,80685,183],{"class":168},[162,80687,223],{"class":207},[162,80689,80592],{"class":168},[162,80691,80692,80694,80696,80699],{"class":164,"line":197},[162,80693,80597],{"class":168},[162,80695,61316],{"class":5082},[162,80697,80698],{"class":168},"(a)",[162,80700,80608],{"class":361},[162,80702,80703,80705,80707,80710],{"class":164,"line":228},[162,80704,80597],{"class":168},[162,80706,61316],{"class":5082},[162,80708,80709],{"class":168},"(b)",[162,80711,80623],{"class":361},[162,80713,80714,80716,80718,80721],{"class":164,"line":252},[162,80715,80597],{"class":168},[162,80717,61316],{"class":5082},[162,80719,80720],{"class":168},"(c)",[162,80722,80638],{"class":361},[153,80724,80726],{"className":80560,"code":80725,"language":80562,"meta":158,"style":158},"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",[71,80727,80728,80755,80765,80775,80785],{"__ignoreMap":158},[162,80729,80730,80732,80735,80737,80739,80741,80743,80745,80747,80749,80751,80753],{"class":164,"line":165},[162,80731,9898],{"class":172},[162,80733,80734],{"class":168}," [a, b, [c, d]] ",[162,80736,173],{"class":172},[162,80738,176],{"class":168},[162,80740,208],{"class":207},[162,80742,183],{"class":168},[162,80744,213],{"class":207},[162,80746,80583],{"class":168},[162,80748,218],{"class":207},[162,80750,183],{"class":168},[162,80752,223],{"class":207},[162,80754,80592],{"class":168},[162,80756,80757,80759,80761,80763],{"class":164,"line":197},[162,80758,80597],{"class":168},[162,80760,61316],{"class":5082},[162,80762,80698],{"class":168},[162,80764,80608],{"class":361},[162,80766,80767,80769,80771,80773],{"class":164,"line":228},[162,80768,80597],{"class":168},[162,80770,61316],{"class":5082},[162,80772,80709],{"class":168},[162,80774,80623],{"class":361},[162,80776,80777,80779,80781,80783],{"class":164,"line":252},[162,80778,80597],{"class":168},[162,80780,61316],{"class":5082},[162,80782,80720],{"class":168},[162,80784,80657],{"class":361},[162,80786,80787,80789,80791,80794],{"class":164,"line":328},[162,80788,80597],{"class":168},[162,80790,61316],{"class":5082},[162,80792,80793],{"class":168},"(d)",[162,80795,80796],{"class":361},"  \u002F\u002F4\n",[3284,80798,80800],{"id":80799},"_462-对象解构","4.6.2 对象解构",[19,80802,80803],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,80805,80806],{},"用的非常非常多！！！！！！",[25089,80808,80810],{"id":80809},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,80812,80813],{},"基本语法：",[1452,80815,80816,80819,80822,80825],{},[1455,80817,80818],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[1455,80820,80821],{},"对象属性的值将被赋值给与属性名相同的变量",[1455,80823,80824],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[1455,80826,80827],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[153,80829,80831],{"className":53706,"code":80830,"language":53708,"meta":158,"style":158},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[71,80832,80833,80838,80843,80848,80852],{"__ignoreMap":158},[162,80834,80835],{"class":164,"line":165},[162,80836,80837],{"class":168},"const obj = {\n",[162,80839,80840],{"class":164,"line":197},[162,80841,80842],{"class":168},"   uname: 'pink老师',\n",[162,80844,80845],{"class":164,"line":228},[162,80846,80847],{"class":168},"   age: 18,\n",[162,80849,80850],{"class":164,"line":252},[162,80851,1498],{"class":168},[162,80853,80854],{"class":164,"line":328},[162,80855,80856],{"class":168},"const { uname, age } = obj\n",[19,80858,80859],{},"上方代码这样写等价于：",[19,80861,80862],{},"const uname等价于obj.uname",[19,80864,80865],{},"变量名可以重新改名：",[19,80867,80868],{},"const uname='red老师'",[19,80870,80871],{},"const user={",[19,80873,80874],{},"  uname:'pink老师',",[19,80876,80877],{},"  age:18",[19,80879,976],{},[19,80881,80882],{},"const {uname,age}=user",[19,80884,80885],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,80887,80888],{},"const {旧变量名：新变量名}=对象",[19,80890,80891],{},"const {uname:username,age}=user",[25089,80893,80895],{"id":80894},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,80897,80898],{},[4602,80899],{"alt":158,"src":80900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[25089,80902,80904],{"id":80903},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,80906,80907],{},[4602,80908],{"alt":158,"src":80909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[153,80911,80913],{"className":56137,"code":80912,"language":56139,"meta":158,"style":158},"  \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",[71,80914,80915,80923,80928,80933,80938,80943,80948,80953,80958,80963,80967,80972,80977],{"__ignoreMap":158},[162,80916,80917,80919,80921],{"class":164,"line":165},[162,80918,55215],{"class":168},[162,80920,54885],{"class":54373},[162,80922,54380],{"class":168},[162,80924,80925],{"class":164,"line":197},[162,80926,80927],{"class":168},"    const pig = {\n",[162,80929,80930],{"class":164,"line":228},[162,80931,80932],{"class":168},"      name: '佩奇',\n",[162,80934,80935],{"class":164,"line":252},[162,80936,80937],{"class":168},"      family: {\n",[162,80939,80940],{"class":164,"line":328},[162,80941,80942],{"class":168},"        mother: '猪妈妈',\n",[162,80944,80945],{"class":164,"line":466},[162,80946,80947],{"class":168},"        father: '猪爸爸',\n",[162,80949,80950],{"class":164,"line":471},[162,80951,80952],{"class":168},"        sister: '乔治'\n",[162,80954,80955],{"class":164,"line":687},[162,80956,80957],{"class":168},"      },\n",[162,80959,80960],{"class":164,"line":692},[162,80961,80962],{"class":168},"      age: 6\n",[162,80964,80965],{"class":164,"line":698},[162,80966,5305],{"class":168},[162,80968,80969],{"class":164,"line":2955},[162,80970,80971],{"class":168},"    \u002F\u002F 多级对象解构\n",[162,80973,80974],{"class":164,"line":2960},[162,80975,80976],{"class":168},"    const { name, family: { mother, father, sister }, age } = pig\n",[162,80978,80979,80981,80983],{"class":164,"line":2971},[162,80980,55487],{"class":168},[162,80982,54885],{"class":54373},[162,80984,54380],{"class":168},[19,80986,80987],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[153,80989,80992],{"className":80990,"code":80991,"language":79512,"meta":158,"style":158},"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",[71,80993,80994,80999,81010,81022,81034,81043,81047,81058,81070,81080,81085,81089,81099,81110,81119,81123,81127,81138,81149,81158,81162,81167],{"__ignoreMap":158},[162,80995,80996],{"class":164,"line":165},[162,80997,80998],{"class":361},"    \u002F\u002F 这是后台传递过来的数据\n",[162,81000,81001,81003,81006,81008],{"class":164,"line":197},[162,81002,14317],{"class":172},[162,81004,81005],{"class":168}," msg ",[162,81007,173],{"class":172},[162,81009,1722],{"class":168},[162,81011,81012,81015,81017,81020],{"class":164,"line":228},[162,81013,81014],{"class":179},"      \"code\"",[162,81016,1332],{"class":172},[162,81018,81019],{"class":207}," 200",[162,81021,1735],{"class":168},[162,81023,81024,81027,81029,81032],{"class":164,"line":252},[162,81025,81026],{"class":179},"      \"msg\"",[162,81028,1332],{"class":172},[162,81030,81031],{"class":179}," \"获取新闻列表成功\"",[162,81033,1735],{"class":168},[162,81035,81036,81039,81041],{"class":164,"line":328},[162,81037,81038],{"class":179},"      \"data\"",[162,81040,1332],{"class":172},[162,81042,2030],{"class":168},[162,81044,81045],{"class":164,"line":466},[162,81046,5627],{"class":168},[162,81048,81049,81052,81054,81056],{"class":164,"line":471},[162,81050,81051],{"class":179},"          \"id\"",[162,81053,1332],{"class":172},[162,81055,28210],{"class":207},[162,81057,1735],{"class":168},[162,81059,81060,81063,81065,81068],{"class":164,"line":687},[162,81061,81062],{"class":179},"          \"title\"",[162,81064,1332],{"class":172},[162,81066,81067],{"class":179}," \"5G商用自己，三大运用商收入下降\"",[162,81069,1735],{"class":168},[162,81071,81072,81075,81077],{"class":164,"line":692},[162,81073,81074],{"class":179},"          \"count\"",[162,81076,1332],{"class":172},[162,81078,81079],{"class":207}," 58\n",[162,81081,81082],{"class":164,"line":698},[162,81083,81084],{"class":168},"        },\n",[162,81086,81087],{"class":164,"line":2955},[162,81088,5627],{"class":168},[162,81090,81091,81093,81095,81097],{"class":164,"line":2960},[162,81092,81051],{"class":179},[162,81094,1332],{"class":172},[162,81096,2711],{"class":207},[162,81098,1735],{"class":168},[162,81100,81101,81103,81105,81108],{"class":164,"line":2971},[162,81102,81062],{"class":179},[162,81104,1332],{"class":172},[162,81106,81107],{"class":179}," \"国际媒体头条速览\"",[162,81109,1735],{"class":168},[162,81111,81112,81114,81116],{"class":164,"line":2984},[162,81113,81074],{"class":179},[162,81115,1332],{"class":172},[162,81117,81118],{"class":207}," 56\n",[162,81120,81121],{"class":164,"line":2989},[162,81122,81084],{"class":168},[162,81124,81125],{"class":164,"line":3011},[162,81126,5627],{"class":168},[162,81128,81129,81131,81133,81136],{"class":164,"line":3022},[162,81130,81051],{"class":179},[162,81132,1332],{"class":172},[162,81134,81135],{"class":207}," 3",[162,81137,1735],{"class":168},[162,81139,81140,81142,81144,81147],{"class":164,"line":3027},[162,81141,81062],{"class":179},[162,81143,1332],{"class":172},[162,81145,81146],{"class":179}," \"乌克兰和俄罗斯持续冲突\"",[162,81148,1735],{"class":168},[162,81150,81151,81153,81155],{"class":164,"line":3046},[162,81152,81074],{"class":179},[162,81154,1332],{"class":172},[162,81156,81157],{"class":207}," 1669\n",[162,81159,81160],{"class":164,"line":3052},[162,81161,81084],{"class":168},[162,81163,81164],{"class":164,"line":3057},[162,81165,81166],{"class":168},"      ]\n",[162,81168,81169],{"class":164,"line":3072},[162,81170,5305],{"class":168},[19,81172,81173],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,81175,81176],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,81178,81179],{},"\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,81181,81182],{},"function({data}) {",[19,81184,81185],{},"console.log(data)",[19,81187,976],{},[19,81189,81190],{},"render(msg)",[19,81192,81193],{},"实参传递给形参的时候解构了",[19,81195,81196],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,81198,81199],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,81201,81202],{},"function render({data:mydata}) {",[19,81204,81205],{},"  console.log(data)",[19,81207,976],{},[3284,81209,81211],{"id":81210},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,81213,81214],{},"有两种情况：一个是数组结构，一个是立即执行函数",[1452,81216,81217],{},[1455,81218,81219],{},"如果对一个数组进行遍历，有两种方式：",[19,81221,81222],{},"①法1",[19,81224,81225],{},"const arr=[1,2,3]",[19,81227,81228],{},"arr.map(function(item,index) {",[19,81230,81231],{},"  console.log(item)",[19,81233,55534],{},[19,81235,81236],{},[4602,81237],{"alt":158,"src":81238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,81240,81241],{},"②法2",[19,81243,81244],{},"const str='pink'",[19,81246,81247],{},"[1,2,3].map(function(item,index) {",[19,81249,81250],{},"console.log(item)",[19,81252,55534],{},[19,81254,81255],{},[4602,81256],{"alt":158,"src":81257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,81259,81260],{},"此时会报错",[19,81262,81263],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,81265,81250],{},[19,81267,55534],{},[19,81269,81270],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,81272,81274],{"id":81273},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,81276,81277],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,81279,81280],{},"可以理解为加强版的for循环",[19,81282,81283],{},[4602,81284],{"alt":158,"src":81285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,81287,81288],{},"里边不写return，不返回数组，只遍历不返回",[19,81290,81291],{},"map是返回数组",[19,81293,81294],{},"forEach主要用于遍历数组对象",[153,81296,81298],{"className":56137,"code":81297,"language":56139,"meta":158,"style":158},"  \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",[71,81299,81300,81308,81313,81318,81323,81328,81332,81337],{"__ignoreMap":158},[162,81301,81302,81304,81306],{"class":164,"line":165},[162,81303,55215],{"class":168},[162,81305,54885],{"class":54373},[162,81307,54380],{"class":168},[162,81309,81310],{"class":164,"line":197},[162,81311,81312],{"class":168},"    const arr = ['red', 'green', 'pink']\n",[162,81314,81315],{"class":164,"line":228},[162,81316,81317],{"class":168},"    const result = arr.forEach(function (item, index) {\n",[162,81319,81320],{"class":164,"line":252},[162,81321,81322],{"class":168},"      console.log(item)\n",[162,81324,81325],{"class":164,"line":328},[162,81326,81327],{"class":168},"      console.log(index)\n",[162,81329,81330],{"class":164,"line":466},[162,81331,36536],{"class":168},[162,81333,81334],{"class":164,"line":471},[162,81335,81336],{"class":168},"    console.log(result)\n",[162,81338,81339,81341,81343],{"class":164,"line":687},[162,81340,55487],{"class":168},[162,81342,54885],{"class":54373},[162,81344,54380],{"class":168},[19,81346,81347],{},[4602,81348],{"alt":158,"src":81349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,81351,81353],{"id":81352},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,81355,81356],{},[4602,81357],{"alt":158,"src":81358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,81360,81361],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[153,81363,81365],{"className":56137,"code":81364,"language":56139,"meta":158,"style":158},"\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",[71,81366,81367,81375,81383,81388,81393,81397,81401,81406,81410,81415,81423],{"__ignoreMap":158},[162,81368,81369,81371,81373],{"class":164,"line":165},[162,81370,4187],{"class":168},[162,81372,54872],{"class":54373},[162,81374,54380],{"class":168},[162,81376,81377,81379,81381],{"class":164,"line":197},[162,81378,55215],{"class":168},[162,81380,54885],{"class":54373},[162,81382,54380],{"class":168},[162,81384,81385],{"class":164,"line":228},[162,81386,81387],{"class":168},"    const arr = [10, 20, 30]\n",[162,81389,81390],{"class":164,"line":252},[162,81391,81392],{"class":168},"    const newArr = arr.filter(function (item, index) {\n",[162,81394,81395],{"class":164,"line":328},[162,81396,81322],{"class":168},[162,81398,81399],{"class":164,"line":466},[162,81400,81327],{"class":168},[162,81402,81403],{"class":164,"line":471},[162,81404,81405],{"class":168},"      return item >= 20\n",[162,81407,81408],{"class":164,"line":687},[162,81409,36536],{"class":168},[162,81411,81412],{"class":164,"line":692},[162,81413,81414],{"class":168},"    console.log(newArr)\n",[162,81416,81417,81419,81421],{"class":164,"line":698},[162,81418,55487],{"class":168},[162,81420,54885],{"class":54373},[162,81422,54380],{"class":168},[162,81424,81425,81427,81429],{"class":164,"line":2955},[162,81426,54857],{"class":168},[162,81428,54872],{"class":54373},[162,81430,54380],{"class":168},[19,81432,81433],{},"这个也可以写成箭头函数：",[153,81435,81437],{"className":53706,"code":81436,"language":53708,"meta":158,"style":158},"const newArr = arr.filter(item => item >= 20)\n",[71,81438,81439],{"__ignoreMap":158},[162,81440,81441],{"class":164,"line":165},[162,81442,81436],{"class":168},[14,81444,81446],{"id":81445},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,81448,81449],{},[4602,81450],{"alt":158,"src":81451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,81453,81454],{},"步骤：",[19,81456,81457],{},"①：渲染页面模块",[4279,81459,81460,81463],{},[1455,81461,81462],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[1455,81464,81465],{},"用forEach+字符串的形式",[19,81467,81468],{},"②：点击不同需求，显示不同页面内容",[4279,81470,81471,81474,81477,81480,81483],{},[1455,81472,81473],{},"点击采取事件委托方式 .filter",[1455,81475,81476],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[1455,81478,81479],{},"筛选条件是根据点击的 data-index 来判断",[1455,81481,81482],{},"可以使用对象解构，把事件对象解构",[1455,81484,81485],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[153,81487,81489],{"className":53706,"code":81488,"language":53708,"meta":158,"style":158},"\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",[71,81490,81491,81501,81515,81519,81527,81541,81561,81573,81581,81587,81597,81607,81617,81621,81625,81631,81644,81656,81666,81678,81682,81686,81693,81706,81718,81735,81753,81766,81770,81774,81786,81796,81800,81804,81811,81852,81879,81889,81893,81897,81905,81917,81921,81925,81933,81945,81957,81968,81972,81976,81985,81997,82008,82012,82016,82025,82037,82049,82053,82057,82064,82074,82086,82098,82113,82117,82121,82129,82145,82155,82165,82175,82187,82191,82195,82205,82216,82226,82230,82238,82246,82250,82258,82273,82299,82324,82349,82368,82376,82390,82395,82400,82405,82410,82415,82423,82431,82436,82447,82452,82462,82472,82482,82492,82496,82500,82509,82518,82527,82536,82540,82544,82553,82562,82571,82580,82584,82588,82597,82606,82615,82624,82628,82632,82641,82650,82659,82668,82672,82676,82685,82694,82703,82712,82716,82720,82729,82738,82747,82756,82760,82764,82773,82782,82790,82799,82803,82807,82811,82816,82828,82833,82845,82849,82866,82894,82903,82908,82918,82928,82937,82942,82947,82951,82956,82973,82977,82982,82990,82995,83022,83027,83047,83052,83064,83069,83074,83079,83090,83104,83141,83159,83192,83209,83233,83237,83242,83248,83252,83256,83260,83268,83276,83280],{"__ignoreMap":158},[162,81492,81493,81495,81497,81499],{"class":164,"line":165},[162,81494,54370],{"class":168},[162,81496,54374],{"class":54373},[162,81498,54377],{"class":5082},[162,81500,54380],{"class":168},[162,81502,81503,81505,81507,81509,81511,81513],{"class":164,"line":197},[162,81504,4187],{"class":168},[162,81506,53708],{"class":54373},[162,81508,54389],{"class":5082},[162,81510,173],{"class":168},[162,81512,54394],{"class":179},[162,81514,54380],{"class":168},[162,81516,81517],{"class":164,"line":228},[162,81518,301],{"emptyLinePlaceholder":300},[162,81520,81521,81523,81525],{"class":164,"line":252},[162,81522,4187],{"class":168},[162,81524,54407],{"class":54373},[162,81526,54380],{"class":168},[162,81528,81529,81531,81533,81535,81537,81539],{"class":164,"line":328},[162,81530,55215],{"class":168},[162,81532,54417],{"class":54373},[162,81534,54420],{"class":5082},[162,81536,173],{"class":168},[162,81538,54425],{"class":179},[162,81540,54380],{"class":168},[162,81542,81543,81545,81547,81549,81551,81553,81555,81557,81559],{"class":164,"line":466},[162,81544,55215],{"class":168},[162,81546,54417],{"class":54373},[162,81548,18013],{"class":5082},[162,81550,173],{"class":168},[162,81552,54464],{"class":179},[162,81554,54444],{"class":5082},[162,81556,173],{"class":168},[162,81558,54471],{"class":179},[162,81560,54380],{"class":168},[162,81562,81563,81565,81567,81569,81571],{"class":164,"line":471},[162,81564,55215],{"class":168},[162,81566,54480],{"class":54373},[162,81568,54483],{"class":168},[162,81570,54480],{"class":54373},[162,81572,54380],{"class":168},[162,81574,81575,81577,81579],{"class":164,"line":687},[162,81576,55215],{"class":168},[162,81578,3219],{"class":54373},[162,81580,54380],{"class":168},[162,81582,81583,81585],{"class":164,"line":692},[162,81584,9509],{"class":54373},[162,81586,1722],{"class":168},[162,81588,81589,81591,81593,81595],{"class":164,"line":698},[162,81590,57765],{"class":207},[162,81592,1730],{"class":168},[162,81594,312],{"class":207},[162,81596,4433],{"class":168},[162,81598,81599,81601,81603,81605],{"class":164,"line":2955},[162,81600,57776],{"class":207},[162,81602,1730],{"class":168},[162,81604,312],{"class":207},[162,81606,4433],{"class":168},[162,81608,81609,81611,81613,81615],{"class":164,"line":2960},[162,81610,75661],{"class":207},[162,81612,1730],{"class":168},[162,81614,63574],{"class":207},[162,81616,4433],{"class":168},[162,81618,81619],{"class":164,"line":2971},[162,81620,5305],{"class":168},[162,81622,81623],{"class":164,"line":2984},[162,81624,301],{"emptyLinePlaceholder":300},[162,81626,81627,81629],{"class":164,"line":2989},[162,81628,65191],{"class":5082},[162,81630,1722],{"class":168},[162,81632,81633,81635,81637,81640,81642],{"class":164,"line":3011},[162,81634,57841],{"class":207},[162,81636,1730],{"class":168},[162,81638,81639],{"class":207},"990",[162,81641,54564],{"class":172},[162,81643,4433],{"class":168},[162,81645,81646,81648,81650,81652,81654],{"class":164,"line":3022},[162,81647,57776],{"class":207},[162,81649,1730],{"class":168},[162,81651,312],{"class":207},[162,81653,54628],{"class":207},[162,81655,4433],{"class":168},[162,81657,81658,81660,81662,81664],{"class":164,"line":3027},[162,81659,58079],{"class":207},[162,81661,1730],{"class":168},[162,81663,54549],{"class":207},[162,81665,4433],{"class":168},[162,81667,81668,81671,81673,81676],{"class":164,"line":3046},[162,81669,81670],{"class":207},"      flex-wrap",[162,81672,1730],{"class":168},[162,81674,81675],{"class":207},"wrap",[162,81677,4433],{"class":168},[162,81679,81680],{"class":164,"line":3052},[162,81681,5305],{"class":168},[162,81683,81684],{"class":164,"line":3057},[162,81685,301],{"emptyLinePlaceholder":300},[162,81687,81688,81691],{"class":164,"line":3072},[162,81689,81690],{"class":5082},"    .item",[162,81692,1722],{"class":168},[162,81694,81695,81697,81699,81702,81704],{"class":164,"line":3077},[162,81696,57841],{"class":207},[162,81698,1730],{"class":168},[162,81700,81701],{"class":207},"240",[162,81703,54564],{"class":172},[162,81705,4433],{"class":168},[162,81707,81708,81710,81712,81714,81716],{"class":164,"line":3100},[162,81709,65068],{"class":207},[162,81711,1730],{"class":168},[162,81713,1006],{"class":207},[162,81715,54564],{"class":172},[162,81717,4433],{"class":168},[162,81719,81720,81722,81724,81726,81728,81731,81733],{"class":164,"line":3140},[162,81721,57765],{"class":207},[162,81723,1730],{"class":168},[162,81725,1011],{"class":207},[162,81727,54564],{"class":172},[162,81729,81730],{"class":207}," 30",[162,81732,54564],{"class":172},[162,81734,4433],{"class":168},[162,81736,81737,81739,81741,81743,81746,81749,81751],{"class":164,"line":4878},[162,81738,64928],{"class":207},[162,81740,1730],{"class":168},[162,81742,31210],{"class":207},[162,81744,81745],{"class":207}," ease",[162,81747,81748],{"class":207}," .5",[162,81750,3979],{"class":172},[162,81752,4433],{"class":168},[162,81754,81755,81758,81760,81762,81764],{"class":164,"line":4883},[162,81756,81757],{"class":207},"      margin-bottom",[162,81759,1730],{"class":168},[162,81761,1011],{"class":207},[162,81763,54564],{"class":172},[162,81765,4433],{"class":168},[162,81767,81768],{"class":164,"line":4897},[162,81769,5305],{"class":168},[162,81771,81772],{"class":164,"line":4902},[162,81773,301],{"emptyLinePlaceholder":300},[162,81775,81776,81779,81781,81784],{"class":164,"line":5694},[162,81777,81778],{"class":5082},"    .item:nth-child",[162,81780,604],{"class":168},[162,81782,81783],{"class":207},"4n",[162,81785,15537],{"class":168},[162,81787,81788,81790,81792,81794],{"class":164,"line":5708},[162,81789,65068],{"class":207},[162,81791,1730],{"class":168},[162,81793,312],{"class":207},[162,81795,4433],{"class":168},[162,81797,81798],{"class":164,"line":5716},[162,81799,5305],{"class":168},[162,81801,81802],{"class":164,"line":5721},[162,81803,301],{"emptyLinePlaceholder":300},[162,81805,81806,81809],{"class":164,"line":5727},[162,81807,81808],{"class":5082},"    .item:hover",[162,81810,1722],{"class":168},[162,81812,81813,81816,81818,81820,81822,81824,81826,81828,81830,81833,81835,81837,81839,81841,81843,81845,81847,81850],{"class":164,"line":5733},[162,81814,81815],{"class":207},"      box-shadow",[162,81817,1730],{"class":168},[162,81819,312],{"class":207},[162,81821,54564],{"class":172},[162,81823,2717],{"class":207},[162,81825,54564],{"class":172},[162,81827,5266],{"class":207},[162,81829,54564],{"class":172},[162,81831,81832],{"class":207}," rgba",[162,81834,604],{"class":168},[162,81836,312],{"class":207},[162,81838,183],{"class":168},[162,81840,312],{"class":207},[162,81842,183],{"class":168},[162,81844,312],{"class":207},[162,81846,183],{"class":168},[162,81848,81849],{"class":207},".2",[162,81851,5836],{"class":168},[162,81853,81854,81857,81859,81862,81864,81866,81868,81871,81873,81875,81877],{"class":164,"line":5738},[162,81855,81856],{"class":207},"      transform",[162,81858,1730],{"class":168},[162,81860,81861],{"class":207},"translate3d",[162,81863,604],{"class":168},[162,81865,312],{"class":207},[162,81867,183],{"class":168},[162,81869,81870],{"class":207},"-4",[162,81872,54564],{"class":172},[162,81874,183],{"class":168},[162,81876,312],{"class":207},[162,81878,5836],{"class":168},[162,81880,81881,81883,81885,81887],{"class":164,"line":11052},[162,81882,65093],{"class":207},[162,81884,1730],{"class":168},[162,81886,65098],{"class":207},[162,81888,4433],{"class":168},[162,81890,81891],{"class":164,"line":11076},[162,81892,5305],{"class":168},[162,81894,81895],{"class":164,"line":11081},[162,81896,301],{"emptyLinePlaceholder":300},[162,81898,81899,81901,81903],{"class":164,"line":11087},[162,81900,81690],{"class":5082},[162,81902,58684],{"class":54373},[162,81904,1722],{"class":168},[162,81906,81907,81909,81911,81913,81915],{"class":164,"line":11114},[162,81908,57841],{"class":207},[162,81910,1730],{"class":168},[162,81912,3608],{"class":207},[162,81914,2708],{"class":172},[162,81916,4433],{"class":168},[162,81918,81919],{"class":164,"line":11119},[162,81920,5305],{"class":168},[162,81922,81923],{"class":164,"line":11125},[162,81924,301],{"emptyLinePlaceholder":300},[162,81926,81927,81929,81931],{"class":164,"line":11137},[162,81928,81690],{"class":5082},[162,81930,65372],{"class":5082},[162,81932,1722],{"class":168},[162,81934,81935,81937,81939,81941,81943],{"class":164,"line":11149},[162,81936,57992],{"class":207},[162,81938,1730],{"class":168},[162,81940,242],{"class":207},[162,81942,54564],{"class":172},[162,81944,4433],{"class":168},[162,81946,81947,81949,81951,81953,81955],{"class":164,"line":11161},[162,81948,81757],{"class":207},[162,81950,1730],{"class":168},[162,81952,1006],{"class":207},[162,81954,54564],{"class":172},[162,81956,4433],{"class":168},[162,81958,81959,81961,81963,81966],{"class":164,"line":12816},[162,81960,60485],{"class":207},[162,81962,1730],{"class":168},[162,81964,81965],{"class":207},"#666",[162,81967,4433],{"class":168},[162,81969,81970],{"class":164,"line":12841},[162,81971,5305],{"class":168},[162,81973,81974],{"class":164,"line":12864},[162,81975,301],{"emptyLinePlaceholder":300},[162,81977,81978,81980,81983],{"class":164,"line":12888},[162,81979,81690],{"class":5082},[162,81981,81982],{"class":5082}," .price",[162,81984,1722],{"class":168},[162,81986,81987,81989,81991,81993,81995],{"class":164,"line":12893},[162,81988,57992],{"class":207},[162,81990,1730],{"class":168},[162,81992,4032],{"class":207},[162,81994,54564],{"class":172},[162,81996,4433],{"class":168},[162,81998,81999,82001,82003,82006],{"class":164,"line":12898},[162,82000,60485],{"class":207},[162,82002,1730],{"class":168},[162,82004,82005],{"class":207},"firebrick",[162,82007,4433],{"class":168},[162,82009,82010],{"class":164,"line":12903},[162,82011,5305],{"class":168},[162,82013,82014],{"class":164,"line":12912},[162,82015,301],{"emptyLinePlaceholder":300},[162,82017,82018,82020,82023],{"class":164,"line":12917},[162,82019,81690],{"class":5082},[162,82021,82022],{"class":5082}," .price::before",[162,82024,1722],{"class":168},[162,82026,82027,82030,82032,82035],{"class":164,"line":12923},[162,82028,82029],{"class":207},"      content",[162,82031,1730],{"class":168},[162,82033,82034],{"class":179},"'￥'",[162,82036,4433],{"class":168},[162,82038,82039,82041,82043,82045,82047],{"class":164,"line":12944},[162,82040,57992],{"class":207},[162,82042,1730],{"class":168},[162,82044,3838],{"class":207},[162,82046,54564],{"class":172},[162,82048,4433],{"class":168},[162,82050,82051],{"class":164,"line":12950},[162,82052,5305],{"class":168},[162,82054,82055],{"class":164,"line":12964},[162,82056,301],{"emptyLinePlaceholder":300},[162,82058,82059,82062],{"class":164,"line":12970},[162,82060,82061],{"class":5082},"    .filter",[162,82063,1722],{"class":168},[162,82065,82066,82068,82070,82072],{"class":164,"line":12997},[162,82067,58079],{"class":207},[162,82069,1730],{"class":168},[162,82071,54549],{"class":207},[162,82073,4433],{"class":168},[162,82075,82076,82078,82080,82082,82084],{"class":164,"line":13006},[162,82077,57841],{"class":207},[162,82079,1730],{"class":168},[162,82081,81639],{"class":207},[162,82083,54564],{"class":172},[162,82085,4433],{"class":168},[162,82087,82088,82090,82092,82094,82096],{"class":164,"line":13012},[162,82089,57776],{"class":207},[162,82091,1730],{"class":168},[162,82093,312],{"class":207},[162,82095,54628],{"class":207},[162,82097,4433],{"class":168},[162,82099,82100,82102,82104,82106,82108,82110],{"class":164,"line":13020},[162,82101,57765],{"class":207},[162,82103,1730],{"class":168},[162,82105,3941],{"class":207},[162,82107,54564],{"class":172},[162,82109,81730],{"class":207},[162,82111,82112],{"class":172},"px\n",[162,82114,82115],{"class":164,"line":13025},[162,82116,5305],{"class":168},[162,82118,82119],{"class":164,"line":19695},[162,82120,301],{"emptyLinePlaceholder":300},[162,82122,82123,82125,82127],{"class":164,"line":19701},[162,82124,82061],{"class":5082},[162,82126,4538],{"class":54373},[162,82128,1722],{"class":168},[162,82130,82131,82133,82135,82137,82139,82141,82143],{"class":164,"line":19724},[162,82132,57765],{"class":207},[162,82134,1730],{"class":168},[162,82136,1006],{"class":207},[162,82138,54564],{"class":172},[162,82140,12053],{"class":207},[162,82142,54564],{"class":172},[162,82144,4433],{"class":168},[162,82146,82147,82149,82151,82153],{"class":164,"line":19730},[162,82148,64789],{"class":207},[162,82150,1730],{"class":168},[162,82152,64886],{"class":207},[162,82154,4433],{"class":168},[162,82156,82157,82159,82161,82163],{"class":164,"line":19753},[162,82158,60485],{"class":207},[162,82160,1730],{"class":168},[162,82162,81965],{"class":207},[162,82164,4433],{"class":168},[162,82166,82167,82169,82171,82173],{"class":164,"line":19767},[162,82168,67037],{"class":207},[162,82170,1730],{"class":168},[162,82172,57807],{"class":207},[162,82174,4433],{"class":168},[162,82176,82177,82179,82181,82183,82185],{"class":164,"line":19787},[162,82178,64818],{"class":207},[162,82180,1730],{"class":168},[162,82182,1011],{"class":207},[162,82184,54564],{"class":172},[162,82186,4433],{"class":168},[162,82188,82189],{"class":164,"line":19793},[162,82190,5305],{"class":168},[162,82192,82193],{"class":164,"line":19804},[162,82194,301],{"emptyLinePlaceholder":300},[162,82196,82197,82199,82201,82203],{"class":164,"line":19827},[162,82198,82061],{"class":5082},[162,82200,4538],{"class":54373},[162,82202,64968],{"class":5082},[162,82204,1722],{"class":168},[162,82206,82207,82209,82211,82214],{"class":164,"line":19849},[162,82208,57954],{"class":207},[162,82210,1730],{"class":168},[162,82212,82213],{"class":207},"#05943c",[162,82215,4433],{"class":168},[162,82217,82218,82220,82222,82224],{"class":164,"line":19854},[162,82219,60485],{"class":207},[162,82221,1730],{"class":168},[162,82223,63910],{"class":207},[162,82225,4433],{"class":168},[162,82227,82228],{"class":164,"line":19860},[162,82229,5305],{"class":168},[162,82231,82232,82234,82236],{"class":164,"line":19874},[162,82233,55487],{"class":168},[162,82235,3219],{"class":54373},[162,82237,54380],{"class":168},[162,82239,82240,82242,82244],{"class":164,"line":19887},[162,82241,54857],{"class":168},[162,82243,54407],{"class":54373},[162,82245,54380],{"class":168},[162,82247,82248],{"class":164,"line":19892},[162,82249,301],{"emptyLinePlaceholder":300},[162,82251,82252,82254,82256],{"class":164,"line":19906},[162,82253,4187],{"class":168},[162,82255,54872],{"class":54373},[162,82257,54380],{"class":168},[162,82259,82260,82262,82264,82266,82268,82271],{"class":164,"line":19911},[162,82261,55215],{"class":168},[162,82263,54683],{"class":54373},[162,82265,56556],{"class":5082},[162,82267,173],{"class":168},[162,82269,82270],{"class":179},"\"filter\"",[162,82272,54380],{"class":168},[162,82274,82275,82277,82279,82281,82283,82285,82288,82290,82292,82295,82297],{"class":164,"line":19917},[162,82276,54414],{"class":168},[162,82278,3538],{"class":54373},[162,82280,64125],{"class":5082},[162,82282,173],{"class":168},[162,82284,64130],{"class":179},[162,82286,82287],{"class":5082}," data-index",[162,82289,173],{"class":168},[162,82291,6792],{"class":179},[162,82293,82294],{"class":168},">0-100元\u003C\u002F",[162,82296,3538],{"class":54373},[162,82298,54380],{"class":168},[162,82300,82301,82303,82305,82307,82309,82311,82313,82315,82317,82320,82322],{"class":164,"line":19922},[162,82302,54414],{"class":168},[162,82304,3538],{"class":54373},[162,82306,64125],{"class":5082},[162,82308,173],{"class":168},[162,82310,64130],{"class":179},[162,82312,82287],{"class":5082},[162,82314,173],{"class":168},[162,82316,6815],{"class":179},[162,82318,82319],{"class":168},">100-300元\u003C\u002F",[162,82321,3538],{"class":54373},[162,82323,54380],{"class":168},[162,82325,82326,82328,82330,82332,82334,82336,82338,82340,82342,82345,82347],{"class":164,"line":19936},[162,82327,54414],{"class":168},[162,82329,3538],{"class":54373},[162,82331,64125],{"class":5082},[162,82333,173],{"class":168},[162,82335,64130],{"class":179},[162,82337,82287],{"class":5082},[162,82339,173],{"class":168},[162,82341,6828],{"class":179},[162,82343,82344],{"class":168},">300元以上\u003C\u002F",[162,82346,3538],{"class":54373},[162,82348,54380],{"class":168},[162,82350,82351,82353,82355,82357,82359,82361,82364,82366],{"class":164,"line":19941},[162,82352,54414],{"class":168},[162,82354,3538],{"class":54373},[162,82356,64125],{"class":5082},[162,82358,173],{"class":168},[162,82360,64130],{"class":179},[162,82362,82363],{"class":168},">全部区间\u003C\u002F",[162,82365,3538],{"class":54373},[162,82367,54380],{"class":168},[162,82369,82370,82372,82374],{"class":164,"line":19946},[162,82371,55487],{"class":168},[162,82373,54683],{"class":54373},[162,82375,54380],{"class":168},[162,82377,82378,82380,82382,82384,82386,82388],{"class":164,"line":19960},[162,82379,55215],{"class":168},[162,82381,54683],{"class":54373},[162,82383,56556],{"class":5082},[162,82385,173],{"class":168},[162,82387,65676],{"class":179},[162,82389,54380],{"class":168},[162,82391,82392],{"class":164,"line":19972},[162,82393,82394],{"class":361},"    \u003C!-- \u003Cdiv class=\"item\">\n",[162,82396,82397],{"class":164,"line":19977},[162,82398,82399],{"class":361},"      \u003Cimg src=\"\" alt=\"\">\n",[162,82401,82402],{"class":164,"line":19990},[162,82403,82404],{"class":361},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[162,82406,82407],{"class":164,"line":19995},[162,82408,82409],{"class":361},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[162,82411,82412],{"class":164,"line":20000},[162,82413,82414],{"class":361},"    \u003C\u002Fdiv> -->\n",[162,82416,82417,82419,82421],{"class":164,"line":20005},[162,82418,55487],{"class":168},[162,82420,54683],{"class":54373},[162,82422,54380],{"class":168},[162,82424,82425,82427,82429],{"class":164,"line":20018},[162,82426,55215],{"class":168},[162,82428,54885],{"class":54373},[162,82430,54380],{"class":168},[162,82432,82433],{"class":164,"line":20023},[162,82434,82435],{"class":361},"    \u002F\u002F 2. 初始化数据\n",[162,82437,82438,82440,82443,82445],{"class":164,"line":35709},[162,82439,14317],{"class":172},[162,82441,82442],{"class":207}," goodsList",[162,82444,16659],{"class":172},[162,82446,2030],{"class":168},[162,82448,82449],{"class":164,"line":35715},[162,82450,82451],{"class":168},"      {\n",[162,82453,82454,82457,82460],{"class":164,"line":35721},[162,82455,82456],{"class":168},"        id: ",[162,82458,82459],{"class":179},"'4001172'",[162,82461,1735],{"class":168},[162,82463,82464,82467,82470],{"class":164,"line":35727},[162,82465,82466],{"class":168},"        name: ",[162,82468,82469],{"class":179},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[162,82471,1735],{"class":168},[162,82473,82474,82477,82480],{"class":164,"line":35733},[162,82475,82476],{"class":168},"        price: ",[162,82478,82479],{"class":179},"'289.00'",[162,82481,1735],{"class":168},[162,82483,82484,82487,82490],{"class":164,"line":35744},[162,82485,82486],{"class":168},"        picture: ",[162,82488,82489],{"class":179},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[162,82491,1735],{"class":168},[162,82493,82494],{"class":164,"line":35750},[162,82495,80957],{"class":168},[162,82497,82498],{"class":164,"line":35770},[162,82499,82451],{"class":168},[162,82501,82502,82504,82507],{"class":164,"line":35776},[162,82503,82456],{"class":168},[162,82505,82506],{"class":179},"'4001594'",[162,82508,1735],{"class":168},[162,82510,82511,82513,82516],{"class":164,"line":35787},[162,82512,82466],{"class":168},[162,82514,82515],{"class":179},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[162,82517,1735],{"class":168},[162,82519,82520,82522,82525],{"class":164,"line":35793},[162,82521,82476],{"class":168},[162,82523,82524],{"class":179},"'288.00'",[162,82526,1735],{"class":168},[162,82528,82529,82531,82534],{"class":164,"line":35799},[162,82530,82486],{"class":168},[162,82532,82533],{"class":179},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[162,82535,1735],{"class":168},[162,82537,82538],{"class":164,"line":35805},[162,82539,80957],{"class":168},[162,82541,82542],{"class":164,"line":35811},[162,82543,82451],{"class":168},[162,82545,82546,82548,82551],{"class":164,"line":35817},[162,82547,82456],{"class":168},[162,82549,82550],{"class":179},"'4001009'",[162,82552,1735],{"class":168},[162,82554,82555,82557,82560],{"class":164,"line":35823},[162,82556,82466],{"class":168},[162,82558,82559],{"class":179},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[162,82561,1735],{"class":168},[162,82563,82564,82566,82569],{"class":164,"line":35829},[162,82565,82476],{"class":168},[162,82567,82568],{"class":179},"'109.00'",[162,82570,1735],{"class":168},[162,82572,82573,82575,82578],{"class":164,"line":35849},[162,82574,82486],{"class":168},[162,82576,82577],{"class":179},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[162,82579,1735],{"class":168},[162,82581,82582],{"class":164,"line":35855},[162,82583,80957],{"class":168},[162,82585,82586],{"class":164,"line":35871},[162,82587,82451],{"class":168},[162,82589,82590,82592,82595],{"class":164,"line":35877},[162,82591,82456],{"class":168},[162,82593,82594],{"class":179},"'4001874'",[162,82596,1735],{"class":168},[162,82598,82599,82601,82604],{"class":164,"line":35891},[162,82600,82466],{"class":168},[162,82602,82603],{"class":179},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[162,82605,1735],{"class":168},[162,82607,82608,82610,82613],{"class":164,"line":35897},[162,82609,82476],{"class":168},[162,82611,82612],{"class":179},"'488.00'",[162,82614,1735],{"class":168},[162,82616,82617,82619,82622],{"class":164,"line":35912},[162,82618,82486],{"class":168},[162,82620,82621],{"class":179},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[162,82623,1735],{"class":168},[162,82625,82626],{"class":164,"line":35918},[162,82627,80957],{"class":168},[162,82629,82630],{"class":164,"line":35927},[162,82631,82451],{"class":168},[162,82633,82634,82636,82639],{"class":164,"line":35933},[162,82635,82456],{"class":168},[162,82637,82638],{"class":179},"'4001649'",[162,82640,1735],{"class":168},[162,82642,82643,82645,82648],{"class":164,"line":35942},[162,82644,82466],{"class":168},[162,82646,82647],{"class":179},"'大师监制龙泉青瓷茶叶罐'",[162,82649,1735],{"class":168},[162,82651,82652,82654,82657],{"class":164,"line":35948},[162,82653,82476],{"class":168},[162,82655,82656],{"class":179},"'139.00'",[162,82658,1735],{"class":168},[162,82660,82661,82663,82666],{"class":164,"line":35954},[162,82662,82486],{"class":168},[162,82664,82665],{"class":179},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[162,82667,1735],{"class":168},[162,82669,82670],{"class":164,"line":35963},[162,82671,80957],{"class":168},[162,82673,82674],{"class":164,"line":35969},[162,82675,82451],{"class":168},[162,82677,82678,82680,82683],{"class":164,"line":35980},[162,82679,82456],{"class":168},[162,82681,82682],{"class":179},"'3997185'",[162,82684,1735],{"class":168},[162,82686,82687,82689,82692],{"class":164,"line":35986},[162,82688,82466],{"class":168},[162,82690,82691],{"class":179},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[162,82693,1735],{"class":168},[162,82695,82696,82698,82701],{"class":164,"line":36005},[162,82697,82476],{"class":168},[162,82699,82700],{"class":179},"'108.00'",[162,82702,1735],{"class":168},[162,82704,82705,82707,82710],{"class":164,"line":36011},[162,82706,82486],{"class":168},[162,82708,82709],{"class":179},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[162,82711,1735],{"class":168},[162,82713,82714],{"class":164,"line":36022},[162,82715,80957],{"class":168},[162,82717,82718],{"class":164,"line":36028},[162,82719,82451],{"class":168},[162,82721,82722,82724,82727],{"class":164,"line":36048},[162,82723,82456],{"class":168},[162,82725,82726],{"class":179},"'3997403'",[162,82728,1735],{"class":168},[162,82730,82731,82733,82736],{"class":164,"line":36064},[162,82732,82466],{"class":168},[162,82734,82735],{"class":179},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[162,82737,1735],{"class":168},[162,82739,82740,82742,82745],{"class":164,"line":36070},[162,82741,82476],{"class":168},[162,82743,82744],{"class":179},"'100.00'",[162,82746,1735],{"class":168},[162,82748,82749,82751,82754],{"class":164,"line":36084},[162,82750,82486],{"class":168},[162,82752,82753],{"class":179},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[162,82755,1735],{"class":168},[162,82757,82758],{"class":164,"line":36090},[162,82759,80957],{"class":168},[162,82761,82762],{"class":164,"line":36096},[162,82763,82451],{"class":168},[162,82765,82766,82768,82771],{"class":164,"line":36107},[162,82767,82456],{"class":168},[162,82769,82770],{"class":179},"'3998274'",[162,82772,1735],{"class":168},[162,82774,82775,82777,82780],{"class":164,"line":36113},[162,82776,82466],{"class":168},[162,82778,82779],{"class":179},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[162,82781,1735],{"class":168},[162,82783,82784,82786,82788],{"class":164,"line":36119},[162,82785,82476],{"class":168},[162,82787,82656],{"class":179},[162,82789,1735],{"class":168},[162,82791,82792,82794,82797],{"class":164,"line":36129},[162,82793,82486],{"class":168},[162,82795,82796],{"class":179},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[162,82798,1735],{"class":168},[162,82800,82801],{"class":164,"line":36135},[162,82802,80957],{"class":168},[162,82804,82805],{"class":164,"line":36146},[162,82806,56179],{"class":168},[162,82808,82809],{"class":164,"line":36152},[162,82810,301],{"emptyLinePlaceholder":300},[162,82812,82813],{"class":164,"line":36162},[162,82814,82815],{"class":361},"    \u002F\u002F 1.渲染函数\n",[162,82817,82818,82820,82822,82824,82826],{"class":164,"line":36167},[162,82819,73149],{"class":172},[162,82821,73152],{"class":5082},[162,82823,604],{"class":168},[162,82825,6993],{"class":671},[162,82827,15537],{"class":168},[162,82829,82830],{"class":164,"line":36173},[162,82831,82832],{"class":361},"      \u002F\u002F 声明空字符串\n",[162,82834,82835,82838,82841,82843],{"class":164,"line":36222},[162,82836,82837],{"class":172},"      let",[162,82839,82840],{"class":168}," str ",[162,82842,173],{"class":172},[162,82844,73169],{"class":179},[162,82846,82847],{"class":164,"line":36269},[162,82848,73174],{"class":361},[162,82850,82851,82853,82856,82858,82861,82864],{"class":164,"line":36274},[162,82852,61076],{"class":168},[162,82854,82855],{"class":5082},"forEach",[162,82857,604],{"class":168},[162,82859,82860],{"class":671},"item",[162,82862,82863],{"class":172}," =>",[162,82865,1722],{"class":168},[162,82867,82868,82870,82873,82876,82878,82881,82883,82886,82889,82891],{"class":164,"line":36280},[162,82869,64338],{"class":172},[162,82871,82872],{"class":168}," { ",[162,82874,82875],{"class":207},"name",[162,82877,183],{"class":168},[162,82879,82880],{"class":207},"price",[162,82882,183],{"class":168},[162,82884,82885],{"class":207},"picture",[162,82887,82888],{"class":168}," } ",[162,82890,173],{"class":172},[162,82892,82893],{"class":168}," item\n",[162,82895,82896,82899,82901],{"class":164,"line":36299},[162,82897,82898],{"class":168},"        str ",[162,82900,926],{"class":172},[162,82902,73233],{"class":179},[162,82904,82905],{"class":164,"line":36305},[162,82906,82907],{"class":179},"          \u003Cdiv class=\"item\">\n",[162,82909,82910,82913,82915],{"class":164,"line":36324},[162,82911,82912],{"class":179},"            \u003Cimg src=\"${",[162,82914,82885],{"class":168},[162,82916,82917],{"class":179},"}\" alt=\"\">\n",[162,82919,82920,82923,82925],{"class":164,"line":36330},[162,82921,82922],{"class":179},"            \u003Cp class=\"name\">${",[162,82924,82875],{"class":168},[162,82926,82927],{"class":179},"}\u003C\u002Fp>\n",[162,82929,82930,82933,82935],{"class":164,"line":36336},[162,82931,82932],{"class":179},"            \u003Cp class=\"price\">${",[162,82934,82880],{"class":168},[162,82936,82927],{"class":179},[162,82938,82939],{"class":164,"line":36346},[162,82940,82941],{"class":179},"          \u003C\u002Fdiv>\n",[162,82943,82944],{"class":164,"line":36351},[162,82945,82946],{"class":179},"        `\n",[162,82948,82949],{"class":164,"line":36357},[162,82950,67882],{"class":168},[162,82952,82953],{"class":164,"line":36373},[162,82954,82955],{"class":361},"      \u002F\u002F 追加给List\n",[162,82957,82958,82960,82962,82964,82967,82969,82971],{"class":164,"line":36418},[162,82959,58840],{"class":168},[162,82961,57469],{"class":5082},[162,82963,604],{"class":168},[162,82965,82966],{"class":179},"'.list'",[162,82968,77314],{"class":168},[162,82970,173],{"class":172},[162,82972,77050],{"class":168},[162,82974,82975],{"class":164,"line":36424},[162,82976,5305],{"class":168},[162,82978,82979],{"class":164,"line":36430},[162,82980,82981],{"class":361},"    \u002F\u002F 页面一打开就需要渲染\n",[162,82983,82984,82987],{"class":164,"line":36436},[162,82985,82986],{"class":5082},"    render",[162,82988,82989],{"class":168},"(goodsList)\n",[162,82991,82992],{"class":164,"line":36447},[162,82993,82994],{"class":361},"    \u002F\u002F 2.过滤筛选\n",[162,82996,82997,82999,83001,83003,83006,83008,83010,83012,83014,83016,83018,83020],{"class":164,"line":36453},[162,82998,55477],{"class":168},[162,83000,57469],{"class":5082},[162,83002,604],{"class":168},[162,83004,83005],{"class":179},"'.filter'",[162,83007,33910],{"class":168},[162,83009,60882],{"class":5082},[162,83011,604],{"class":168},[162,83013,60887],{"class":179},[162,83015,183],{"class":168},[162,83017,3384],{"class":671},[162,83019,82863],{"class":172},[162,83021,1722],{"class":168},[162,83023,83024],{"class":164,"line":36459},[162,83025,83026],{"class":361},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[162,83028,83029,83031,83033,83036,83038,83040,83042,83044],{"class":164,"line":36465},[162,83030,61297],{"class":172},[162,83032,82872],{"class":168},[162,83034,83035],{"class":207},"tagName",[162,83037,183],{"class":168},[162,83039,34618],{"class":207},[162,83041,82888],{"class":168},[162,83043,173],{"class":172},[162,83045,83046],{"class":168}," e.target\n",[162,83048,83049],{"class":164,"line":36483},[162,83050,83051],{"class":361},"      \u002F\u002F 判断\n",[162,83053,83054,83056,83058,83060,83062],{"class":164,"line":36497},[162,83055,57550],{"class":172},[162,83057,70101],{"class":168},[162,83059,57556],{"class":172},[162,83061,71323],{"class":179},[162,83063,15537],{"class":168},[162,83065,83066],{"class":164,"line":36506},[162,83067,83068],{"class":361},"        \u002F\u002F console.log(11)\n",[162,83070,83071],{"class":164,"line":36515},[162,83072,83073],{"class":361},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[162,83075,83076],{"class":164,"line":36524},[162,83077,83078],{"class":361},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[162,83080,83081,83083,83085,83087],{"class":164,"line":36533},[162,83082,54902],{"class":172},[162,83084,54905],{"class":168},[162,83086,173],{"class":172},[162,83088,83089],{"class":168}," goodsList\n",[162,83091,83092,83094,83097,83099,83102],{"class":164,"line":36539},[162,83093,5614],{"class":172},[162,83095,83096],{"class":168}," (dataset.index ",[162,83098,57556],{"class":172},[162,83100,83101],{"class":179}," '1'",[162,83103,15537],{"class":168},[162,83105,83106,83109,83111,83114,83117,83119,83121,83123,83126,83128,83130,83133,83135,83137,83139],{"class":164,"line":36545},[162,83107,83108],{"class":168},"          arr ",[162,83110,173],{"class":172},[162,83112,83113],{"class":168}," goodsList.",[162,83115,83116],{"class":5082},"filter",[162,83118,604],{"class":168},[162,83120,82860],{"class":671},[162,83122,82863],{"class":172},[162,83124,83125],{"class":168}," item.price ",[162,83127,3038],{"class":172},[162,83129,2717],{"class":207},[162,83131,83132],{"class":172}," &&",[162,83134,83125],{"class":168},[162,83136,4725],{"class":172},[162,83138,8861],{"class":207},[162,83140,434],{"class":168},[162,83142,83143,83146,83148,83150,83152,83154,83157],{"class":164,"line":36553},[162,83144,83145],{"class":168},"        } ",[162,83147,2313],{"class":172},[162,83149,4828],{"class":172},[162,83151,83096],{"class":168},[162,83153,57556],{"class":172},[162,83155,83156],{"class":179}," '2'",[162,83158,15537],{"class":168},[162,83160,83161,83163,83165,83167,83169,83171,83173,83175,83177,83179,83181,83183,83185,83187,83190],{"class":164,"line":36558},[162,83162,83108],{"class":168},[162,83164,173],{"class":172},[162,83166,83113],{"class":168},[162,83168,83116],{"class":5082},[162,83170,604],{"class":168},[162,83172,82860],{"class":671},[162,83174,82863],{"class":172},[162,83176,83125],{"class":168},[162,83178,3038],{"class":172},[162,83180,8861],{"class":207},[162,83182,83132],{"class":172},[162,83184,83125],{"class":168},[162,83186,4725],{"class":172},[162,83188,83189],{"class":207}," 300",[162,83191,434],{"class":168},[162,83193,83194,83196,83198,83200,83202,83204,83207],{"class":164,"line":36564},[162,83195,83145],{"class":168},[162,83197,2313],{"class":172},[162,83199,4828],{"class":172},[162,83201,83096],{"class":168},[162,83203,57556],{"class":172},[162,83205,83206],{"class":179}," '3'",[162,83208,15537],{"class":168},[162,83210,83211,83213,83215,83217,83219,83221,83223,83225,83227,83229,83231],{"class":164,"line":36575},[162,83212,83108],{"class":168},[162,83214,173],{"class":172},[162,83216,83113],{"class":168},[162,83218,83116],{"class":5082},[162,83220,604],{"class":168},[162,83222,82860],{"class":671},[162,83224,82863],{"class":172},[162,83226,83125],{"class":168},[162,83228,3038],{"class":172},[162,83230,83189],{"class":207},[162,83232,434],{"class":168},[162,83234,83235],{"class":164,"line":36581},[162,83236,5646],{"class":168},[162,83238,83239],{"class":164,"line":36601},[162,83240,83241],{"class":361},"        \u002F\u002F 渲染函数\n",[162,83243,83244,83246],{"class":164,"line":36607},[162,83245,73473],{"class":5082},[162,83247,55482],{"class":168},[162,83249,83250],{"class":164,"line":36613},[162,83251,55468],{"class":168},[162,83253,83254],{"class":164,"line":36619},[162,83255,301],{"emptyLinePlaceholder":300},[162,83257,83258],{"class":164,"line":36636},[162,83259,36536],{"class":168},[162,83261,83262,83264,83266],{"class":164,"line":36642},[162,83263,55487],{"class":168},[162,83265,54885],{"class":54373},[162,83267,54380],{"class":168},[162,83269,83270,83272,83274],{"class":164,"line":36648},[162,83271,54857],{"class":168},[162,83273,54872],{"class":54373},[162,83275,54380],{"class":168},[162,83277,83278],{"class":164,"line":36654},[162,83279,301],{"emptyLinePlaceholder":300},[162,83281,83282,83284,83286],{"class":164,"line":36660},[162,83283,54857],{"class":168},[162,83285,53708],{"class":54373},[162,83287,54380],{"class":168},[14,83289,83291],{"id":83290},"_410-深入了解对象","4.10 深入了解对象",[3284,83293,83295],{"id":83294},"_4101-创建对象","4.10.1 创建对象",[19,83297,83298],{},[4602,83299],{"alt":158,"src":83300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,83302,83303],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[3284,83305,83307],{"id":83306},"_4102-构造函数","4.10.2 构造函数",[19,83309,83310,83313],{},[3453,83311,83312],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,83315,83316,83319],{},[3453,83317,83318],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[153,83321,83323],{"className":53706,"code":83322,"language":53708,"meta":158,"style":158},"\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",[71,83324,83325,83333,83338,83359,83372,83384,83396,83400,83405,83432,83437,83464],{"__ignoreMap":158},[162,83326,83327,83329,83331],{"class":164,"line":165},[162,83328,4187],{"class":168},[162,83330,54885],{"class":54373},[162,83332,54380],{"class":168},[162,83334,83335],{"class":164,"line":197},[162,83336,83337],{"class":361},"\u002F\u002F例：\n",[162,83339,83340,83342,83345,83347,83349,83351,83353,83355,83357],{"class":164,"line":228},[162,83341,57519],{"class":172},[162,83343,83344],{"class":5082}," Pig",[162,83346,604],{"class":168},[162,83348,82875],{"class":671},[162,83350,3670],{"class":168},[162,83352,73286],{"class":671},[162,83354,3670],{"class":168},[162,83356,73303],{"class":671},[162,83358,15537],{"class":168},[162,83360,83361,83364,83367,83369],{"class":164,"line":252},[162,83362,83363],{"class":207},"    this",[162,83365,83366],{"class":168},".name",[162,83368,173],{"class":172},[162,83370,83371],{"class":168},"name\n",[162,83373,83374,83376,83379,83381],{"class":164,"line":328},[162,83375,83363],{"class":207},[162,83377,83378],{"class":168},".age",[162,83380,173],{"class":172},[162,83382,83383],{"class":168},"age\n",[162,83385,83386,83388,83391,83393],{"class":164,"line":466},[162,83387,83363],{"class":207},[162,83389,83390],{"class":168},".gender",[162,83392,173],{"class":172},[162,83394,83395],{"class":168},"gender    \n",[162,83397,83398],{"class":164,"line":471},[162,83399,1498],{"class":168},[162,83401,83402],{"class":164,"line":687},[162,83403,83404],{"class":361},"\u002F\u002F创建佩奇对象\n",[162,83406,83407,83409,83412,83414,83416,83418,83421,83423,83425,83427,83430],{"class":164,"line":692},[162,83408,9898],{"class":172},[162,83410,83411],{"class":207}," Peppa",[162,83413,14813],{"class":172},[162,83415,83344],{"class":5082},[162,83417,604],{"class":168},[162,83419,83420],{"class":179},"'佩奇'",[162,83422,3670],{"class":168},[162,83424,1314],{"class":207},[162,83426,3670],{"class":168},[162,83428,83429],{"class":179},"'女'",[162,83431,434],{"class":168},[162,83433,83434],{"class":164,"line":698},[162,83435,83436],{"class":361},"\u002F\u002F创建乔治对象\n",[162,83438,83439,83441,83444,83446,83448,83450,83453,83455,83457,83459,83462],{"class":164,"line":2955},[162,83440,9898],{"class":172},[162,83442,83443],{"class":207}," George",[162,83445,14813],{"class":172},[162,83447,83344],{"class":5082},[162,83449,604],{"class":168},[162,83451,83452],{"class":179},"'乔治'",[162,83454,3670],{"class":168},[162,83456,218],{"class":207},[162,83458,3670],{"class":168},[162,83460,83461],{"class":179},"'男'",[162,83463,434],{"class":168},[162,83465,83466,83468,83470],{"class":164,"line":2960},[162,83467,54857],{"class":168},[162,83469,54885],{"class":54373},[162,83471,54380],{"class":168},[19,83473,83474],{},[4602,83475],{"alt":158,"src":83476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,83478,83479],{},[4602,83480],{"alt":158,"src":83481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,83483,83484],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,83486,83487],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,83489,83490],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,83492,83493],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,83495,83496],{},"这里用等号是因为：对象.属性=值",[19,83498,83499],{},"①利用对象字面量创建对象",[19,83501,83502],{},"const o={",[19,83504,83505],{},"name:'pink'",[19,83507,83508],{},"} ②利用new Object创建对象",[19,83510,83511],{},"const o=new Object({name:'pink'})",[19,83513,83514],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,83516,83517],{},"构造函数创建对象的执行过程：",[19,83519,83520],{},[4602,83521],{"alt":158,"src":83522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[3284,83524,83526],{"id":83525},"_4103-实例成员","4.10.3 实例成员",[19,83528,83529],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[1452,83531,83532,83535,83538],{},[1455,83533,83534],{},"实例对象的属性和方法即为实例成员",[1455,83536,83537],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[1455,83539,83540],{},"构造函数创建的实例对象彼此独立互不影响",[3284,83542,83544],{"id":83543},"_4104-静态成员","4.10.4 静态成员",[19,83546,83547],{},[4602,83548],{"alt":158,"src":83549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,83551,83552],{},"静态成员有Date.now() Math.PI Math.random()",[19,83554,83555],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,83557,83558],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,83560,83561],{},"function Pig(name) n {",[19,83563,83564],{},"this.name=name",[19,83566,976],{},[19,83568,83569],{},"Pig.eyes=2",[19,83571,83572],{},"Pig.sayHai=function () { console.log(this) }",[19,83574,83575],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,83577,83578],{},"console.log(Pig.eyes) \u002F\u002F2",[19,83580,14428],{},[1452,83582,83583,83586,83589,83592,83595],{},[1455,83584,83585],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[1455,83587,83588],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[1455,83590,83591],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[1455,83593,83594],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[1455,83596,83597],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,83599,83600],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[3284,83602,83604],{"id":83603},"_4105-内置构造函数","4.10.5 内置构造函数",[19,83606,83607],{},"内置构造函数包含：",[19,83609,83610],{},[4602,83611],{"alt":158,"src":83612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,83614,83615],{},[4602,83616],{"alt":158,"src":83617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,83619,83620],{},"这些基本数据类型，js对他们进行了包装",[54885,83622,83623],{},"\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",[25089,83625,83627],{"id":83626},"_41051-object","4.10.5.1 Object",[19,83629,83630],{},"Object 是内置的构造函数，用于创建普通对象",[19,83632,83633],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[153,83635,83637],{"className":53706,"code":83636,"language":53708,"meta":158,"style":158},"const user=new Object({name:'小明',age:15})\n",[71,83638,83639],{"__ignoreMap":158},[162,83640,83641],{"class":164,"line":165},[162,83642,83636],{"class":168},[19,83644,83645],{},"三个常用的静态方法：",[26001,83647,83649],{"id":83648},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,83651,83652],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,83654,83655],{},[4602,83656],{"alt":158,"src":83657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,83659,83660],{},[4602,83661],{"alt":158,"src":83662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[153,83664,83666],{"className":56137,"code":83665,"language":56139,"meta":158,"style":158},"\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",[71,83667,83668,83676,83684,83689,83694,83699,83704,83709,83714,83722],{"__ignoreMap":158},[162,83669,83670,83672,83674],{"class":164,"line":165},[162,83671,4187],{"class":168},[162,83673,54872],{"class":54373},[162,83675,54380],{"class":168},[162,83677,83678,83680,83682],{"class":164,"line":197},[162,83679,55215],{"class":168},[162,83681,54885],{"class":54373},[162,83683,54380],{"class":168},[162,83685,83686],{"class":164,"line":228},[162,83687,83688],{"class":168},"    const o = { name: 'pink', age: 6 }\n",[162,83690,83691],{"class":164,"line":252},[162,83692,83693],{"class":168},"    \u002F\u002F 获得所有属性名\n",[162,83695,83696],{"class":164,"line":328},[162,83697,83698],{"class":168},"    const arr = Object.keys(o)\n",[162,83700,83701],{"class":164,"line":466},[162,83702,83703],{"class":168},"    console.log(arr)\n",[162,83705,83706],{"class":164,"line":471},[162,83707,83708],{"class":168},"    \u002F\u002F 获得所有属性值\n",[162,83710,83711],{"class":164,"line":687},[162,83712,83713],{"class":168},"    console.log(Object.values(o))\n",[162,83715,83716,83718,83720],{"class":164,"line":692},[162,83717,55487],{"class":168},[162,83719,54885],{"class":54373},[162,83721,54380],{"class":168},[162,83723,83724,83726,83728],{"class":164,"line":698},[162,83725,54857],{"class":168},[162,83727,54872],{"class":54373},[162,83729,54380],{"class":168},[26001,83731,83733],{"id":83732},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,83735,83736],{},"Object.assign(oo,o)",[19,83738,83739],{},"后的东西添加给前 是追加",[19,83741,83742],{},[4602,83743],{"alt":158,"src":83744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,83746,83747],{},[4602,83748],{"alt":158,"src":83749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[153,83751,83753],{"className":56137,"code":83752,"language":56139,"meta":158,"style":158},"\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",[71,83754,83755,83763,83771,83775,83779,83783,83787,83791,83795,83800,83805,83810,83815,83820,83828],{"__ignoreMap":158},[162,83756,83757,83759,83761],{"class":164,"line":165},[162,83758,4187],{"class":168},[162,83760,54872],{"class":54373},[162,83762,54380],{"class":168},[162,83764,83765,83767,83769],{"class":164,"line":197},[162,83766,55215],{"class":168},[162,83768,54885],{"class":54373},[162,83770,54380],{"class":168},[162,83772,83773],{"class":164,"line":228},[162,83774,83688],{"class":168},[162,83776,83777],{"class":164,"line":252},[162,83778,83693],{"class":168},[162,83780,83781],{"class":164,"line":328},[162,83782,83698],{"class":168},[162,83784,83785],{"class":164,"line":466},[162,83786,83703],{"class":168},[162,83788,83789],{"class":164,"line":471},[162,83790,83708],{"class":168},[162,83792,83793],{"class":164,"line":687},[162,83794,83713],{"class":168},[162,83796,83797],{"class":164,"line":692},[162,83798,83799],{"class":168},"    const oo = {}\n",[162,83801,83802],{"class":164,"line":698},[162,83803,83804],{"class":168},"    Object.assign(oo, o)\n",[162,83806,83807],{"class":164,"line":2955},[162,83808,83809],{"class":168},"    console.log(oo)\n",[162,83811,83812],{"class":164,"line":2960},[162,83813,83814],{"class":168},"    Object.assign(o, { gender: '女' })\n",[162,83816,83817],{"class":164,"line":2971},[162,83818,83819],{"class":168},"    console.log(o)\n",[162,83821,83822,83824,83826],{"class":164,"line":2984},[162,83823,55487],{"class":168},[162,83825,54885],{"class":54373},[162,83827,54380],{"class":168},[162,83829,83830,83832,83834],{"class":164,"line":2989},[162,83831,54857],{"class":168},[162,83833,54872],{"class":54373},[162,83835,54380],{"class":168},[19,83837,83838],{},[4602,83839],{"alt":158,"src":83840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[25089,83842,83844],{"id":83843},"_41052-array","4.10.5.2 Array",[19,83846,83847],{},"Array 是内置的构造函数，用于创建数组",[19,83849,83850],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[153,83852,83854],{"className":53706,"code":83853,"language":53708,"meta":158,"style":158},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[71,83855,83856,83861],{"__ignoreMap":158},[162,83857,83858],{"class":164,"line":165},[162,83859,83860],{"class":168},"const arr=new Array(3,5)\n",[162,83862,83863],{"class":164,"line":197},[162,83864,83865],{"class":168},"console.log(arr)  \u002F\u002F[3,5]\n",[19,83867,83868],{},"Array的实例方法，这个方法是实例成员",[19,83870,83871],{},[4602,83872],{"alt":158,"src":83873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[26001,83875,83877],{"id":83876},"_410521-reduce","4.10.5.2.1 reduce",[19,83879,83880],{},[4602,83881],{"alt":158,"src":83882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[153,83884,83886],{"className":56137,"code":83885,"language":56139,"meta":158,"style":158},"\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",[71,83887,83888,83896,83904,83909,83914,83919,83924,83928,83933,83938,83943,83947,83952,83957,83961,83966,83971,83976,83984],{"__ignoreMap":158},[162,83889,83890,83892,83894],{"class":164,"line":165},[162,83891,4187],{"class":168},[162,83893,54872],{"class":54373},[162,83895,54380],{"class":168},[162,83897,83898,83900,83902],{"class":164,"line":197},[162,83899,55215],{"class":168},[162,83901,54885],{"class":54373},[162,83903,54380],{"class":168},[162,83905,83906],{"class":164,"line":228},[162,83907,83908],{"class":168},"    const arr = [1, 5, 8]\n",[162,83910,83911],{"class":164,"line":252},[162,83912,83913],{"class":168},"    \u002F\u002F 1.没有初始值\n",[162,83915,83916],{"class":164,"line":328},[162,83917,83918],{"class":168},"    const total = arr.reduce(function (prev, current) {\n",[162,83920,83921],{"class":164,"line":466},[162,83922,83923],{"class":168},"      return prev + current\n",[162,83925,83926],{"class":164,"line":471},[162,83927,36536],{"class":168},[162,83929,83930],{"class":164,"line":687},[162,83931,83932],{"class":168},"    console.log(total)   \u002F\u002F14\n",[162,83934,83935],{"class":164,"line":692},[162,83936,83937],{"class":168},"    \u002F\u002F 2.有初始值\n",[162,83939,83940],{"class":164,"line":698},[162,83941,83942],{"class":168},"    const total1 = arr.reduce(function (prev, current) {\n",[162,83944,83945],{"class":164,"line":2955},[162,83946,83923],{"class":168},[162,83948,83949],{"class":164,"line":2960},[162,83950,83951],{"class":168},"    }, 10)\n",[162,83953,83954],{"class":164,"line":2971},[162,83955,83956],{"class":168},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[162,83958,83959],{"class":164,"line":2984},[162,83960,301],{"emptyLinePlaceholder":300},[162,83962,83963],{"class":164,"line":2989},[162,83964,83965],{"class":168},"    \u002F\u002F 3.箭头函数写法\n",[162,83967,83968],{"class":164,"line":3011},[162,83969,83970],{"class":168},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[162,83972,83973],{"class":164,"line":3022},[162,83974,83975],{"class":168},"    console.log(total2)   \u002F\u002F24\n",[162,83977,83978,83980,83982],{"class":164,"line":3027},[162,83979,55487],{"class":168},[162,83981,54885],{"class":54373},[162,83983,54380],{"class":168},[162,83985,83986,83988,83990],{"class":164,"line":3046},[162,83987,54857],{"class":168},[162,83989,54872],{"class":54373},[162,83991,54380],{"class":168},[19,83993,83994],{},"执行过程：",[1452,83996,83997,84000,84003],{},[1455,83998,83999],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[1455,84001,84002],{},"每一次循环，把返回值给作为下一次循环的上一次值",[1455,84004,84005],{},"如果有起始值，则起始值作为上一次值",[153,84007,84009],{"className":56137,"code":84008,"language":56139,"meta":158,"style":158},"\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",[71,84010,84011,84019,84027,84031,84035,84039,84043,84047,84051,84056,84061,84066,84071,84076,84080,84084,84088,84092,84096,84100,84105,84109,84114,84118,84123,84128,84132,84136,84140,84148],{"__ignoreMap":158},[162,84012,84013,84015,84017],{"class":164,"line":165},[162,84014,4187],{"class":168},[162,84016,54872],{"class":54373},[162,84018,54380],{"class":168},[162,84020,84021,84023,84025],{"class":164,"line":197},[162,84022,55215],{"class":168},[162,84024,54885],{"class":54373},[162,84026,54380],{"class":168},[162,84028,84029],{"class":164,"line":228},[162,84030,83908],{"class":168},[162,84032,84033],{"class":164,"line":252},[162,84034,83913],{"class":168},[162,84036,84037],{"class":164,"line":328},[162,84038,83918],{"class":168},[162,84040,84041],{"class":164,"line":466},[162,84042,83923],{"class":168},[162,84044,84045],{"class":164,"line":471},[162,84046,36536],{"class":168},[162,84048,84049],{"class":164,"line":687},[162,84050,83932],{"class":168},[162,84052,84053],{"class":164,"line":692},[162,84054,84055],{"class":168},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[162,84057,84058],{"class":164,"line":698},[162,84059,84060],{"class":168},"    \u002F\u002F     1              5                    6\n",[162,84062,84063],{"class":164,"line":2955},[162,84064,84065],{"class":168},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[162,84067,84068],{"class":164,"line":2960},[162,84069,84070],{"class":168},"    \u002F\u002F     6              8                    14\n",[162,84072,84073],{"class":164,"line":2971},[162,84074,84075],{"class":168},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[162,84077,84078],{"class":164,"line":2984},[162,84079,83937],{"class":168},[162,84081,84082],{"class":164,"line":2989},[162,84083,83942],{"class":168},[162,84085,84086],{"class":164,"line":3011},[162,84087,83923],{"class":168},[162,84089,84090],{"class":164,"line":3022},[162,84091,83951],{"class":168},[162,84093,84094],{"class":164,"line":3027},[162,84095,83956],{"class":168},[162,84097,84098],{"class":164,"line":3046},[162,84099,84055],{"class":168},[162,84101,84102],{"class":164,"line":3052},[162,84103,84104],{"class":168},"    \u002F\u002F     10             1                     11\n",[162,84106,84107],{"class":164,"line":3057},[162,84108,84065],{"class":168},[162,84110,84111],{"class":164,"line":3072},[162,84112,84113],{"class":168},"    \u002F\u002F     11             5                    16\n",[162,84115,84116],{"class":164,"line":3077},[162,84117,84065],{"class":168},[162,84119,84120],{"class":164,"line":3100},[162,84121,84122],{"class":168},"    \u002F\u002F     16             8                    24\n",[162,84124,84125],{"class":164,"line":3140},[162,84126,84127],{"class":168},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[162,84129,84130],{"class":164,"line":4878},[162,84131,83965],{"class":168},[162,84133,84134],{"class":164,"line":4883},[162,84135,83970],{"class":168},[162,84137,84138],{"class":164,"line":4897},[162,84139,83975],{"class":168},[162,84141,84142,84144,84146],{"class":164,"line":4902},[162,84143,55487],{"class":168},[162,84145,54885],{"class":54373},[162,84147,54380],{"class":168},[162,84149,84150,84152,84154],{"class":164,"line":5694},[162,84151,54857],{"class":168},[162,84153,54872],{"class":54373},[162,84155,54380],{"class":168},[26001,84157,84159],{"id":84158},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,84161,84162],{},[4602,84163],{"alt":158,"src":84164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[153,84166,84168],{"className":56137,"code":84167,"language":56139,"meta":158,"style":158},"\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",[71,84169,84170,84178,84186,84191,84196,84201,84206,84210,84215,84220,84225,84230,84235,84240,84244,84249,84253,84258,84266],{"__ignoreMap":158},[162,84171,84172,84174,84176],{"class":164,"line":165},[162,84173,4187],{"class":168},[162,84175,54872],{"class":54373},[162,84177,54380],{"class":168},[162,84179,84180,84182,84184],{"class":164,"line":197},[162,84181,55215],{"class":168},[162,84183,54885],{"class":54373},[162,84185,54380],{"class":168},[162,84187,84188],{"class":164,"line":228},[162,84189,84190],{"class":168},"    const arr = [\n",[162,84192,84193],{"class":164,"line":252},[162,84194,84195],{"class":168},"      { name: '张三', salary: 10000 },\n",[162,84197,84198],{"class":164,"line":328},[162,84199,84200],{"class":168},"      { name: '李四', salary: 10000 },\n",[162,84202,84203],{"class":164,"line":466},[162,84204,84205],{"class":168},"      { name: '王五', salary: 10000 }\n",[162,84207,84208],{"class":164,"line":471},[162,84209,56179],{"class":168},[162,84211,84212],{"class":164,"line":687},[162,84213,84214],{"class":168},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[162,84216,84217],{"class":164,"line":692},[162,84218,84219],{"class":168},"    \u002F\u002F prev是累计值\n",[162,84221,84222],{"class":164,"line":698},[162,84223,84224],{"class":168},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[162,84226,84227],{"class":164,"line":2955},[162,84228,84229],{"class":168},"    console.log(total)\n",[162,84231,84232],{"class":164,"line":2960},[162,84233,84234],{"class":168},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[162,84236,84237],{"class":164,"line":2971},[162,84238,84239],{"class":168},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[162,84241,84242],{"class":164,"line":2984},[162,84243,84234],{"class":168},[162,84245,84246],{"class":164,"line":2989},[162,84247,84248],{"class":168},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[162,84250,84251],{"class":164,"line":3011},[162,84252,84234],{"class":168},[162,84254,84255],{"class":164,"line":3022},[162,84256,84257],{"class":168},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[162,84259,84260,84262,84264],{"class":164,"line":3027},[162,84261,55487],{"class":168},[162,84263,54885],{"class":54373},[162,84265,54380],{"class":168},[162,84267,84268,84270,84272],{"class":164,"line":3046},[162,84269,54857],{"class":168},[162,84271,54872],{"class":54373},[162,84273,54380],{"class":168},[26001,84275,84277],{"id":84276},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,84279,84280],{},[4602,84281],{"alt":158,"src":84282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,84284,84285],{},[4602,84286],{"alt":158,"src":84287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[1452,84289,84290],{},[1455,84291,84292],{},"find()",[19,84294,84295],{},"循环查找，找到第一个就ok",[19,84297,84298],{},[3538,84299,84302],{"href":84300,"rel":84301},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[26956],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[153,84304,84306],{"className":53706,"code":84305,"language":53708,"meta":158,"style":158},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[71,84307,84308,84313,84318],{"__ignoreMap":158},[162,84309,84310],{"class":164,"line":165},[162,84311,84312],{"class":168},"const array1 = [5, 12, 8, 130, 44]\n",[162,84314,84315],{"class":164,"line":197},[162,84316,84317],{"class":168},"const found = array1.find((element) => element > 10)\n",[162,84319,84320],{"class":164,"line":228},[162,84321,84322],{"class":168},"console.log(found)  \u002F\u002F12\n",[19,84324,84325,84327,84328,84333,84334,84337,84338,84340,84341,84346,84347,84349,84350,84352,84353,84355,84356],{},[71,84326,84292],{}," 方法是一个",[3538,84329,84332],{"href":84330,"rel":84331},"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",[26956],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[71,84335,84336],{},"callbackFn"," 函数，直到 ",[71,84339,84336],{}," 返回一个",[3538,84342,84345],{"href":84343,"rel":84344},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[26956],"真值","。然后 ",[71,84348,84292],{}," 返回该元素并停止迭代数组。如果 ",[71,84351,84336],{}," 从未返回真值，则 ",[71,84354,84292],{}," 返回 ",[71,84357,84358],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[153,84360,84362],{"className":56137,"code":84361,"language":56139,"meta":158,"style":158},"\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",[71,84363,84364,84372,84380,84385,84390,84395,84399,84404,84409,84413,84418,84423,84427,84431,84436,84441,84445,84449,84454,84459,84464,84469,84474,84478,84483,84488,84493,84498,84502,84507,84515],{"__ignoreMap":158},[162,84365,84366,84368,84370],{"class":164,"line":165},[162,84367,4187],{"class":168},[162,84369,54872],{"class":54373},[162,84371,54380],{"class":168},[162,84373,84374,84376,84378],{"class":164,"line":197},[162,84375,55215],{"class":168},[162,84377,54885],{"class":54373},[162,84379,54380],{"class":168},[162,84381,84382],{"class":164,"line":228},[162,84383,84384],{"class":168},"    const arr = ['red', 'blue', 'green']\n",[162,84386,84387],{"class":164,"line":252},[162,84388,84389],{"class":168},"    const found = arr.find(item => item === 'pink')\n",[162,84391,84392],{"class":164,"line":328},[162,84393,84394],{"class":168},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[162,84396,84397],{"class":164,"line":466},[162,84398,301],{"emptyLinePlaceholder":300},[162,84400,84401],{"class":164,"line":471},[162,84402,84403],{"class":168},"    \u002F\u002F 使用场景，用于查找数据\n",[162,84405,84406],{"class":164,"line":687},[162,84407,84408],{"class":168},"    const arr1 = [\n",[162,84410,84411],{"class":164,"line":692},[162,84412,82451],{"class":168},[162,84414,84415],{"class":164,"line":698},[162,84416,84417],{"class":168},"        name: '小米',\n",[162,84419,84420],{"class":164,"line":2955},[162,84421,84422],{"class":168},"        price: 1999\n",[162,84424,84425],{"class":164,"line":2960},[162,84426,80957],{"class":168},[162,84428,84429],{"class":164,"line":2971},[162,84430,82451],{"class":168},[162,84432,84433],{"class":164,"line":2984},[162,84434,84435],{"class":168},"        name: '华为',\n",[162,84437,84438],{"class":164,"line":2989},[162,84439,84440],{"class":168},"        price: 3999\n",[162,84442,84443],{"class":164,"line":3011},[162,84444,55468],{"class":168},[162,84446,84447],{"class":164,"line":3022},[162,84448,56179],{"class":168},[162,84450,84451],{"class":164,"line":3027},[162,84452,84453],{"class":168},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[162,84455,84456],{"class":164,"line":3046},[162,84457,84458],{"class":168},"    \u002F\u002F const found1 = arr1.find(item => {\n",[162,84460,84461],{"class":164,"line":3052},[162,84462,84463],{"class":168},"    \u002F\u002F   if (item.name === '小米') {\n",[162,84465,84466],{"class":164,"line":3057},[162,84467,84468],{"class":168},"    \u002F\u002F     return item\n",[162,84470,84471],{"class":164,"line":3072},[162,84472,84473],{"class":168},"    \u002F\u002F   }\n",[162,84475,84476],{"class":164,"line":3077},[162,84477,66357],{"class":168},[162,84479,84480],{"class":164,"line":3100},[162,84481,84482],{"class":168},"    \u002F\u002F 另一种写法\n",[162,84484,84485],{"class":164,"line":3140},[162,84486,84487],{"class":168},"    const found1 = arr1.find(item => {\n",[162,84489,84490],{"class":164,"line":4878},[162,84491,84492],{"class":168},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[162,84494,84495],{"class":164,"line":4883},[162,84496,84497],{"class":168},"      return item.name = '小米'\n",[162,84499,84500],{"class":164,"line":4897},[162,84501,36536],{"class":168},[162,84503,84504],{"class":164,"line":4902},[162,84505,84506],{"class":168},"    console.log(found1)\n",[162,84508,84509,84511,84513],{"class":164,"line":5694},[162,84510,55487],{"class":168},[162,84512,54885],{"class":54373},[162,84514,54380],{"class":168},[162,84516,84517,84519,84521],{"class":164,"line":5708},[162,84518,54857],{"class":168},[162,84520,54872],{"class":54373},[162,84522,54380],{"class":168},[19,84524,84525],{},[4602,84526],{"alt":158,"src":84527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,84529,84530],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[1452,84532,84533],{"start":197},[1455,84534,84535],{},"every()返回的是布尔值",[19,84537,84538],{},[3538,84539,84542],{"href":84540,"rel":84541},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[26956],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,84544,84545],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,84547,84548],{},"some是只有有一个就没问题",[19,84550,84551],{},"every是必须全是才行",[153,84553,84557],{"className":84554,"code":84555,"language":84556,"meta":158,"style":158},"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",[71,84558,84559,84575,84589,84593,84602],{"__ignoreMap":158},[162,84560,84561,84563,84566,84568,84570,84573],{"class":164,"line":165},[162,84562,57519],{"class":172},[162,84564,84565],{"class":168}," isBigEnough(element, ",[162,84567,77123],{"class":172},[162,84569,183],{"class":168},[162,84571,84572],{"class":172},"array",[162,84574,15537],{"class":168},[162,84576,84577,84580,84583,84585,84587],{"class":164,"line":197},[162,84578,84579],{"class":172},"  return",[162,84581,84582],{"class":168}," element ",[162,84584,3038],{"class":172},[162,84586,5156],{"class":207},[162,84588,4433],{"class":168},[162,84590,84591],{"class":164,"line":228},[162,84592,1498],{"class":168},[162,84594,84595,84598,84600],{"class":164,"line":252},[162,84596,84597],{"class":168},"[12, 5, 8, 130, 44].every(isBigEnough); ",[162,84599,36404],{"class":172},[162,84601,57586],{"class":168},[162,84603,84604,84607,84609],{"class":164,"line":328},[162,84605,84606],{"class":168},"[12, 54, 18, 130, 44].every(isBigEnough); ",[162,84608,36404],{"class":172},[162,84610,61009],{"class":168},[153,84612,84614],{"className":56137,"code":84613,"language":56139,"meta":158,"style":158},"\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",[71,84615,84616,84624,84632,84637,84641,84646,84651,84659],{"__ignoreMap":158},[162,84617,84618,84620,84622],{"class":164,"line":165},[162,84619,4187],{"class":168},[162,84621,54872],{"class":54373},[162,84623,54380],{"class":168},[162,84625,84626,84628,84630],{"class":164,"line":197},[162,84627,55215],{"class":168},[162,84629,54885],{"class":54373},[162,84631,54380],{"class":168},[162,84633,84634],{"class":164,"line":228},[162,84635,84636],{"class":168},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[162,84638,84639],{"class":164,"line":252},[162,84640,81387],{"class":168},[162,84642,84643],{"class":164,"line":328},[162,84644,84645],{"class":168},"    const flag = arr.every(item => item >= 10)\n",[162,84647,84648],{"class":164,"line":466},[162,84649,84650],{"class":168},"    console.log(flag)    \u002F\u002Ftrue\n",[162,84652,84653,84655,84657],{"class":164,"line":471},[162,84654,55487],{"class":168},[162,84656,54885],{"class":54373},[162,84658,54380],{"class":168},[162,84660,84661,84663,84665],{"class":164,"line":687},[162,84662,54857],{"class":168},[162,84664,54872],{"class":54373},[162,84666,54380],{"class":168},[153,84668,84670],{"className":56137,"code":84669,"language":56139,"meta":158,"style":158},"\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",[71,84671,84672,84680,84688,84692,84697,84702,84707,84715],{"__ignoreMap":158},[162,84673,84674,84676,84678],{"class":164,"line":165},[162,84675,4187],{"class":168},[162,84677,54872],{"class":54373},[162,84679,54380],{"class":168},[162,84681,84682,84684,84686],{"class":164,"line":197},[162,84683,55215],{"class":168},[162,84685,54885],{"class":54373},[162,84687,54380],{"class":168},[162,84689,84690],{"class":164,"line":228},[162,84691,84636],{"class":168},[162,84693,84694],{"class":164,"line":252},[162,84695,84696],{"class":168},"    const arr = [10, 0, 5]\n",[162,84698,84699],{"class":164,"line":328},[162,84700,84701],{"class":168},"    const flag = arr.some(item => item >= 10)\n",[162,84703,84704],{"class":164,"line":466},[162,84705,84706],{"class":168},"    console.log(flag)   \u002F\u002Ftrue\n",[162,84708,84709,84711,84713],{"class":164,"line":471},[162,84710,55487],{"class":168},[162,84712,54885],{"class":54373},[162,84714,54380],{"class":168},[162,84716,84717,84719,84721],{"class":164,"line":687},[162,84718,54857],{"class":168},[162,84720,54872],{"class":54373},[162,84722,54380],{"class":168},[26001,84724,84726],{"id":84725},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,84728,84729],{},[4602,84730],{"alt":158,"src":84731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[153,84733,84735],{"className":53706,"code":84734,"language":53708,"meta":158,"style":158},"\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",[71,84736,84737,84747,84761,84765,84773,84787,84807,84819,84827,84834,84846,84858,84870,84882,84892,84902,84906,84914,84922,84926,84934,84946,84954,84976,84981,84986,85019,85027,85035,85039],{"__ignoreMap":158},[162,84738,84739,84741,84743,84745],{"class":164,"line":165},[162,84740,54370],{"class":168},[162,84742,54374],{"class":54373},[162,84744,54377],{"class":5082},[162,84746,54380],{"class":168},[162,84748,84749,84751,84753,84755,84757,84759],{"class":164,"line":197},[162,84750,4187],{"class":168},[162,84752,53708],{"class":54373},[162,84754,54389],{"class":5082},[162,84756,173],{"class":168},[162,84758,54394],{"class":179},[162,84760,54380],{"class":168},[162,84762,84763],{"class":164,"line":228},[162,84764,301],{"emptyLinePlaceholder":300},[162,84766,84767,84769,84771],{"class":164,"line":252},[162,84768,4187],{"class":168},[162,84770,54407],{"class":54373},[162,84772,54380],{"class":168},[162,84774,84775,84777,84779,84781,84783,84785],{"class":164,"line":328},[162,84776,55215],{"class":168},[162,84778,54417],{"class":54373},[162,84780,54420],{"class":5082},[162,84782,173],{"class":168},[162,84784,54425],{"class":179},[162,84786,54380],{"class":168},[162,84788,84789,84791,84793,84795,84797,84799,84801,84803,84805],{"class":164,"line":466},[162,84790,55215],{"class":168},[162,84792,54417],{"class":54373},[162,84794,18013],{"class":5082},[162,84796,173],{"class":168},[162,84798,54464],{"class":179},[162,84800,54444],{"class":5082},[162,84802,173],{"class":168},[162,84804,54471],{"class":179},[162,84806,54380],{"class":168},[162,84808,84809,84811,84813,84815,84817],{"class":164,"line":471},[162,84810,55215],{"class":168},[162,84812,54480],{"class":54373},[162,84814,54483],{"class":168},[162,84816,54480],{"class":54373},[162,84818,54380],{"class":168},[162,84820,84821,84823,84825],{"class":164,"line":687},[162,84822,55215],{"class":168},[162,84824,3219],{"class":54373},[162,84826,54380],{"class":168},[162,84828,84829,84832],{"class":164,"line":692},[162,84830,84831],{"class":54373},"    div",[162,84833,1722],{"class":168},[162,84835,84836,84838,84840,84842,84844],{"class":164,"line":698},[162,84837,57841],{"class":207},[162,84839,1730],{"class":168},[162,84841,4845],{"class":207},[162,84843,54564],{"class":172},[162,84845,4433],{"class":168},[162,84847,84848,84850,84852,84854,84856],{"class":164,"line":2955},[162,84849,57855],{"class":207},[162,84851,1730],{"class":168},[162,84853,3693],{"class":207},[162,84855,54564],{"class":172},[162,84857,4433],{"class":168},[162,84859,84860,84862,84864,84866,84868],{"class":164,"line":2960},[162,84861,60428],{"class":207},[162,84863,1730],{"class":168},[162,84865,3693],{"class":207},[162,84867,54564],{"class":172},[162,84869,4433],{"class":168},[162,84871,84872,84874,84876,84878,84880],{"class":164,"line":2971},[162,84873,68200],{"class":207},[162,84875,1730],{"class":168},[162,84877,3788],{"class":207},[162,84879,54564],{"class":172},[162,84881,4433],{"class":168},[162,84883,84884,84886,84888,84890],{"class":164,"line":2984},[162,84885,60355],{"class":207},[162,84887,1730],{"class":168},[162,84889,54664],{"class":207},[162,84891,4433],{"class":168},[162,84893,84894,84896,84898,84900],{"class":164,"line":2989},[162,84895,57954],{"class":207},[162,84897,1730],{"class":168},[162,84899,54717],{"class":207},[162,84901,4433],{"class":168},[162,84903,84904],{"class":164,"line":3011},[162,84905,5305],{"class":168},[162,84907,84908,84910,84912],{"class":164,"line":3022},[162,84909,55487],{"class":168},[162,84911,3219],{"class":54373},[162,84913,54380],{"class":168},[162,84915,84916,84918,84920],{"class":164,"line":3027},[162,84917,54857],{"class":168},[162,84919,54407],{"class":54373},[162,84921,54380],{"class":168},[162,84923,84924],{"class":164,"line":3046},[162,84925,301],{"emptyLinePlaceholder":300},[162,84927,84928,84930,84932],{"class":164,"line":3052},[162,84929,4187],{"class":168},[162,84931,54872],{"class":54373},[162,84933,54380],{"class":168},[162,84935,84936,84938,84940,84942,84944],{"class":164,"line":3057},[162,84937,55215],{"class":168},[162,84939,54683],{"class":54373},[162,84941,58384],{"class":168},[162,84943,54683],{"class":54373},[162,84945,54380],{"class":168},[162,84947,84948,84950,84952],{"class":164,"line":3072},[162,84949,55215],{"class":168},[162,84951,54885],{"class":54373},[162,84953,54380],{"class":168},[162,84955,84956,84958,84961,84963,84966,84969,84971,84974],{"class":164,"line":3077},[162,84957,14317],{"class":172},[162,84959,84960],{"class":207}," spec",[162,84962,16659],{"class":172},[162,84964,84965],{"class":168}," { size: ",[162,84967,84968],{"class":179},"'40cm*40cm'",[162,84970,58533],{"class":168},[162,84972,84973],{"class":179},"'黑色'",[162,84975,58673],{"class":168},[162,84977,84978],{"class":164,"line":3100},[162,84979,84980],{"class":361},"    \u002F\u002F const arr = Object.values(spec)\n",[162,84982,84983],{"class":164,"line":3140},[162,84984,84985],{"class":361},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[162,84987,84988,84990,84992,84994,84997,84999,85001,85004,85007,85010,85012,85014,85017],{"class":164,"line":4878},[162,84989,55477],{"class":168},[162,84991,57469],{"class":5082},[162,84993,604],{"class":168},[162,84995,84996],{"class":179},"'div'",[162,84998,77314],{"class":168},[162,85000,173],{"class":172},[162,85002,85003],{"class":168}," Object.",[162,85005,85006],{"class":5082},"values",[162,85008,85009],{"class":168},"(spec).",[162,85011,77288],{"class":5082},[162,85013,604],{"class":168},[162,85015,85016],{"class":179},"'\u002F'",[162,85018,434],{"class":168},[162,85020,85021,85023,85025],{"class":164,"line":4883},[162,85022,55487],{"class":168},[162,85024,54885],{"class":54373},[162,85026,54380],{"class":168},[162,85028,85029,85031,85033],{"class":164,"line":4897},[162,85030,54857],{"class":168},[162,85032,54872],{"class":54373},[162,85034,54380],{"class":168},[162,85036,85037],{"class":164,"line":4902},[162,85038,301],{"emptyLinePlaceholder":300},[162,85040,85041,85043,85045],{"class":164,"line":5694},[162,85042,54857],{"class":168},[162,85044,53708],{"class":54373},[162,85046,54380],{"class":168},[19,85048,85049],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[26001,85051,85053],{"id":85052},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,85055,85056],{},"静态方法，将伪数组转换为真数组",[19,85058,85059],{},[4602,85060],{"alt":158,"src":85061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[153,85063,85065],{"className":56137,"code":85064,"language":56139,"meta":158,"style":158},"\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",[71,85066,85067,85075,85083,85095,85107,85119,85127,85135,85140,85145,85150,85155,85163],{"__ignoreMap":158},[162,85068,85069,85071,85073],{"class":164,"line":165},[162,85070,4187],{"class":168},[162,85072,54872],{"class":54373},[162,85074,54380],{"class":168},[162,85076,85077,85079,85081],{"class":164,"line":197},[162,85078,55215],{"class":168},[162,85080,4279],{"class":54373},[162,85082,54380],{"class":168},[162,85084,85085,85087,85089,85091,85093],{"class":164,"line":228},[162,85086,54414],{"class":168},[162,85088,1455],{"class":54373},[162,85090,58384],{"class":168},[162,85092,1455],{"class":54373},[162,85094,54380],{"class":168},[162,85096,85097,85099,85101,85103,85105],{"class":164,"line":252},[162,85098,54414],{"class":168},[162,85100,1455],{"class":54373},[162,85102,58384],{"class":168},[162,85104,1455],{"class":54373},[162,85106,54380],{"class":168},[162,85108,85109,85111,85113,85115,85117],{"class":164,"line":328},[162,85110,54414],{"class":168},[162,85112,1455],{"class":54373},[162,85114,58384],{"class":168},[162,85116,1455],{"class":54373},[162,85118,54380],{"class":168},[162,85120,85121,85123,85125],{"class":164,"line":466},[162,85122,55487],{"class":168},[162,85124,4279],{"class":54373},[162,85126,54380],{"class":168},[162,85128,85129,85131,85133],{"class":164,"line":471},[162,85130,55215],{"class":168},[162,85132,54885],{"class":54373},[162,85134,54380],{"class":168},[162,85136,85137],{"class":164,"line":687},[162,85138,85139],{"class":168},"    const lis = document.querySelectorAll('li')\n",[162,85141,85142],{"class":164,"line":692},[162,85143,85144],{"class":168},"    const liss = Array.from(lis)\n",[162,85146,85147],{"class":164,"line":698},[162,85148,85149],{"class":168},"    liss.pop()\n",[162,85151,85152],{"class":164,"line":2955},[162,85153,85154],{"class":168},"    console.log(liss)\n",[162,85156,85157,85159,85161],{"class":164,"line":2960},[162,85158,55487],{"class":168},[162,85160,54885],{"class":54373},[162,85162,54380],{"class":168},[162,85164,85165,85167,85169],{"class":164,"line":2971},[162,85166,54857],{"class":168},[162,85168,54872],{"class":54373},[162,85170,54380],{"class":168},[19,85172,85173],{},[4602,85174],{"alt":158,"src":85175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[25089,85177,85179],{"id":85178},"_41053-string","4.10.5.3 String",[19,85181,85182],{},[4602,85183],{"alt":158,"src":85184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[26001,85186,85188],{"id":85187},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[153,85190,85192],{"className":56137,"code":85191,"language":56139,"meta":158,"style":158},"\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",[71,85193,85194,85202,85210,85215,85220,85225,85229,85234,85239,85244,85252],{"__ignoreMap":158},[162,85195,85196,85198,85200],{"class":164,"line":165},[162,85197,4187],{"class":168},[162,85199,54872],{"class":54373},[162,85201,54380],{"class":168},[162,85203,85204,85206,85208],{"class":164,"line":197},[162,85205,55215],{"class":168},[162,85207,54885],{"class":54373},[162,85209,54380],{"class":168},[162,85211,85212],{"class":164,"line":228},[162,85213,85214],{"class":168},"    \u002F\u002F 把字符串转化为数组\n",[162,85216,85217],{"class":164,"line":252},[162,85218,85219],{"class":168},"    const str = 'pink,red'\n",[162,85221,85222],{"class":164,"line":328},[162,85223,85224],{"class":168},"    const arr = str.split(',')\n",[162,85226,85227],{"class":164,"line":466},[162,85228,83703],{"class":168},[162,85230,85231],{"class":164,"line":471},[162,85232,85233],{"class":168},"    const str1 = '2025-8-25'\n",[162,85235,85236],{"class":164,"line":687},[162,85237,85238],{"class":168},"    const arr1 = str1.split('-')\n",[162,85240,85241],{"class":164,"line":692},[162,85242,85243],{"class":168},"    console.log(arr1)\n",[162,85245,85246,85248,85250],{"class":164,"line":698},[162,85247,55487],{"class":168},[162,85249,54885],{"class":54373},[162,85251,54380],{"class":168},[162,85253,85254,85256,85258],{"class":164,"line":2955},[162,85255,54857],{"class":168},[162,85257,54872],{"class":54373},[162,85259,54380],{"class":168},[26001,85261,85263],{"id":85262},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,85265,8289],{},[19,85267,85268],{},"substring(indexStart)",[19,85270,85271],{},"substring(indexStart, indexEnd)",[4279,85273,85274,85285,85297,85307],{},[1455,85275,85276,85277,85280,85281,85284],{},"如果省略了 ",[71,85278,85279],{},"indexEnd","，则 ",[71,85282,85283],{},"substring()"," 提取字符直到字符串的末尾",[1455,85286,85287,85288,85291,85292,85280,85294,85296],{},"如果 ",[71,85289,85290],{},"indexStart"," 等于 ",[71,85293,85279],{},[71,85295,85283],{}," 返回一个空字符串",[1455,85298,85287,85299,85301,85302,85280,85304,85306],{},[71,85300,85290],{}," 大于 ",[71,85303,85279],{},[71,85305,85283],{}," 的效果就像交换了这两个参数一样",[1455,85308,85309],{},"结束的索引号不包含想要截取的部分",[153,85311,85313],{"className":84554,"code":85312,"language":84556,"meta":158,"style":158},"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",[71,85314,85315,85327,85331,85365,85395,85399,85430,85434,85461,85491,85521,85525,85556],{"__ignoreMap":158},[162,85316,85317,85320,85322,85325],{"class":164,"line":165},[162,85318,85319],{"class":168},"const anyString ",[162,85321,173],{"class":172},[162,85323,85324],{"class":179}," \"Mozilla\"",[162,85326,4433],{"class":168},[162,85328,85329],{"class":164,"line":197},[162,85330,301],{"emptyLinePlaceholder":300},[162,85332,85333,85336,85338,85340,85342,85345,85347,85350,85352,85354,85356,85358,85360,85362],{"class":164,"line":228},[162,85334,85335],{"class":207},"console",[162,85337,3847],{"class":168},[162,85339,61316],{"class":207},[162,85341,604],{"class":168},[162,85343,85344],{"class":207},"anyString",[162,85346,3847],{"class":168},[162,85348,85349],{"class":207},"substring",[162,85351,604],{"class":168},[162,85353,312],{"class":207},[162,85355,183],{"class":168},[162,85357,208],{"class":207},[162,85359,78318],{"class":168},[162,85361,36404],{"class":172},[162,85363,85364],{"class":179}," 'M'\n",[162,85366,85367,85369,85371,85373,85375,85377,85379,85381,85383,85385,85387,85389,85391,85393],{"class":164,"line":252},[162,85368,85335],{"class":207},[162,85370,3847],{"class":168},[162,85372,61316],{"class":207},[162,85374,604],{"class":168},[162,85376,85344],{"class":207},[162,85378,3847],{"class":168},[162,85380,85349],{"class":207},[162,85382,604],{"class":168},[162,85384,208],{"class":207},[162,85386,183],{"class":168},[162,85388,312],{"class":207},[162,85390,78318],{"class":168},[162,85392,36404],{"class":172},[162,85394,85364],{"class":179},[162,85396,85397],{"class":164,"line":328},[162,85398,301],{"emptyLinePlaceholder":300},[162,85400,85401,85403,85405,85407,85409,85411,85413,85415,85417,85419,85421,85423,85425,85427],{"class":164,"line":466},[162,85402,85335],{"class":207},[162,85404,3847],{"class":168},[162,85406,61316],{"class":207},[162,85408,604],{"class":168},[162,85410,85344],{"class":207},[162,85412,3847],{"class":168},[162,85414,85349],{"class":207},[162,85416,604],{"class":168},[162,85418,312],{"class":207},[162,85420,183],{"class":168},[162,85422,1314],{"class":207},[162,85424,78318],{"class":168},[162,85426,36404],{"class":172},[162,85428,85429],{"class":179}," 'Mozill'\n",[162,85431,85432],{"class":164,"line":471},[162,85433,301],{"emptyLinePlaceholder":300},[162,85435,85436,85438,85440,85442,85444,85446,85448,85450,85452,85454,85456,85458],{"class":164,"line":687},[162,85437,85335],{"class":207},[162,85439,3847],{"class":168},[162,85441,61316],{"class":207},[162,85443,604],{"class":168},[162,85445,85344],{"class":207},[162,85447,3847],{"class":168},[162,85449,85349],{"class":207},[162,85451,604],{"class":168},[162,85453,223],{"class":207},[162,85455,78318],{"class":168},[162,85457,36404],{"class":172},[162,85459,85460],{"class":179}," 'lla'\n",[162,85462,85463,85465,85467,85469,85471,85473,85475,85477,85479,85481,85483,85485,85487,85489],{"class":164,"line":692},[162,85464,85335],{"class":207},[162,85466,3847],{"class":168},[162,85468,61316],{"class":207},[162,85470,604],{"class":168},[162,85472,85344],{"class":207},[162,85474,3847],{"class":168},[162,85476,85349],{"class":207},[162,85478,604],{"class":168},[162,85480,223],{"class":207},[162,85482,183],{"class":168},[162,85484,3661],{"class":207},[162,85486,78374],{"class":168},[162,85488,36404],{"class":172},[162,85490,85460],{"class":179},[162,85492,85493,85495,85497,85499,85501,85503,85505,85507,85509,85511,85513,85515,85517,85519],{"class":164,"line":698},[162,85494,85335],{"class":207},[162,85496,3847],{"class":168},[162,85498,61316],{"class":207},[162,85500,604],{"class":168},[162,85502,85344],{"class":207},[162,85504,3847],{"class":168},[162,85506,85349],{"class":207},[162,85508,604],{"class":168},[162,85510,3661],{"class":207},[162,85512,183],{"class":168},[162,85514,223],{"class":207},[162,85516,78318],{"class":168},[162,85518,36404],{"class":172},[162,85520,85460],{"class":179},[162,85522,85523],{"class":164,"line":2955},[162,85524,301],{"emptyLinePlaceholder":300},[162,85526,85527,85529,85531,85533,85535,85537,85539,85541,85543,85545,85547,85549,85551,85553],{"class":164,"line":2960},[162,85528,85335],{"class":207},[162,85530,3847],{"class":168},[162,85532,61316],{"class":207},[162,85534,604],{"class":168},[162,85536,85344],{"class":207},[162,85538,3847],{"class":168},[162,85540,85349],{"class":207},[162,85542,604],{"class":168},[162,85544,312],{"class":207},[162,85546,183],{"class":168},[162,85548,3661],{"class":207},[162,85550,78318],{"class":168},[162,85552,36404],{"class":172},[162,85554,85555],{"class":179}," 'Mozilla'\n",[162,85557,85558,85560,85562,85564,85566,85568,85570,85572,85574,85576,85578,85580,85582,85584],{"class":164,"line":2971},[162,85559,85335],{"class":207},[162,85561,3847],{"class":168},[162,85563,61316],{"class":207},[162,85565,604],{"class":168},[162,85567,85344],{"class":207},[162,85569,3847],{"class":168},[162,85571,85349],{"class":207},[162,85573,604],{"class":168},[162,85575,312],{"class":207},[162,85577,183],{"class":168},[162,85579,1006],{"class":207},[162,85581,78318],{"class":168},[162,85583,36404],{"class":172},[162,85585,85555],{"class":179},[26001,85587,85589],{"id":85588},"_410533-startswith","4.10.5.3.3 startsWith",[19,85591,85592,85595,85596,85601,85602,85604,85605],{},[71,85593,85594],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[3453,85597,85598],{},[71,85599,85600],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[71,85603,4502],{}," 或 ",[71,85606,69087],{},[153,85608,85610],{"className":80560,"code":85609,"language":80562,"meta":158,"style":158},"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",[71,85611,85612,85624,85643,85648,85668],{"__ignoreMap":158},[162,85613,85614,85616,85619,85621],{"class":164,"line":165},[162,85615,9898],{"class":172},[162,85617,85618],{"class":168}," str1 ",[162,85620,173],{"class":172},[162,85622,85623],{"class":179}," \"Saturday night plans\"\n",[162,85625,85626,85628,85630,85633,85636,85638,85641],{"class":164,"line":197},[162,85627,80597],{"class":168},[162,85629,61316],{"class":5082},[162,85631,85632],{"class":168},"(str1.",[162,85634,85635],{"class":5082},"startsWith",[162,85637,604],{"class":168},[162,85639,85640],{"class":179},"\"Sat\"",[162,85642,586],{"class":168},[162,85644,85645],{"class":164,"line":228},[162,85646,85647],{"class":361},"\u002F\u002F Expected output: true\n",[162,85649,85650,85652,85654,85656,85658,85660,85662,85664,85666],{"class":164,"line":252},[162,85651,80597],{"class":168},[162,85653,61316],{"class":5082},[162,85655,85632],{"class":168},[162,85657,85635],{"class":5082},[162,85659,604],{"class":168},[162,85661,85640],{"class":179},[162,85663,183],{"class":168},[162,85665,218],{"class":207},[162,85667,586],{"class":168},[162,85669,85670],{"class":164,"line":328},[162,85671,85672],{"class":361},"\u002F\u002F Expected output: false\n",[153,85674,85676],{"className":53706,"code":85675,"language":53708,"meta":158,"style":158},"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",[71,85677,85678,85683,85688,85692,85697,85702],{"__ignoreMap":158},[162,85679,85680],{"class":164,"line":165},[162,85681,85682],{"class":168},"startsWith(searchString)\n",[162,85684,85685],{"class":164,"line":197},[162,85686,85687],{"class":168},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[162,85689,85690],{"class":164,"line":228},[162,85691,301],{"emptyLinePlaceholder":300},[162,85693,85694],{"class":164,"line":252},[162,85695,85696],{"class":168},"const str3 = 'pink老师上课中'\n",[162,85698,85699],{"class":164,"line":328},[162,85700,85701],{"class":168},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[162,85703,85704],{"class":164,"line":466},[162,85705,85706],{"class":168},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[26001,85708,85710],{"id":85709},"_410534-includes","4.10.5.3.4 includes",[19,85712,85713],{},"includes(searchString) includes(searchString, position)",[1452,85715,85716],{},[1455,85717,85718],{},"searchString:",[19,85720,85721,85722,85724,85725,85730,85731,85736,85737,24591,85740,85743,85744,85747],{},"一个要在 ",[71,85723,4442],{}," 中查找的字符串。",[3538,85726,85729],{"href":85727,"rel":85728},"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",[26956],"不能是正则表达式","。所有非正则表达式的值都会被",[3538,85732,85735],{"href":85733,"rel":85734},"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",[26956],"强制转换为字符串","，因此如果该参数被省略或传入 ",[71,85738,85739],{},"undefined",[71,85741,85742],{},"includes()"," 方法会在字符串中搜索 ",[71,85745,85746],{},"\"undefined\"","，这通常不是你想要的",[1452,85749,85750],{"start":197},[1455,85751,85752,1332],{},[71,85753,85754],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,85756,85757,85758,85761,85762],{},"在字符串中开始搜索 ",[71,85759,85760],{},"searchString"," 的位置。默认值为 ",[71,85763,312],{},[1452,85765,85766],{"start":228},[1455,85767,85768],{},"返回值：",[19,85770,85771,85772,85774,85775,85779,85780],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[71,85773,85760],{}," 为空字符串的情况），则返回 ",[3453,85776,85777],{},[71,85778,4502],{}," ，否则返回 ",[3453,85781,85782],{},[71,85783,69087],{},[1452,85785,85786],{"start":252},[1455,85787,85788],{},"异常：",[19,85790,85287,85791,16889,85793,85797],{},[71,85792,85760],{},[3538,85794,85796],{"href":85727,"rel":85795},[26956],"是一个正则表达式","，则会抛出",[19,85799,85800],{},"只要是有就是true，不需要非得以谁开头结尾",[153,85802,85804],{"className":80560,"code":85803,"language":80562,"meta":158,"style":158},"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",[71,85805,85806,85817,85840,85859,85879,85901,85920],{"__ignoreMap":158},[162,85807,85808,85810,85812,85814],{"class":164,"line":165},[162,85809,9898],{"class":172},[162,85811,82840],{"class":168},[162,85813,173],{"class":172},[162,85815,85816],{"class":179}," \"To be, or not to be, that is the question.\"\n",[162,85818,85819,85821,85823,85826,85829,85831,85834,85837],{"class":164,"line":197},[162,85820,80597],{"class":168},[162,85822,61316],{"class":5082},[162,85824,85825],{"class":168},"(str.",[162,85827,85828],{"class":5082},"includes",[162,85830,604],{"class":168},[162,85832,85833],{"class":179},"\"To be\"",[162,85835,85836],{"class":168},"))",[162,85838,85839],{"class":361},"  \u002F\u002F true\n",[162,85841,85842,85844,85846,85848,85850,85852,85855,85857],{"class":164,"line":228},[162,85843,80597],{"class":168},[162,85845,61316],{"class":5082},[162,85847,85825],{"class":168},[162,85849,85828],{"class":5082},[162,85851,604],{"class":168},[162,85853,85854],{"class":179},"\"question\"",[162,85856,85836],{"class":168},[162,85858,85839],{"class":361},[162,85860,85861,85863,85865,85867,85869,85871,85874,85876],{"class":164,"line":252},[162,85862,80597],{"class":168},[162,85864,61316],{"class":5082},[162,85866,85825],{"class":168},[162,85868,85828],{"class":5082},[162,85870,604],{"class":168},[162,85872,85873],{"class":179},"\"nonexistent\"",[162,85875,85836],{"class":168},[162,85877,85878],{"class":361},"  \u002F\u002F false\n",[162,85880,85881,85883,85885,85887,85889,85891,85893,85895,85897,85899],{"class":164,"line":328},[162,85882,80597],{"class":168},[162,85884,61316],{"class":5082},[162,85886,85825],{"class":168},[162,85888,85828],{"class":5082},[162,85890,604],{"class":168},[162,85892,85833],{"class":179},[162,85894,183],{"class":168},[162,85896,208],{"class":207},[162,85898,85836],{"class":168},[162,85900,85878],{"class":361},[162,85902,85903,85905,85907,85909,85911,85913,85916,85918],{"class":164,"line":466},[162,85904,80597],{"class":168},[162,85906,61316],{"class":5082},[162,85908,85825],{"class":168},[162,85910,85828],{"class":5082},[162,85912,604],{"class":168},[162,85914,85915],{"class":179},"\"TO BE\"",[162,85917,85836],{"class":168},[162,85919,85878],{"class":361},[162,85921,85922,85924,85926,85928,85930,85932,85934,85936],{"class":164,"line":471},[162,85923,80597],{"class":168},[162,85925,61316],{"class":5082},[162,85927,85825],{"class":168},[162,85929,85828],{"class":5082},[162,85931,604],{"class":168},[162,85933,10756],{"class":179},[162,85935,85836],{"class":168},[162,85937,85839],{"class":361},[26001,85939,85941],{"id":85940},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[153,85943,85945],{"className":56137,"code":85944,"language":56139,"meta":158,"style":158},"\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",[71,85946,85947,85955,85963,85968,85973,85978,85983,85988,85996],{"__ignoreMap":158},[162,85948,85949,85951,85953],{"class":164,"line":165},[162,85950,4187],{"class":168},[162,85952,54872],{"class":54373},[162,85954,54380],{"class":168},[162,85956,85957,85959,85961],{"class":164,"line":197},[162,85958,55215],{"class":168},[162,85960,54885],{"class":54373},[162,85962,54380],{"class":168},[162,85964,85965],{"class":164,"line":228},[162,85966,85967],{"class":168},"    const num = 10\n",[162,85969,85970],{"class":164,"line":252},[162,85971,85972],{"class":168},"    \u002F\u002F 强制转换\n",[162,85974,85975],{"class":164,"line":328},[162,85976,85977],{"class":168},"    console.log(String(num))\n",[162,85979,85980],{"class":164,"line":466},[162,85981,85982],{"class":168},"    \u002F\u002F toString()方法转换\n",[162,85984,85985],{"class":164,"line":471},[162,85986,85987],{"class":168},"    console.log(num.toString())\n",[162,85989,85990,85992,85994],{"class":164,"line":687},[162,85991,55487],{"class":168},[162,85993,54885],{"class":54373},[162,85995,54380],{"class":168},[162,85997,85998,86000,86002],{"class":164,"line":692},[162,85999,54857],{"class":168},[162,86001,54872],{"class":54373},[162,86003,54380],{"class":168},[26001,86005,86007],{"id":86006},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,86009,86010],{},[4602,86011],{"alt":158,"src":86012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[153,86014,86016],{"className":53706,"code":86015,"language":53708,"meta":158,"style":158},"\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",[71,86017,86018,86028,86042,86046,86054,86068,86088,86100,86108,86112,86120,86132,86140,86152,86157,86162,86167,86214,86230,86238,86246,86250],{"__ignoreMap":158},[162,86019,86020,86022,86024,86026],{"class":164,"line":165},[162,86021,54370],{"class":168},[162,86023,54374],{"class":54373},[162,86025,54377],{"class":5082},[162,86027,54380],{"class":168},[162,86029,86030,86032,86034,86036,86038,86040],{"class":164,"line":197},[162,86031,4187],{"class":168},[162,86033,53708],{"class":54373},[162,86035,54389],{"class":5082},[162,86037,173],{"class":168},[162,86039,54394],{"class":179},[162,86041,54380],{"class":168},[162,86043,86044],{"class":164,"line":228},[162,86045,301],{"emptyLinePlaceholder":300},[162,86047,86048,86050,86052],{"class":164,"line":252},[162,86049,4187],{"class":168},[162,86051,54407],{"class":54373},[162,86053,54380],{"class":168},[162,86055,86056,86058,86060,86062,86064,86066],{"class":164,"line":328},[162,86057,55215],{"class":168},[162,86059,54417],{"class":54373},[162,86061,54420],{"class":5082},[162,86063,173],{"class":168},[162,86065,54425],{"class":179},[162,86067,54380],{"class":168},[162,86069,86070,86072,86074,86076,86078,86080,86082,86084,86086],{"class":164,"line":466},[162,86071,55215],{"class":168},[162,86073,54417],{"class":54373},[162,86075,18013],{"class":5082},[162,86077,173],{"class":168},[162,86079,54464],{"class":179},[162,86081,54444],{"class":5082},[162,86083,173],{"class":168},[162,86085,54471],{"class":179},[162,86087,54380],{"class":168},[162,86089,86090,86092,86094,86096,86098],{"class":164,"line":471},[162,86091,55215],{"class":168},[162,86093,54480],{"class":54373},[162,86095,54483],{"class":168},[162,86097,54480],{"class":54373},[162,86099,54380],{"class":168},[162,86101,86102,86104,86106],{"class":164,"line":687},[162,86103,54857],{"class":168},[162,86105,54407],{"class":54373},[162,86107,54380],{"class":168},[162,86109,86110],{"class":164,"line":692},[162,86111,301],{"emptyLinePlaceholder":300},[162,86113,86114,86116,86118],{"class":164,"line":698},[162,86115,4187],{"class":168},[162,86117,54872],{"class":54373},[162,86119,54380],{"class":168},[162,86121,86122,86124,86126,86128,86130],{"class":164,"line":2955},[162,86123,55215],{"class":168},[162,86125,54683],{"class":54373},[162,86127,58384],{"class":168},[162,86129,54683],{"class":54373},[162,86131,54380],{"class":168},[162,86133,86134,86136,86138],{"class":164,"line":2960},[162,86135,55215],{"class":168},[162,86137,54885],{"class":54373},[162,86139,54380],{"class":168},[162,86141,86142,86144,86147,86149],{"class":164,"line":2971},[162,86143,14317],{"class":172},[162,86145,86146],{"class":207}," gift",[162,86148,16659],{"class":172},[162,86150,86151],{"class":179}," '50g的茶叶，清洗球'\n",[162,86153,86154],{"class":164,"line":2984},[162,86155,86156],{"class":361},"    \u002F\u002F 1.把字符串拆分为数组\n",[162,86158,86159],{"class":164,"line":2989},[162,86160,86161],{"class":361},"    \u002F\u002F console.log(gift.split(','))\n",[162,86163,86164],{"class":164,"line":3011},[162,86165,86166],{"class":361},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[162,86168,86169,86171,86173,86175,86178,86181,86183,86186,86188,86190,86192,86194,86196,86199,86201,86204,86206,86208,86210,86212],{"class":164,"line":3022},[162,86170,14317],{"class":172},[162,86172,76984],{"class":207},[162,86174,16659],{"class":172},[162,86176,86177],{"class":168}," gift.",[162,86179,86180],{"class":5082},"split",[162,86182,604],{"class":168},[162,86184,86185],{"class":179},"'，'",[162,86187,33910],{"class":168},[162,86189,77109],{"class":5082},[162,86191,604],{"class":168},[162,86193,82860],{"class":671},[162,86195,82863],{"class":172},[162,86197,86198],{"class":179}," `\u003Cspan>【赠品】${",[162,86200,82860],{"class":168},[162,86202,86203],{"class":179},"}\u003C\u002Fspan>\u003Cbr>`",[162,86205,33910],{"class":168},[162,86207,77288],{"class":5082},[162,86209,604],{"class":168},[162,86211,77293],{"class":179},[162,86213,434],{"class":168},[162,86215,86216,86218,86220,86222,86224,86226,86228],{"class":164,"line":3027},[162,86217,55477],{"class":168},[162,86219,57469],{"class":5082},[162,86221,604],{"class":168},[162,86223,84996],{"class":179},[162,86225,77314],{"class":168},[162,86227,173],{"class":172},[162,86229,77050],{"class":168},[162,86231,86232,86234,86236],{"class":164,"line":3046},[162,86233,55487],{"class":168},[162,86235,54885],{"class":54373},[162,86237,54380],{"class":168},[162,86239,86240,86242,86244],{"class":164,"line":3052},[162,86241,54857],{"class":168},[162,86243,54872],{"class":54373},[162,86245,54380],{"class":168},[162,86247,86248],{"class":164,"line":3057},[162,86249,301],{"emptyLinePlaceholder":300},[162,86251,86252,86254,86256],{"class":164,"line":3072},[162,86253,54857],{"class":168},[162,86255,53708],{"class":54373},[162,86257,54380],{"class":168},[25089,86259,86261],{"id":86260},"_41054-number","4.10.5.4 Number",[19,86263,86264],{},[4602,86265],{"alt":158,"src":86266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,86268,86269],{},"整数也可以进行toFixed来保留小数",[19,86271,86272],{},"比如：",[19,86274,86275],{},"const price=10",[19,86277,86278],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[25089,86280,86282],{"id":86281},"_41055-购物车展示","4.10.5.5 购物车展示",[19,86284,86285],{},[4602,86286],{"alt":158,"src":86287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[153,86289,86291],{"className":53706,"code":86290,"language":53708,"meta":158,"style":158},"\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",[71,86292,86293,86303,86317,86321,86329,86343,86363,86375,86383,86389,86399,86409,86419,86423,86427,86433,86445,86459,86463,86467,86473,86485,86501,86511,86527,86531,86535,86541,86551,86561,86565,86569,86577,86589,86601,86613,86617,86621,86629,86641,86645,86649,86660,86670,86682,86694,86704,86708,86712,86720,86729,86741,86751,86761,86765,86769,86777,86786,86793,86803,86815,86819,86823,86832,86842,86853,86865,86877,86881,86885,86894,86904,86915,86919,86923,86929,86941,86953,86963,86973,86991,87003,87007,87011,87020,87032,87042,87052,87064,87068,87076,87084,87088,87096,87110,87118,87132,87160,87168,87176,87186,87190,87198,87206,87215,87223,87232,87242,87246,87250,87258,87266,87275,87283,87291,87304,87308,87312,87320,87328,87337,87345,87353,87368,87372,87376,87384,87392,87401,87409,87417,87431,87439,87443,87447,87452,87478,87483,87520,87525,87548,87553,87607,87612,87648,87652,87658,87663,87672,87686,87695,87714,87723,87733,87738,87743,87756,87761,87815,87841,87849,87857,87861],{"__ignoreMap":158},[162,86294,86295,86297,86299,86301],{"class":164,"line":165},[162,86296,54370],{"class":168},[162,86298,54374],{"class":54373},[162,86300,54377],{"class":5082},[162,86302,54380],{"class":168},[162,86304,86305,86307,86309,86311,86313,86315],{"class":164,"line":197},[162,86306,4187],{"class":168},[162,86308,53708],{"class":54373},[162,86310,54389],{"class":5082},[162,86312,173],{"class":168},[162,86314,54394],{"class":179},[162,86316,54380],{"class":168},[162,86318,86319],{"class":164,"line":228},[162,86320,301],{"emptyLinePlaceholder":300},[162,86322,86323,86325,86327],{"class":164,"line":252},[162,86324,4187],{"class":168},[162,86326,54407],{"class":54373},[162,86328,54380],{"class":168},[162,86330,86331,86333,86335,86337,86339,86341],{"class":164,"line":328},[162,86332,55215],{"class":168},[162,86334,54417],{"class":54373},[162,86336,54420],{"class":5082},[162,86338,173],{"class":168},[162,86340,54425],{"class":179},[162,86342,54380],{"class":168},[162,86344,86345,86347,86349,86351,86353,86355,86357,86359,86361],{"class":164,"line":466},[162,86346,55215],{"class":168},[162,86348,54417],{"class":54373},[162,86350,18013],{"class":5082},[162,86352,173],{"class":168},[162,86354,54464],{"class":179},[162,86356,54444],{"class":5082},[162,86358,173],{"class":168},[162,86360,54471],{"class":179},[162,86362,54380],{"class":168},[162,86364,86365,86367,86369,86371,86373],{"class":164,"line":471},[162,86366,55215],{"class":168},[162,86368,54480],{"class":54373},[162,86370,54483],{"class":168},[162,86372,54480],{"class":54373},[162,86374,54380],{"class":168},[162,86376,86377,86379,86381],{"class":164,"line":687},[162,86378,55215],{"class":168},[162,86380,3219],{"class":54373},[162,86382,54380],{"class":168},[162,86384,86385,86387],{"class":164,"line":692},[162,86386,9509],{"class":54373},[162,86388,1722],{"class":168},[162,86390,86391,86393,86395,86397],{"class":164,"line":698},[162,86392,57765],{"class":207},[162,86394,1730],{"class":168},[162,86396,312],{"class":207},[162,86398,4433],{"class":168},[162,86400,86401,86403,86405,86407],{"class":164,"line":2955},[162,86402,57776],{"class":207},[162,86404,1730],{"class":168},[162,86406,312],{"class":207},[162,86408,4433],{"class":168},[162,86410,86411,86413,86415,86417],{"class":164,"line":2960},[162,86412,75661],{"class":207},[162,86414,1730],{"class":168},[162,86416,63574],{"class":207},[162,86418,4433],{"class":168},[162,86420,86421],{"class":164,"line":2971},[162,86422,5305],{"class":168},[162,86424,86425],{"class":164,"line":2984},[162,86426,301],{"emptyLinePlaceholder":300},[162,86428,86429,86431],{"class":164,"line":2989},[162,86430,65191],{"class":5082},[162,86432,1722],{"class":168},[162,86434,86435,86437,86439,86441,86443],{"class":164,"line":3011},[162,86436,57841],{"class":207},[162,86438,1730],{"class":168},[162,86440,81639],{"class":207},[162,86442,54564],{"class":172},[162,86444,4433],{"class":168},[162,86446,86447,86449,86451,86453,86455,86457],{"class":164,"line":3022},[162,86448,57776],{"class":207},[162,86450,1730],{"class":168},[162,86452,3608],{"class":207},[162,86454,54564],{"class":172},[162,86456,54628],{"class":207},[162,86458,4433],{"class":168},[162,86460,86461],{"class":164,"line":3027},[162,86462,5305],{"class":168},[162,86464,86465],{"class":164,"line":3046},[162,86466,301],{"emptyLinePlaceholder":300},[162,86468,86469,86471],{"class":164,"line":3052},[162,86470,81690],{"class":5082},[162,86472,1722],{"class":168},[162,86474,86475,86477,86479,86481,86483],{"class":164,"line":3057},[162,86476,57765],{"class":207},[162,86478,1730],{"class":168},[162,86480,3863],{"class":207},[162,86482,54564],{"class":172},[162,86484,4433],{"class":168},[162,86486,86487,86489,86491,86493,86495,86497,86499],{"class":164,"line":3072},[162,86488,64928],{"class":207},[162,86490,1730],{"class":168},[162,86492,31210],{"class":207},[162,86494,81745],{"class":207},[162,86496,81748],{"class":207},[162,86498,3979],{"class":172},[162,86500,4433],{"class":168},[162,86502,86503,86505,86507,86509],{"class":164,"line":3077},[162,86504,58079],{"class":207},[162,86506,1730],{"class":168},[162,86508,54549],{"class":207},[162,86510,4433],{"class":168},[162,86512,86513,86515,86517,86519,86521,86523,86525],{"class":164,"line":3100},[162,86514,65045],{"class":207},[162,86516,1730],{"class":168},[162,86518,208],{"class":207},[162,86520,54564],{"class":172},[162,86522,54593],{"class":207},[162,86524,65312],{"class":207},[162,86526,4433],{"class":168},[162,86528,86529],{"class":164,"line":3140},[162,86530,5305],{"class":168},[162,86532,86533],{"class":164,"line":4878},[162,86534,301],{"emptyLinePlaceholder":300},[162,86536,86537,86539],{"class":164,"line":4883},[162,86538,81808],{"class":5082},[162,86540,1722],{"class":168},[162,86542,86543,86545,86547,86549],{"class":164,"line":4897},[162,86544,65093],{"class":207},[162,86546,1730],{"class":168},[162,86548,65098],{"class":207},[162,86550,4433],{"class":168},[162,86552,86553,86555,86557,86559],{"class":164,"line":4902},[162,86554,57954],{"class":207},[162,86556,1730],{"class":168},[162,86558,64886],{"class":207},[162,86560,4433],{"class":168},[162,86562,86563],{"class":164,"line":5694},[162,86564,5305],{"class":168},[162,86566,86567],{"class":164,"line":5708},[162,86568,301],{"emptyLinePlaceholder":300},[162,86570,86571,86573,86575],{"class":164,"line":5716},[162,86572,81690],{"class":5082},[162,86574,58684],{"class":54373},[162,86576,1722],{"class":168},[162,86578,86579,86581,86583,86585,86587],{"class":164,"line":5721},[162,86580,57841],{"class":207},[162,86582,1730],{"class":168},[162,86584,3899],{"class":207},[162,86586,54564],{"class":172},[162,86588,4433],{"class":168},[162,86590,86591,86593,86595,86597,86599],{"class":164,"line":5727},[162,86592,57855],{"class":207},[162,86594,1730],{"class":168},[162,86596,3899],{"class":207},[162,86598,54564],{"class":172},[162,86600,4433],{"class":168},[162,86602,86603,86605,86607,86609,86611],{"class":164,"line":5733},[162,86604,64818],{"class":207},[162,86606,1730],{"class":168},[162,86608,637],{"class":207},[162,86610,54564],{"class":172},[162,86612,4433],{"class":168},[162,86614,86615],{"class":164,"line":5738},[162,86616,5305],{"class":168},[162,86618,86619],{"class":164,"line":11052},[162,86620,301],{"emptyLinePlaceholder":300},[162,86622,86623,86625,86627],{"class":164,"line":11076},[162,86624,81690],{"class":5082},[162,86626,65372],{"class":5082},[162,86628,1722],{"class":168},[162,86630,86631,86633,86635,86637,86639],{"class":164,"line":11081},[162,86632,57841],{"class":207},[162,86634,1730],{"class":168},[162,86636,4845],{"class":207},[162,86638,54564],{"class":172},[162,86640,4433],{"class":168},[162,86642,86643],{"class":164,"line":11087},[162,86644,5305],{"class":168},[162,86646,86647],{"class":164,"line":11114},[162,86648,301],{"emptyLinePlaceholder":300},[162,86650,86651,86653,86655,86658],{"class":164,"line":11119},[162,86652,81690],{"class":5082},[162,86654,65372],{"class":5082},[162,86656,86657],{"class":5082}," .tag",[162,86659,1722],{"class":168},[162,86661,86662,86664,86666,86668],{"class":164,"line":11125},[162,86663,58079],{"class":207},[162,86665,1730],{"class":168},[162,86667,63937],{"class":207},[162,86669,4433],{"class":168},[162,86671,86672,86674,86676,86678,86680],{"class":164,"line":11137},[162,86673,57765],{"class":207},[162,86675,1730],{"class":168},[162,86677,213],{"class":207},[162,86679,54564],{"class":172},[162,86681,4433],{"class":168},[162,86683,86684,86686,86688,86690,86692],{"class":164,"line":11149},[162,86685,57992],{"class":207},[162,86687,1730],{"class":168},[162,86689,3788],{"class":207},[162,86691,54564],{"class":172},[162,86693,4433],{"class":168},[162,86695,86696,86698,86700,86702],{"class":164,"line":11161},[162,86697,60485],{"class":207},[162,86699,1730],{"class":168},[162,86701,65138],{"class":207},[162,86703,4433],{"class":168},[162,86705,86706],{"class":164,"line":12816},[162,86707,5305],{"class":168},[162,86709,86710],{"class":164,"line":12841},[162,86711,301],{"emptyLinePlaceholder":300},[162,86713,86714,86716,86718],{"class":164,"line":12864},[162,86715,81690],{"class":5082},[162,86717,81982],{"class":5082},[162,86719,1735],{"class":168},[162,86721,86722,86724,86727],{"class":164,"line":12888},[162,86723,81690],{"class":5082},[162,86725,86726],{"class":5082}," .sub-total",[162,86728,1722],{"class":168},[162,86730,86731,86733,86735,86737,86739],{"class":164,"line":12893},[162,86732,57992],{"class":207},[162,86734,1730],{"class":168},[162,86736,242],{"class":207},[162,86738,54564],{"class":172},[162,86740,4433],{"class":168},[162,86742,86743,86745,86747,86749],{"class":164,"line":12898},[162,86744,60485],{"class":207},[162,86746,1730],{"class":168},[162,86748,82005],{"class":207},[162,86750,4433],{"class":168},[162,86752,86753,86755,86757,86759],{"class":164,"line":12903},[162,86754,64905],{"class":207},[162,86756,1730],{"class":168},[162,86758,208],{"class":207},[162,86760,4433],{"class":168},[162,86762,86763],{"class":164,"line":12912},[162,86764,5305],{"class":168},[162,86766,86767],{"class":164,"line":12917},[162,86768,301],{"emptyLinePlaceholder":300},[162,86770,86771,86773,86775],{"class":164,"line":12923},[162,86772,81690],{"class":5082},[162,86774,82022],{"class":5082},[162,86776,1735],{"class":168},[162,86778,86779,86781,86784],{"class":164,"line":12944},[162,86780,81690],{"class":5082},[162,86782,86783],{"class":5082}," .sub-total::before",[162,86785,1735],{"class":168},[162,86787,86788,86791],{"class":164,"line":12950},[162,86789,86790],{"class":5082},"    .amount::before",[162,86792,1722],{"class":168},[162,86794,86795,86797,86799,86801],{"class":164,"line":12964},[162,86796,82029],{"class":207},[162,86798,1730],{"class":168},[162,86800,82034],{"class":179},[162,86802,4433],{"class":168},[162,86804,86805,86807,86809,86811,86813],{"class":164,"line":12970},[162,86806,57992],{"class":207},[162,86808,1730],{"class":168},[162,86810,3788],{"class":207},[162,86812,54564],{"class":172},[162,86814,4433],{"class":168},[162,86816,86817],{"class":164,"line":12997},[162,86818,5305],{"class":168},[162,86820,86821],{"class":164,"line":13006},[162,86822,301],{"emptyLinePlaceholder":300},[162,86824,86825,86827,86830],{"class":164,"line":13012},[162,86826,81690],{"class":5082},[162,86828,86829],{"class":5082}," .spec",[162,86831,1722],{"class":168},[162,86833,86834,86836,86838,86840],{"class":164,"line":13020},[162,86835,64905],{"class":207},[162,86837,1730],{"class":168},[162,86839,213],{"class":207},[162,86841,4433],{"class":168},[162,86843,86844,86846,86848,86851],{"class":164,"line":13025},[162,86845,60485],{"class":207},[162,86847,1730],{"class":168},[162,86849,86850],{"class":207},"#888",[162,86852,4433],{"class":168},[162,86854,86855,86857,86859,86861,86863],{"class":164,"line":19695},[162,86856,57992],{"class":207},[162,86858,1730],{"class":168},[162,86860,3838],{"class":207},[162,86862,54564],{"class":172},[162,86864,4433],{"class":168},[162,86866,86867,86869,86871,86873,86875],{"class":164,"line":19701},[162,86868,65068],{"class":207},[162,86870,1730],{"class":168},[162,86872,1011],{"class":207},[162,86874,54564],{"class":172},[162,86876,4433],{"class":168},[162,86878,86879],{"class":164,"line":19724},[162,86880,5305],{"class":168},[162,86882,86883],{"class":164,"line":19730},[162,86884,301],{"emptyLinePlaceholder":300},[162,86886,86887,86889,86892],{"class":164,"line":19753},[162,86888,81690],{"class":5082},[162,86890,86891],{"class":5082}," .count",[162,86893,1722],{"class":168},[162,86895,86896,86898,86900,86902],{"class":164,"line":19767},[162,86897,64905],{"class":207},[162,86899,1730],{"class":168},[162,86901,208],{"class":207},[162,86903,4433],{"class":168},[162,86905,86906,86908,86910,86913],{"class":164,"line":19787},[162,86907,60485],{"class":207},[162,86909,1730],{"class":168},[162,86911,86912],{"class":207},"#aaa",[162,86914,4433],{"class":168},[162,86916,86917],{"class":164,"line":19793},[162,86918,5305],{"class":168},[162,86920,86921],{"class":164,"line":19804},[162,86922,301],{"emptyLinePlaceholder":300},[162,86924,86925,86927],{"class":164,"line":19827},[162,86926,75540],{"class":5082},[162,86928,1722],{"class":168},[162,86930,86931,86933,86935,86937,86939],{"class":164,"line":19849},[162,86932,57841],{"class":207},[162,86934,1730],{"class":168},[162,86936,81639],{"class":207},[162,86938,54564],{"class":172},[162,86940,4433],{"class":168},[162,86942,86943,86945,86947,86949,86951],{"class":164,"line":19854},[162,86944,57776],{"class":207},[162,86946,1730],{"class":168},[162,86948,312],{"class":207},[162,86950,54628],{"class":207},[162,86952,4433],{"class":168},[162,86954,86955,86957,86959,86961],{"class":164,"line":19860},[162,86956,58079],{"class":207},[162,86958,1730],{"class":168},[162,86960,54549],{"class":207},[162,86962,4433],{"class":168},[162,86964,86965,86967,86969,86971],{"class":164,"line":19874},[162,86966,58090],{"class":207},[162,86968,1730],{"class":168},[162,86970,54652],{"class":207},[162,86972,4433],{"class":168},[162,86974,86975,86978,86980,86982,86984,86986,86989],{"class":164,"line":19887},[162,86976,86977],{"class":207},"      border-top",[162,86979,1730],{"class":168},[162,86981,208],{"class":207},[162,86983,54564],{"class":172},[162,86985,54593],{"class":207},[162,86987,86988],{"class":207}," #4e4e4e",[162,86990,4433],{"class":168},[162,86992,86993,86995,86997,86999,87001],{"class":164,"line":19892},[162,86994,57765],{"class":207},[162,86996,1730],{"class":168},[162,86998,1011],{"class":207},[162,87000,54564],{"class":172},[162,87002,4433],{"class":168},[162,87004,87005],{"class":164,"line":19906},[162,87006,5305],{"class":168},[162,87008,87009],{"class":164,"line":19911},[162,87010,301],{"emptyLinePlaceholder":300},[162,87012,87013,87015,87018],{"class":164,"line":19917},[162,87014,75540],{"class":5082},[162,87016,87017],{"class":5082}," .amount",[162,87019,1722],{"class":168},[162,87021,87022,87024,87026,87028,87030],{"class":164,"line":19922},[162,87023,57992],{"class":207},[162,87025,1730],{"class":168},[162,87027,242],{"class":207},[162,87029,54564],{"class":172},[162,87031,4433],{"class":168},[162,87033,87034,87036,87038,87040],{"class":164,"line":19936},[162,87035,60485],{"class":207},[162,87037,1730],{"class":168},[162,87039,82005],{"class":207},[162,87041,4433],{"class":168},[162,87043,87044,87046,87048,87050],{"class":164,"line":19941},[162,87045,65402],{"class":207},[162,87047,1730],{"class":168},[162,87049,54561],{"class":207},[162,87051,4433],{"class":168},[162,87053,87054,87056,87058,87060,87062],{"class":164,"line":19946},[162,87055,64818],{"class":207},[162,87057,1730],{"class":168},[162,87059,3941],{"class":207},[162,87061,54564],{"class":172},[162,87063,4433],{"class":168},[162,87065,87066],{"class":164,"line":19960},[162,87067,5305],{"class":168},[162,87069,87070,87072,87074],{"class":164,"line":19972},[162,87071,55487],{"class":168},[162,87073,3219],{"class":54373},[162,87075,54380],{"class":168},[162,87077,87078,87080,87082],{"class":164,"line":19977},[162,87079,54857],{"class":168},[162,87081,54407],{"class":54373},[162,87083,54380],{"class":168},[162,87085,87086],{"class":164,"line":19990},[162,87087,301],{"emptyLinePlaceholder":300},[162,87089,87090,87092,87094],{"class":164,"line":19995},[162,87091,4187],{"class":168},[162,87093,54872],{"class":54373},[162,87095,54380],{"class":168},[162,87097,87098,87100,87102,87104,87106,87108],{"class":164,"line":20000},[162,87099,55215],{"class":168},[162,87101,54683],{"class":54373},[162,87103,56556],{"class":5082},[162,87105,173],{"class":168},[162,87107,65676],{"class":179},[162,87109,54380],{"class":168},[162,87111,87112,87114,87116],{"class":164,"line":20005},[162,87113,55487],{"class":168},[162,87115,54683],{"class":54373},[162,87117,54380],{"class":168},[162,87119,87120,87122,87124,87126,87128,87130],{"class":164,"line":20018},[162,87121,55215],{"class":168},[162,87123,54683],{"class":54373},[162,87125,56556],{"class":5082},[162,87127,173],{"class":168},[162,87129,65648],{"class":179},[162,87131,54380],{"class":168},[162,87133,87134,87136,87138,87141,87143,87145,87147,87150,87152,87154,87156,87158],{"class":164,"line":20023},[162,87135,54414],{"class":168},[162,87137,54683],{"class":54373},[162,87139,87140],{"class":168},">合计：\u003C",[162,87142,162],{"class":54373},[162,87144,56556],{"class":5082},[162,87146,173],{"class":168},[162,87148,87149],{"class":179},"\"amount\"",[162,87151,58384],{"class":168},[162,87153,162],{"class":54373},[162,87155,58384],{"class":168},[162,87157,54683],{"class":54373},[162,87159,54380],{"class":168},[162,87161,87162,87164,87166],{"class":164,"line":35709},[162,87163,55487],{"class":168},[162,87165,54683],{"class":54373},[162,87167,54380],{"class":168},[162,87169,87170,87172,87174],{"class":164,"line":35715},[162,87171,55215],{"class":168},[162,87173,54885],{"class":54373},[162,87175,54380],{"class":168},[162,87177,87178,87180,87182,87184],{"class":164,"line":35721},[162,87179,14317],{"class":172},[162,87181,82442],{"class":207},[162,87183,16659],{"class":172},[162,87185,2030],{"class":168},[162,87187,87188],{"class":164,"line":35727},[162,87189,82451],{"class":168},[162,87191,87192,87194,87196],{"class":164,"line":35733},[162,87193,82456],{"class":168},[162,87195,82459],{"class":179},[162,87197,1735],{"class":168},[162,87199,87200,87202,87204],{"class":164,"line":35744},[162,87201,82466],{"class":168},[162,87203,82469],{"class":179},[162,87205,1735],{"class":168},[162,87207,87208,87210,87213],{"class":164,"line":35750},[162,87209,82476],{"class":168},[162,87211,87212],{"class":207},"289.9",[162,87214,1735],{"class":168},[162,87216,87217,87219,87221],{"class":164,"line":35770},[162,87218,82486],{"class":168},[162,87220,82489],{"class":179},[162,87222,1735],{"class":168},[162,87224,87225,87228,87230],{"class":164,"line":35776},[162,87226,87227],{"class":168},"        count: ",[162,87229,213],{"class":207},[162,87231,1735],{"class":168},[162,87233,87234,87237,87240],{"class":164,"line":35787},[162,87235,87236],{"class":168},"        spec: { color: ",[162,87238,87239],{"class":179},"'白色'",[162,87241,58673],{"class":168},[162,87243,87244],{"class":164,"line":35793},[162,87245,80957],{"class":168},[162,87247,87248],{"class":164,"line":35799},[162,87249,82451],{"class":168},[162,87251,87252,87254,87256],{"class":164,"line":35805},[162,87253,82456],{"class":168},[162,87255,82550],{"class":179},[162,87257,1735],{"class":168},[162,87259,87260,87262,87264],{"class":164,"line":35811},[162,87261,82466],{"class":168},[162,87263,82559],{"class":179},[162,87265,1735],{"class":168},[162,87267,87268,87270,87273],{"class":164,"line":35817},[162,87269,82476],{"class":168},[162,87271,87272],{"class":207},"109.8",[162,87274,1735],{"class":168},[162,87276,87277,87279,87281],{"class":164,"line":35823},[162,87278,82486],{"class":168},[162,87280,82577],{"class":179},[162,87282,1735],{"class":168},[162,87284,87285,87287,87289],{"class":164,"line":35829},[162,87286,87227],{"class":168},[162,87288,218],{"class":207},[162,87290,1735],{"class":168},[162,87292,87293,87296,87298,87300,87302],{"class":164,"line":35849},[162,87294,87295],{"class":168},"        spec: { size: ",[162,87297,84968],{"class":179},[162,87299,58533],{"class":168},[162,87301,84973],{"class":179},[162,87303,58673],{"class":168},[162,87305,87306],{"class":164,"line":35855},[162,87307,80957],{"class":168},[162,87309,87310],{"class":164,"line":35871},[162,87311,82451],{"class":168},[162,87313,87314,87316,87318],{"class":164,"line":35877},[162,87315,82456],{"class":168},[162,87317,82594],{"class":179},[162,87319,1735],{"class":168},[162,87321,87322,87324,87326],{"class":164,"line":35891},[162,87323,82466],{"class":168},[162,87325,82603],{"class":179},[162,87327,1735],{"class":168},[162,87329,87330,87332,87335],{"class":164,"line":35897},[162,87331,82476],{"class":168},[162,87333,87334],{"class":207},"488",[162,87336,1735],{"class":168},[162,87338,87339,87341,87343],{"class":164,"line":35912},[162,87340,82486],{"class":168},[162,87342,82621],{"class":179},[162,87344,1735],{"class":168},[162,87346,87347,87349,87351],{"class":164,"line":35918},[162,87348,87227],{"class":168},[162,87350,208],{"class":207},[162,87352,1735],{"class":168},[162,87354,87355,87357,87360,87363,87366],{"class":164,"line":35927},[162,87356,87236],{"class":168},[162,87358,87359],{"class":179},"'青色'",[162,87361,87362],{"class":168},", sum: ",[162,87364,87365],{"class":179},"'一大四小'",[162,87367,58673],{"class":168},[162,87369,87370],{"class":164,"line":35933},[162,87371,80957],{"class":168},[162,87373,87374],{"class":164,"line":35942},[162,87375,82451],{"class":168},[162,87377,87378,87380,87382],{"class":164,"line":35948},[162,87379,82456],{"class":168},[162,87381,82638],{"class":179},[162,87383,1735],{"class":168},[162,87385,87386,87388,87390],{"class":164,"line":35954},[162,87387,82466],{"class":168},[162,87389,82647],{"class":179},[162,87391,1735],{"class":168},[162,87393,87394,87396,87399],{"class":164,"line":35963},[162,87395,82476],{"class":168},[162,87397,87398],{"class":207},"139",[162,87400,1735],{"class":168},[162,87402,87403,87405,87407],{"class":164,"line":35969},[162,87404,82486],{"class":168},[162,87406,82665],{"class":179},[162,87408,1735],{"class":168},[162,87410,87411,87413,87415],{"class":164,"line":35980},[162,87412,87227],{"class":168},[162,87414,208],{"class":207},[162,87416,1735],{"class":168},[162,87418,87419,87421,87424,87426,87429],{"class":164,"line":35986},[162,87420,87295],{"class":168},[162,87422,87423],{"class":179},"'小号'",[162,87425,58533],{"class":168},[162,87427,87428],{"class":179},"'紫色'",[162,87430,58539],{"class":168},[162,87432,87433,87436],{"class":164,"line":36005},[162,87434,87435],{"class":168},"        gift: ",[162,87437,87438],{"class":179},"'50g茶叶,清洗球'\n",[162,87440,87441],{"class":164,"line":36011},[162,87442,55468],{"class":168},[162,87444,87445],{"class":164,"line":36022},[162,87446,56179],{"class":168},[162,87448,87449],{"class":164,"line":36028},[162,87450,87451],{"class":361},"    \u002F\u002F  1.根据数据渲染页面\n",[162,87453,87454,87456,87458,87460,87462,87464,87466,87468,87470,87472,87474,87476],{"class":164,"line":36048},[162,87455,55477],{"class":168},[162,87457,57469],{"class":5082},[162,87459,604],{"class":168},[162,87461,82966],{"class":179},[162,87463,77314],{"class":168},[162,87465,173],{"class":172},[162,87467,83113],{"class":168},[162,87469,77109],{"class":5082},[162,87471,604],{"class":168},[162,87473,82860],{"class":671},[162,87475,82863],{"class":172},[162,87477,1722],{"class":168},[162,87479,87480],{"class":164,"line":36064},[162,87481,87482],{"class":361},"      \u002F\u002F 对象解构\n",[162,87484,87485,87487,87489,87491,87493,87495,87497,87500,87502,87504,87506,87509,87511,87514,87516,87518],{"class":164,"line":36070},[162,87486,61297],{"class":172},[162,87488,82872],{"class":168},[162,87490,82885],{"class":207},[162,87492,183],{"class":168},[162,87494,82875],{"class":207},[162,87496,183],{"class":168},[162,87498,87499],{"class":207},"count",[162,87501,183],{"class":168},[162,87503,82880],{"class":207},[162,87505,183],{"class":168},[162,87507,87508],{"class":207},"spec",[162,87510,183],{"class":168},[162,87512,87513],{"class":207},"gift",[162,87515,82888],{"class":168},[162,87517,173],{"class":172},[162,87519,82893],{"class":168},[162,87521,87522],{"class":164,"line":36084},[162,87523,87524],{"class":361},"      \u002F\u002F 规格文字模块处理\n",[162,87526,87527,87529,87532,87534,87536,87538,87540,87542,87544,87546],{"class":164,"line":36090},[162,87528,61297],{"class":172},[162,87530,87531],{"class":207}," text",[162,87533,16659],{"class":172},[162,87535,85003],{"class":168},[162,87537,85006],{"class":5082},[162,87539,85009],{"class":168},[162,87541,77288],{"class":5082},[162,87543,604],{"class":168},[162,87545,85016],{"class":179},[162,87547,434],{"class":168},[162,87549,87550],{"class":164,"line":36096},[162,87551,87552],{"class":361},"      \u002F\u002F 处理赠品模块\n",[162,87554,87555,87557,87559,87561,87564,87566,87568,87570,87572,87575,87577,87579,87581,87583,87585,87588,87590,87593,87595,87597,87599,87601,87603,87605],{"class":164,"line":36107},[162,87556,61297],{"class":172},[162,87558,76984],{"class":207},[162,87560,16659],{"class":172},[162,87562,87563],{"class":168}," gift ",[162,87565,4259],{"class":172},[162,87567,86177],{"class":168},[162,87569,86180],{"class":5082},[162,87571,604],{"class":168},[162,87573,87574],{"class":179},"','",[162,87576,33910],{"class":168},[162,87578,77109],{"class":5082},[162,87580,604],{"class":168},[162,87582,82860],{"class":671},[162,87584,82863],{"class":172},[162,87586,87587],{"class":179}," `\u003Cspan class=\"tag\">【赠品】${",[162,87589,82860],{"class":168},[162,87591,87592],{"class":179},"}\u003C\u002Fspan>`",[162,87594,33910],{"class":168},[162,87596,77288],{"class":5082},[162,87598,604],{"class":168},[162,87600,77293],{"class":179},[162,87602,1823],{"class":168},[162,87604,1332],{"class":172},[162,87606,73169],{"class":179},[162,87608,87609],{"class":164,"line":36113},[162,87610,87611],{"class":361},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[162,87613,87614,87616,87619,87621,87624,87626,87628,87630,87633,87635,87637,87639,87642,87644,87646],{"class":164,"line":36119},[162,87615,61297],{"class":172},[162,87617,87618],{"class":207}," subtotal",[162,87620,16659],{"class":172},[162,87622,87623],{"class":168}," ((price ",[162,87625,3745],{"class":172},[162,87627,8861],{"class":207},[162,87629,9624],{"class":172},[162,87631,87632],{"class":168}," count) ",[162,87634,946],{"class":172},[162,87636,8861],{"class":207},[162,87638,33910],{"class":168},[162,87640,87641],{"class":5082},"toFixed",[162,87643,604],{"class":168},[162,87645,213],{"class":207},[162,87647,434],{"class":168},[162,87649,87650],{"class":164,"line":36129},[162,87651,301],{"emptyLinePlaceholder":300},[162,87653,87654,87656],{"class":164,"line":36135},[162,87655,77047],{"class":172},[162,87657,73233],{"class":179},[162,87659,87660],{"class":164,"line":36146},[162,87661,87662],{"class":179},"        \u003Cdiv class=\"item\">\n",[162,87664,87665,87668,87670],{"class":164,"line":36152},[162,87666,87667],{"class":179},"          \u003Cimg src=\"${",[162,87669,82885],{"class":168},[162,87671,82917],{"class":179},[162,87673,87674,87677,87679,87682,87684],{"class":164,"line":36162},[162,87675,87676],{"class":179},"          \u003Cp class=\"name\">${",[162,87678,82875],{"class":168},[162,87680,87681],{"class":179},"}${",[162,87683,4442],{"class":168},[162,87685,82927],{"class":179},[162,87687,87688,87691,87693],{"class":164,"line":36167},[162,87689,87690],{"class":179},"          \u003Cp class=\"spec\">${",[162,87692,8295],{"class":168},[162,87694,82927],{"class":179},[162,87696,87697,87700,87702,87704,87706,87708,87710,87712],{"class":164,"line":36173},[162,87698,87699],{"class":179},"          \u003Cp class=\"price\">${",[162,87701,82880],{"class":168},[162,87703,3847],{"class":179},[162,87705,87641],{"class":5082},[162,87707,604],{"class":179},[162,87709,213],{"class":207},[162,87711,3720],{"class":179},[162,87713,82927],{"class":179},[162,87715,87716,87719,87721],{"class":164,"line":36222},[162,87717,87718],{"class":179},"          \u003Cp class=\"count\">x${",[162,87720,87499],{"class":168},[162,87722,82927],{"class":179},[162,87724,87725,87728,87731],{"class":164,"line":36269},[162,87726,87727],{"class":179},"          \u003Cp class=\"sub-total\">${",[162,87729,87730],{"class":168},"subtotal",[162,87732,82927],{"class":179},[162,87734,87735],{"class":164,"line":36274},[162,87736,87737],{"class":179},"        \u003C\u002Fdiv> \n",[162,87739,87740],{"class":164,"line":36280},[162,87741,87742],{"class":179},"             `\n",[162,87744,87745,87748,87750,87752,87754],{"class":164,"line":36299},[162,87746,87747],{"class":168},"    }).",[162,87749,77288],{"class":5082},[162,87751,604],{"class":168},[162,87753,77293],{"class":179},[162,87755,434],{"class":168},[162,87757,87758],{"class":164,"line":36305},[162,87759,87760],{"class":361},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[162,87762,87763,87765,87767,87769,87771,87774,87776,87779,87781,87783,87785,87788,87791,87793,87796,87798,87800,87802,87805,87807,87809,87811,87813],{"class":164,"line":36324},[162,87764,14317],{"class":172},[162,87766,65852],{"class":207},[162,87768,16659],{"class":172},[162,87770,83113],{"class":168},[162,87772,87773],{"class":5082},"reduce",[162,87775,5494],{"class":168},[162,87777,87778],{"class":671},"prev",[162,87780,183],{"class":168},[162,87782,82860],{"class":671},[162,87784,1823],{"class":168},[162,87786,87787],{"class":172},"=>",[162,87789,87790],{"class":168}," prev ",[162,87792,3771],{"class":172},[162,87794,87795],{"class":168}," (item.price ",[162,87797,3745],{"class":172},[162,87799,8861],{"class":207},[162,87801,9624],{"class":172},[162,87803,87804],{"class":168}," item.count) ",[162,87806,946],{"class":172},[162,87808,8861],{"class":207},[162,87810,183],{"class":168},[162,87812,312],{"class":207},[162,87814,434],{"class":168},[162,87816,87817,87819,87821,87823,87826,87828,87830,87833,87835,87837,87839],{"class":164,"line":36330},[162,87818,55477],{"class":168},[162,87820,57469],{"class":5082},[162,87822,604],{"class":168},[162,87824,87825],{"class":179},"'.amount'",[162,87827,77314],{"class":168},[162,87829,173],{"class":172},[162,87831,87832],{"class":168}," total.",[162,87834,87641],{"class":5082},[162,87836,604],{"class":168},[162,87838,213],{"class":207},[162,87840,434],{"class":168},[162,87842,87843,87845,87847],{"class":164,"line":36336},[162,87844,55487],{"class":168},[162,87846,54885],{"class":54373},[162,87848,54380],{"class":168},[162,87850,87851,87853,87855],{"class":164,"line":36346},[162,87852,54857],{"class":168},[162,87854,54872],{"class":54373},[162,87856,54380],{"class":168},[162,87858,87859],{"class":164,"line":36351},[162,87860,301],{"emptyLinePlaceholder":300},[162,87862,87863,87865,87867],{"class":164,"line":36357},[162,87864,54857],{"class":168},[162,87866,53708],{"class":54373},[162,87868,54380],{"class":168},[14,87870,87872],{"id":87871},"_411-编程思想","4.11 编程思想",[3284,87874,87876],{"id":87875},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,87878,87879,87882],{},[3453,87880,87881],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,87884,87885],{},"调用就可以了",[19,87887,87888],{},[4602,87889],{"alt":158,"src":87890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[3284,87892,87894],{"id":87893},"_4112-面向对象","4.11.2 面向对象",[19,87896,87897],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,87899,87900],{},[4602,87901],{"alt":158,"src":87902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,87904,87905],{},"面向对象的特性：",[4279,87907,87908,87911,87914],{},[1455,87909,87910],{},"封装性",[1455,87912,87913],{},"继承性",[1455,87915,87916],{},"多态性",[3284,87918,87920],{"id":87919},"_4113-两者比较","4.11.3 两者比较",[19,87922,87923],{},[4602,87924],{"alt":158,"src":87925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,87927,87929],{"id":87928},"_412-构造函数回顾","4.12 构造函数回顾",[19,87931,87932],{},[4602,87933],{"alt":158,"src":87934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,87936,87937],{},[4602,87938],{"alt":158,"src":87939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,87941,87942],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,87944,87945],{},[4602,87946],{"alt":158,"src":87947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,87949,87951],{"id":87950},"_413-原型","4.13 原型",[3284,87953,87955],{"id":87954},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,87957,87958],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,87960,87961],{},[4602,87962],{"alt":158,"src":87963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,87965,87966],{},[4602,87967],{"alt":158,"src":87968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,87970,87971],{},"原型是构造函数的属性，它也是一个对象",[19,87973,87974],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,87976,87977],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[153,87979,87981],{"className":56137,"code":87980,"language":56139,"meta":158,"style":158},"\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",[71,87982,87983,87991,87996,88004,88009,88014,88019,88024,88029,88033,88037,88041,88046,88051,88055,88060,88065,88070,88075,88080,88084,88092],{"__ignoreMap":158},[162,87984,87985,87987,87989],{"class":164,"line":165},[162,87986,4187],{"class":168},[162,87988,54872],{"class":54373},[162,87990,54380],{"class":168},[162,87992,87993],{"class":164,"line":197},[162,87994,87995],{"class":361},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[162,87997,87998,88000,88002],{"class":164,"line":228},[162,87999,55215],{"class":168},[162,88001,54885],{"class":54373},[162,88003,54380],{"class":168},[162,88005,88006],{"class":164,"line":252},[162,88007,88008],{"class":168},"    function Star(uname, age) {\n",[162,88010,88011],{"class":164,"line":328},[162,88012,88013],{"class":168},"      this.uname = uname,\n",[162,88015,88016],{"class":164,"line":466},[162,88017,88018],{"class":168},"        this.age = age\n",[162,88020,88021],{"class":164,"line":471},[162,88022,88023],{"class":168},"      \u002F\u002F this.sing = function () {\n",[162,88025,88026],{"class":164,"line":687},[162,88027,88028],{"class":168},"      \u002F\u002F   console.log('唱歌')\n",[162,88030,88031],{"class":164,"line":692},[162,88032,301],{"emptyLinePlaceholder":300},[162,88034,88035],{"class":164,"line":698},[162,88036,63106],{"class":168},[162,88038,88039],{"class":164,"line":2955},[162,88040,5305],{"class":168},[162,88042,88043],{"class":164,"line":2960},[162,88044,88045],{"class":168},"    Star.prototype.sing = function () {\n",[162,88047,88048],{"class":164,"line":2971},[162,88049,88050],{"class":168},"      console.log('唱歌')\n",[162,88052,88053],{"class":164,"line":2984},[162,88054,5305],{"class":168},[162,88056,88057],{"class":164,"line":2989},[162,88058,88059],{"class":168},"    \u002F\u002F console.dir(Star.prototype)\n",[162,88061,88062],{"class":164,"line":3011},[162,88063,88064],{"class":168},"    const pink = new Star('pink', 18)\n",[162,88066,88067],{"class":164,"line":3022},[162,88068,88069],{"class":168},"    const red = new Star('red', 20)\n",[162,88071,88072],{"class":164,"line":3027},[162,88073,88074],{"class":168},"    pink.sing()\n",[162,88076,88077],{"class":164,"line":3046},[162,88078,88079],{"class":168},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[162,88081,88082],{"class":164,"line":3052},[162,88083,301],{"emptyLinePlaceholder":300},[162,88085,88086,88088,88090],{"class":164,"line":3057},[162,88087,55487],{"class":168},[162,88089,54885],{"class":54373},[162,88091,54380],{"class":168},[162,88093,88094,88096,88098],{"class":164,"line":3072},[162,88095,54857],{"class":168},[162,88097,54872],{"class":54373},[162,88099,54380],{"class":168},[19,88101,88102],{},[4602,88103],{"alt":158,"src":88104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[153,88106,88108],{"className":56137,"code":88107,"language":56139,"meta":158,"style":158},"\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",[71,88109,88110,88118,88126,88131,88136,88141,88146,88150,88155,88160,88165,88169,88174,88178,88182,88187,88191,88199],{"__ignoreMap":158},[162,88111,88112,88114,88116],{"class":164,"line":165},[162,88113,4187],{"class":168},[162,88115,54872],{"class":54373},[162,88117,54380],{"class":168},[162,88119,88120,88122,88124],{"class":164,"line":197},[162,88121,55215],{"class":168},[162,88123,54885],{"class":54373},[162,88125,54380],{"class":168},[162,88127,88128],{"class":164,"line":228},[162,88129,88130],{"class":168},"    let that\n",[162,88132,88133],{"class":164,"line":252},[162,88134,88135],{"class":168},"    function Star(uname) {\n",[162,88137,88138],{"class":164,"line":328},[162,88139,88140],{"class":168},"      this.uname = uname\n",[162,88142,88143],{"class":164,"line":466},[162,88144,88145],{"class":168},"      that = this\n",[162,88147,88148],{"class":164,"line":471},[162,88149,5305],{"class":168},[162,88151,88152],{"class":164,"line":687},[162,88153,88154],{"class":168},"    \u002F\u002F 实例对象是 ldh\n",[162,88156,88157],{"class":164,"line":692},[162,88158,88159],{"class":168},"    const ldh = new Star('刘德华')\n",[162,88161,88162],{"class":164,"line":698},[162,88163,88164],{"class":168},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[162,88166,88167],{"class":164,"line":2955},[162,88168,301],{"emptyLinePlaceholder":300},[162,88170,88171],{"class":164,"line":2960},[162,88172,88173],{"class":168},"    Star.sing = function () {\n",[162,88175,88176],{"class":164,"line":2971},[162,88177,88050],{"class":168},[162,88179,88180],{"class":164,"line":2984},[162,88181,5305],{"class":168},[162,88183,88184],{"class":164,"line":2989},[162,88185,88186],{"class":168},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[162,88188,88189],{"class":164,"line":3011},[162,88190,301],{"emptyLinePlaceholder":300},[162,88192,88193,88195,88197],{"class":164,"line":3022},[162,88194,55487],{"class":168},[162,88196,54885],{"class":54373},[162,88198,54380],{"class":168},[162,88200,88201,88203,88205],{"class":164,"line":3027},[162,88202,54857],{"class":168},[162,88204,54872],{"class":54373},[162,88206,54380],{"class":168},[19,88208,88209],{},"构造函数的this指向的是实例对象；",[19,88211,88212],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[3284,88214,88216],{"id":88215},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,88218,88219],{},[4602,88220],{"alt":158,"src":88221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[153,88223,88225],{"className":56137,"code":88224,"language":56139,"meta":158,"style":158},"\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",[71,88226,88227,88235,88243,88248,88253,88258,88263,88268,88273,88278,88283,88288,88293,88297,88302,88307,88312,88317,88321,88326,88331,88336,88341,88345,88350,88355,88360,88365,88369,88374,88378,88386],{"__ignoreMap":158},[162,88228,88229,88231,88233],{"class":164,"line":165},[162,88230,4187],{"class":168},[162,88232,54872],{"class":54373},[162,88234,54380],{"class":168},[162,88236,88237,88239,88241],{"class":164,"line":197},[162,88238,55215],{"class":168},[162,88240,54885],{"class":54373},[162,88242,54380],{"class":168},[162,88244,88245],{"class":164,"line":228},[162,88246,88247],{"class":168},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[162,88249,88250],{"class":164,"line":252},[162,88251,88252],{"class":168},"    const arr = [1, 2, 3]\n",[162,88254,88255],{"class":164,"line":328},[162,88256,88257],{"class":168},"    \u002F\u002F 自己定义数组的扩展方法\n",[162,88259,88260],{"class":164,"line":466},[162,88261,88262],{"class":168},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[162,88264,88265],{"class":164,"line":471},[162,88266,88267],{"class":168},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[162,88269,88270],{"class":164,"line":687},[162,88271,88272],{"class":168},"    \u002F\u002F ①.最大值\n",[162,88274,88275],{"class":164,"line":692},[162,88276,88277],{"class":168},"    Array.prototype.max = function () {\n",[162,88279,88280],{"class":164,"line":698},[162,88281,88282],{"class":168},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[162,88284,88285],{"class":164,"line":2955},[162,88286,88287],{"class":168},"      return Math.max(...this)\n",[162,88289,88290],{"class":164,"line":2960},[162,88291,88292],{"class":168},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[162,88294,88295],{"class":164,"line":2971},[162,88296,5305],{"class":168},[162,88298,88299],{"class":164,"line":2984},[162,88300,88301],{"class":168},"    console.log(arr.max())\n",[162,88303,88304],{"class":164,"line":2989},[162,88305,88306],{"class":168},"    \u002F\u002F ②最小值\n",[162,88308,88309],{"class":164,"line":3011},[162,88310,88311],{"class":168},"    Array.prototype.min = function () {\n",[162,88313,88314],{"class":164,"line":3022},[162,88315,88316],{"class":168},"      return Math.min(...this)\n",[162,88318,88319],{"class":164,"line":3027},[162,88320,5305],{"class":168},[162,88322,88323],{"class":164,"line":3046},[162,88324,88325],{"class":168},"    console.log(arr.min())\n",[162,88327,88328],{"class":164,"line":3052},[162,88329,88330],{"class":168},"    \u002F\u002F③求和\n",[162,88332,88333],{"class":164,"line":3057},[162,88334,88335],{"class":168},"    Array.prototype.sum = function () {\n",[162,88337,88338],{"class":164,"line":3072},[162,88339,88340],{"class":168},"      return this.reduce((prev, current) => prev + current, 0)\n",[162,88342,88343],{"class":164,"line":3077},[162,88344,5305],{"class":168},[162,88346,88347],{"class":164,"line":3100},[162,88348,88349],{"class":168},"    console.log(arr.sum())\n",[162,88351,88352],{"class":164,"line":3140},[162,88353,88354],{"class":168},"    \u002F\u002F ③排序\n",[162,88356,88357],{"class":164,"line":4878},[162,88358,88359],{"class":168},"    Array.prototype.rever = function () {\n",[162,88361,88362],{"class":164,"line":4883},[162,88363,88364],{"class":168},"      return this.reverse()\n",[162,88366,88367],{"class":164,"line":4897},[162,88368,5305],{"class":168},[162,88370,88371],{"class":164,"line":4902},[162,88372,88373],{"class":168},"    console.log(arr.rever())\n",[162,88375,88376],{"class":164,"line":5694},[162,88377,301],{"emptyLinePlaceholder":300},[162,88379,88380,88382,88384],{"class":164,"line":5708},[162,88381,55487],{"class":168},[162,88383,54885],{"class":54373},[162,88385,54380],{"class":168},[162,88387,88388,88390,88392],{"class":164,"line":5716},[162,88389,54857],{"class":168},[162,88391,54872],{"class":54373},[162,88393,54380],{"class":168},[19,88395,88396],{},[4602,88397],{"alt":158,"src":88398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[3284,88400,88402],{"id":88401},"_4133-constructor-属性","4.13.3 constructor 属性",[19,88404,88405],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,88407,88408],{},[4602,88409],{"alt":158,"src":88410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[153,88412,88414],{"className":56137,"code":88413,"language":56139,"meta":158,"style":158},"\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",[71,88415,88416,88424,88432,88437,88442,88446,88451,88456,88461,88469],{"__ignoreMap":158},[162,88417,88418,88420,88422],{"class":164,"line":165},[162,88419,4187],{"class":168},[162,88421,54872],{"class":54373},[162,88423,54380],{"class":168},[162,88425,88426,88428,88430],{"class":164,"line":197},[162,88427,55215],{"class":168},[162,88429,54885],{"class":54373},[162,88431,54380],{"class":168},[162,88433,88434],{"class":164,"line":228},[162,88435,88436],{"class":168},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[162,88438,88439],{"class":164,"line":252},[162,88440,88441],{"class":168},"    function Star() {\n",[162,88443,88444],{"class":164,"line":328},[162,88445,5305],{"class":168},[162,88447,88448],{"class":164,"line":466},[162,88449,88450],{"class":168},"    const ldh = new Star()\n",[162,88452,88453],{"class":164,"line":471},[162,88454,88455],{"class":168},"    console.log(Star.prototype)\n",[162,88457,88458],{"class":164,"line":687},[162,88459,88460],{"class":168},"    console.log(Star.prototype.constructor === Star)\n",[162,88462,88463,88465,88467],{"class":164,"line":692},[162,88464,55487],{"class":168},[162,88466,54885],{"class":54373},[162,88468,54380],{"class":168},[162,88470,88471,88473,88475],{"class":164,"line":698},[162,88472,54857],{"class":168},[162,88474,54872],{"class":54373},[162,88476,54380],{"class":168},[19,88478,88479],{},[4602,88480],{"alt":158,"src":88481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,88483,88484],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[153,88486,88488],{"className":56137,"code":88487,"language":56139,"meta":158,"style":158},"  \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",[71,88489,88490,88498,88502,88506,88510,88515,88520,88525,88529,88534,88539,88544,88549,88554,88559,88563,88567,88572,88577,88582,88586,88591,88596,88600,88604,88608],{"__ignoreMap":158},[162,88491,88492,88494,88496],{"class":164,"line":165},[162,88493,55215],{"class":168},[162,88495,54885],{"class":54373},[162,88497,54380],{"class":168},[162,88499,88500],{"class":164,"line":197},[162,88501,88436],{"class":168},[162,88503,88504],{"class":164,"line":228},[162,88505,88441],{"class":168},[162,88507,88508],{"class":164,"line":252},[162,88509,5305],{"class":168},[162,88511,88512],{"class":164,"line":328},[162,88513,88514],{"class":168},"    \u002F\u002F const ldh = new Star()\n",[162,88516,88517],{"class":164,"line":466},[162,88518,88519],{"class":168},"    \u002F\u002F console.log(Star.prototype)\n",[162,88521,88522],{"class":164,"line":471},[162,88523,88524],{"class":168},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[162,88526,88527],{"class":164,"line":687},[162,88528,301],{"emptyLinePlaceholder":300},[162,88530,88531],{"class":164,"line":692},[162,88532,88533],{"class":168},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[162,88535,88536],{"class":164,"line":698},[162,88537,88538],{"class":168},"    \u002F\u002F Star.prototype.sing = function () {\n",[162,88540,88541],{"class":164,"line":2955},[162,88542,88543],{"class":168},"    \u002F\u002F   console.log('唱歌')\n",[162,88545,88546],{"class":164,"line":2960},[162,88547,88548],{"class":168},"    \u002F\u002F }\n",[162,88550,88551],{"class":164,"line":2971},[162,88552,88553],{"class":168},"    \u002F\u002F Star.prototype.dance = function () {\n",[162,88555,88556],{"class":164,"line":2984},[162,88557,88558],{"class":168},"    \u002F\u002F   console.log('跳舞')\n",[162,88560,88561],{"class":164,"line":2989},[162,88562,88548],{"class":168},[162,88564,88565],{"class":164,"line":3011},[162,88566,88455],{"class":168},[162,88568,88569],{"class":164,"line":3022},[162,88570,88571],{"class":168},"    Star.prototype = {\n",[162,88573,88574],{"class":164,"line":3027},[162,88575,88576],{"class":168},"      sing: function () {\n",[162,88578,88579],{"class":164,"line":3046},[162,88580,88581],{"class":168},"        console.log('唱歌')\n",[162,88583,88584],{"class":164,"line":3052},[162,88585,80957],{"class":168},[162,88587,88588],{"class":164,"line":3057},[162,88589,88590],{"class":168},"      dance: function () {\n",[162,88592,88593],{"class":164,"line":3072},[162,88594,88595],{"class":168},"        console.log('跳舞')\n",[162,88597,88598],{"class":164,"line":3077},[162,88599,55468],{"class":168},[162,88601,88602],{"class":164,"line":3100},[162,88603,5305],{"class":168},[162,88605,88606],{"class":164,"line":3140},[162,88607,88455],{"class":168},[162,88609,88610,88612,88614],{"class":164,"line":4878},[162,88611,55487],{"class":168},[162,88613,54885],{"class":54373},[162,88615,54380],{"class":168},[19,88617,88618],{},"进行输出结果后会发现：",[19,88620,88621],{},[4602,88622],{"alt":158,"src":88623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,88625,88626],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,88628,88629],{},"所以，要重新指回创造这个原型对象的构造函数",[153,88631,88633],{"className":74278,"code":88632,"language":74280,"meta":158,"style":158},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[71,88634,88635,88649,88654,88659,88670,88683,88688,88699,88713,88717],{"__ignoreMap":158},[162,88636,88637,88640,88642,88645,88647],{"class":164,"line":165},[162,88638,88639],{"class":207},"Star",[162,88641,3847],{"class":168},[162,88643,88644],{"class":207},"prototype",[162,88646,16659],{"class":172},[162,88648,1722],{"class":168},[162,88650,88651],{"class":164,"line":197},[162,88652,88653],{"class":361},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[162,88655,88656],{"class":164,"line":228},[162,88657,88658],{"class":168},"  constructor: Star,\n",[162,88660,88661,88664,88666,88668],{"class":164,"line":252},[162,88662,88663],{"class":5082},"  sing",[162,88665,1730],{"class":168},[162,88667,57519],{"class":172},[162,88669,57522],{"class":168},[162,88671,88672,88674,88676,88678,88681],{"class":164,"line":328},[162,88673,76818],{"class":168},[162,88675,61316],{"class":5082},[162,88677,604],{"class":168},[162,88679,88680],{"class":179},"'唱歌'",[162,88682,434],{"class":168},[162,88684,88685],{"class":164,"line":466},[162,88686,88687],{"class":168},"   },\n",[162,88689,88690,88693,88695,88697],{"class":164,"line":471},[162,88691,88692],{"class":5082},"   dance",[162,88694,1730],{"class":168},[162,88696,57519],{"class":172},[162,88698,57522],{"class":168},[162,88700,88701,88704,88706,88708,88711],{"class":164,"line":687},[162,88702,88703],{"class":168},"     console.",[162,88705,61316],{"class":5082},[162,88707,604],{"class":168},[162,88709,88710],{"class":179},"'跳舞'",[162,88712,434],{"class":168},[162,88714,88715],{"class":164,"line":692},[162,88716,7421],{"class":168},[162,88718,88719],{"class":164,"line":698},[162,88720,1498],{"class":168},[19,88722,88723],{},[4602,88724],{"alt":158,"src":88725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,88727,88728],{},"总结1：",[19,88730,88731],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,88733,88734],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,88736,88737],{},"constructor指的是他的来源",[19,88739,88740],{},[4602,88741],{"alt":158,"src":88742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,88744,88745],{},[4602,88746],{"alt":158,"src":88747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,88749,88750],{},"总结2：",[19,88752,88753],{},[4602,88754],{"alt":158,"src":88755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,88757,88758],{},[4602,88759],{"alt":158,"src":88760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,88762,88763],{},[4602,88764],{"alt":158,"src":88765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[3284,88767,88769],{"id":88768},"_4134-对象原型","4.13.4 对象原型",[19,88771,88772],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,88774,88775],{},"对象原型就是__proto__这个属性",[19,88777,88778],{},[4602,88779],{"alt":158,"src":88780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,88782,88783],{},[4602,88784],{"alt":158,"src":88785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,88787,88788],{},[4602,88789],{"alt":158,"src":88790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,88792,88793],{},[4602,88794],{"alt":158,"src":88795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[153,88797,88799],{"className":56137,"code":88798,"language":56139,"meta":158,"style":158},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[71,88800,88801,88809,88817,88821,88825,88829,88834,88842],{"__ignoreMap":158},[162,88802,88803,88805,88807],{"class":164,"line":165},[162,88804,4187],{"class":168},[162,88806,54872],{"class":54373},[162,88808,54380],{"class":168},[162,88810,88811,88813,88815],{"class":164,"line":197},[162,88812,55215],{"class":168},[162,88814,54885],{"class":54373},[162,88816,54380],{"class":168},[162,88818,88819],{"class":164,"line":228},[162,88820,88441],{"class":168},[162,88822,88823],{"class":164,"line":252},[162,88824,5305],{"class":168},[162,88826,88827],{"class":164,"line":328},[162,88828,88450],{"class":168},[162,88830,88831],{"class":164,"line":466},[162,88832,88833],{"class":168},"    console.log(ldh)\n",[162,88835,88836,88838,88840],{"class":164,"line":471},[162,88837,55487],{"class":168},[162,88839,54885],{"class":54373},[162,88841,54380],{"class":168},[162,88843,88844,88846,88848],{"class":164,"line":687},[162,88845,54857],{"class":168},[162,88847,54872],{"class":54373},[162,88849,54380],{"class":168},[19,88851,88852],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,88854,88855],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,88857,88858],{},[4602,88859],{"alt":158,"src":88860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,88862,88863],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,88865,88866],{},"对象原型指向原型对象",[19,88868,88869],{},[4602,88870],{"alt":158,"src":88871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,88873,88874],{},[4602,88875],{"alt":158,"src":88876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,88878,88879],{},[4602,88880],{"alt":158,"src":88881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[3284,88883,88885],{"id":88884},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,88887,88888],{},[4602,88889],{"alt":158,"src":88890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[1452,88892,88893,88896,88899,88902],{},[1455,88894,88895],{},"构造函数通过new的形式实例化得到实例对象",[1455,88897,88898],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[1455,88900,88901],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[1455,88903,88904],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,88906,88907],{},[4602,88908],{"alt":158,"src":88909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,88911,88912],{},"题目梳理：",[19,88914,88915],{},[4602,88916],{"alt":158,"src":88917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[3284,88919,88921],{"id":88920},"_4136-原型继承","4.13.6 原型继承",[19,88923,88924],{},[4602,88925],{"alt":158,"src":88926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,88928,88929],{},[4602,88930],{"alt":158,"src":88931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,88933,88934],{},[4602,88935],{"alt":158,"src":88936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,88938,88939],{},[4602,88940],{"alt":158,"src":88941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,88943,88944],{},[4602,88945],{"alt":158,"src":88946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,88948,88949],{},[4602,88950],{"alt":158,"src":88951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,88953,88954],{},[4602,88955],{"alt":158,"src":88956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,88958,88959],{},[4602,88960],{"alt":158,"src":88961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,88963,88964],{},"回顾：构造函数每次new得到对象都是不同的",[3284,88966,88968],{"id":88967},"_4137-原型链","4.13.7 原型链",[19,88970,88971],{},[4602,88972],{"alt":158,"src":88973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,88975,88976],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,88978,88979],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,88981,88982],{},"大哥是Object",[19,88984,88985],{},[4602,88986],{"alt":158,"src":88987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,88989,88990],{},[4602,88991],{"alt":158,"src":88992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,88994,88995],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,88997,88998],{},"万物皆对象",[3284,89000,89002],{"id":89001},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,89004,89005],{},"模态框",[19,89007,89008],{},"以后遇见这个效果直接使用这个就行",[19,89010,89011],{},[4602,89012],{"alt":158,"src":89013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,89015,89016],{},[4602,89017],{"alt":158,"src":89018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,89020,89021],{},[4602,89022],{"alt":158,"src":89023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,89025,89026],{},[4602,89027],{"alt":158,"src":89028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,89030,89031],{},"补充知识点：",[1452,89033,89034],{},[1455,89035,89036],{},"append()",[19,89038,89039],{},[4602,89040],{"alt":158,"src":89041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[153,89043,89045],{"className":53706,"code":89044,"language":53708,"meta":158,"style":158},"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",[71,89046,89047,89052,89057,89062,89066,89070,89074,89079,89084,89089,89093],{"__ignoreMap":158},[162,89048,89049],{"class":164,"line":165},[162,89050,89051],{"class":168},"append(param1)\n",[162,89053,89054],{"class":164,"line":197},[162,89055,89056],{"class":168},"append(param1, param2)\n",[162,89058,89059],{"class":164,"line":228},[162,89060,89061],{"class":168},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[162,89063,89064],{"class":164,"line":252},[162,89065,301],{"emptyLinePlaceholder":300},[162,89067,89068],{"class":164,"line":328},[162,89069,301],{"emptyLinePlaceholder":300},[162,89071,89072],{"class":164,"line":466},[162,89073,301],{"emptyLinePlaceholder":300},[162,89075,89076],{"class":164,"line":471},[162,89077,89078],{"class":168},"let div = document.createElement(\"div\");\n",[162,89080,89081],{"class":164,"line":687},[162,89082,89083],{"class":168},"let p = document.createElement(\"p\");\n",[162,89085,89086],{"class":164,"line":692},[162,89087,89088],{"class":168},"div.append(p);\n",[162,89090,89091],{"class":164,"line":698},[162,89092,301],{"emptyLinePlaceholder":300},[162,89094,89095,89098,89100],{"class":164,"line":2955},[162,89096,89097],{"class":168},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[162,89099,19],{"class":54373},[162,89101,89102],{"class":168},"> ]\n",[1452,89104,89105],{"start":197},[1455,89106,89107],{},"remove()",[19,89109,89110],{},"自己删自己",[19,89112,89113],{},[4602,89114],{"alt":158,"src":89115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[153,89117,89119],{"className":53706,"code":89118,"language":53708,"meta":158,"style":158},"\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",[71,89120,89121,89131,89145,89149,89157,89171,89191,89203,89211,89218,89230,89243,89278,89290,89301,89313,89325,89337,89364,89374,89378,89382,89391,89403,89417,89427,89439,89443,89447,89457,89468,89478,89488,89501,89514,89524,89528,89532,89541,89551,89563,89567,89571,89580,89590,89600,89612,89616,89620,89630,89646,89657,89667,89677,89689,89701,89713,89717,89721,89734,89745,89749,89757,89765,89769,89777,89797,89817,89825,89830,89856,89861,89866,89885,89890,89902,89907,89918,89928,89938,89943,89948,89952,89957,89962,89967,89987,89992,90012,90017,90031,90036,90041,90046,90062,90066,90071,90100,90105,90110,90115,90126,90130,90134,90138,90143,90168,90173,90198,90203,90212,90216,90221,90246,90250,90275,90279,90288,90292,90297,90315,90325,90329,90337,90345,90349],{"__ignoreMap":158},[162,89122,89123,89125,89127,89129],{"class":164,"line":165},[162,89124,54370],{"class":168},[162,89126,54374],{"class":54373},[162,89128,54377],{"class":5082},[162,89130,54380],{"class":168},[162,89132,89133,89135,89137,89139,89141,89143],{"class":164,"line":197},[162,89134,4187],{"class":168},[162,89136,53708],{"class":54373},[162,89138,54389],{"class":5082},[162,89140,173],{"class":168},[162,89142,54394],{"class":179},[162,89144,54380],{"class":168},[162,89146,89147],{"class":164,"line":228},[162,89148,301],{"emptyLinePlaceholder":300},[162,89150,89151,89153,89155],{"class":164,"line":252},[162,89152,4187],{"class":168},[162,89154,54407],{"class":54373},[162,89156,54380],{"class":168},[162,89158,89159,89161,89163,89165,89167,89169],{"class":164,"line":328},[162,89160,55215],{"class":168},[162,89162,54417],{"class":54373},[162,89164,54420],{"class":5082},[162,89166,173],{"class":168},[162,89168,54425],{"class":179},[162,89170,54380],{"class":168},[162,89172,89173,89175,89177,89179,89181,89183,89185,89187,89189],{"class":164,"line":466},[162,89174,55215],{"class":168},[162,89176,54417],{"class":54373},[162,89178,18013],{"class":5082},[162,89180,173],{"class":168},[162,89182,54464],{"class":179},[162,89184,54444],{"class":5082},[162,89186,173],{"class":168},[162,89188,54471],{"class":179},[162,89190,54380],{"class":168},[162,89192,89193,89195,89197,89199,89201],{"class":164,"line":471},[162,89194,55215],{"class":168},[162,89196,54480],{"class":54373},[162,89198,54483],{"class":168},[162,89200,54480],{"class":54373},[162,89202,54380],{"class":168},[162,89204,89205,89207,89209],{"class":164,"line":687},[162,89206,55215],{"class":168},[162,89208,3219],{"class":54373},[162,89210,54380],{"class":168},[162,89212,89213,89216],{"class":164,"line":692},[162,89214,89215],{"class":5082},"    .modal",[162,89217,1722],{"class":168},[162,89219,89220,89222,89224,89226,89228],{"class":164,"line":698},[162,89221,57841],{"class":207},[162,89223,1730],{"class":168},[162,89225,7086],{"class":207},[162,89227,54564],{"class":172},[162,89229,4433],{"class":168},[162,89231,89232,89235,89237,89239,89241],{"class":164,"line":2955},[162,89233,89234],{"class":207},"      min-height",[162,89236,1730],{"class":168},[162,89238,3608],{"class":207},[162,89240,54564],{"class":172},[162,89242,4433],{"class":168},[162,89244,89245,89247,89249,89251,89253,89255,89257,89259,89261,89263,89265,89267,89269,89271,89273,89276],{"class":164,"line":2960},[162,89246,81815],{"class":207},[162,89248,1730],{"class":168},[162,89250,312],{"class":207},[162,89252,2717],{"class":207},[162,89254,5156],{"class":207},[162,89256,54564],{"class":172},[162,89258,81832],{"class":207},[162,89260,604],{"class":168},[162,89262,312],{"class":207},[162,89264,183],{"class":168},[162,89266,312],{"class":207},[162,89268,183],{"class":168},[162,89270,312],{"class":207},[162,89272,183],{"class":168},[162,89274,89275],{"class":207},"0.1",[162,89277,5836],{"class":168},[162,89279,89280,89282,89284,89286,89288],{"class":164,"line":2971},[162,89281,58204],{"class":207},[162,89283,1730],{"class":168},[162,89285,223],{"class":207},[162,89287,54564],{"class":172},[162,89289,4433],{"class":168},[162,89291,89292,89294,89296,89299],{"class":164,"line":2984},[162,89293,57829],{"class":207},[162,89295,1730],{"class":168},[162,89297,89298],{"class":207},"fixed",[162,89300,4433],{"class":168},[162,89302,89303,89306,89308,89311],{"class":164,"line":2989},[162,89304,89305],{"class":207},"      z-index",[162,89307,1730],{"class":168},[162,89309,89310],{"class":207},"999",[162,89312,4433],{"class":168},[162,89314,89315,89317,89319,89321,89323],{"class":164,"line":3011},[162,89316,57908],{"class":207},[162,89318,1730],{"class":168},[162,89320,3941],{"class":207},[162,89322,2708],{"class":172},[162,89324,4433],{"class":168},[162,89326,89327,89329,89331,89333,89335],{"class":164,"line":3022},[162,89328,58017],{"class":207},[162,89330,1730],{"class":168},[162,89332,3941],{"class":207},[162,89334,2708],{"class":172},[162,89336,4433],{"class":168},[162,89338,89339,89341,89343,89345,89347,89350,89352,89354,89356,89358,89360,89362],{"class":164,"line":3027},[162,89340,81856],{"class":207},[162,89342,1730],{"class":168},[162,89344,81861],{"class":207},[162,89346,604],{"class":168},[162,89348,89349],{"class":207},"-50",[162,89351,2708],{"class":172},[162,89353,183],{"class":168},[162,89355,89349],{"class":207},[162,89357,2708],{"class":172},[162,89359,183],{"class":168},[162,89361,312],{"class":207},[162,89363,5836],{"class":168},[162,89365,89366,89368,89370,89372],{"class":164,"line":3046},[162,89367,57954],{"class":207},[162,89369,1730],{"class":168},[162,89371,63910],{"class":207},[162,89373,4433],{"class":168},[162,89375,89376],{"class":164,"line":3052},[162,89377,5305],{"class":168},[162,89379,89380],{"class":164,"line":3057},[162,89381,301],{"emptyLinePlaceholder":300},[162,89383,89384,89386,89389],{"class":164,"line":3072},[162,89385,89215],{"class":5082},[162,89387,89388],{"class":5082}," .header",[162,89390,1722],{"class":168},[162,89392,89393,89395,89397,89399,89401],{"class":164,"line":3077},[162,89394,60428],{"class":207},[162,89396,1730],{"class":168},[162,89398,3693],{"class":207},[162,89400,54564],{"class":172},[162,89402,4433],{"class":168},[162,89404,89405,89407,89409,89411,89413,89415],{"class":164,"line":3100},[162,89406,57765],{"class":207},[162,89408,1730],{"class":168},[162,89410,312],{"class":207},[162,89412,5156],{"class":207},[162,89414,54564],{"class":172},[162,89416,4433],{"class":168},[162,89418,89419,89421,89423,89425],{"class":164,"line":3140},[162,89420,57829],{"class":207},[162,89422,1730],{"class":168},[162,89424,57834],{"class":207},[162,89426,4433],{"class":168},[162,89428,89429,89431,89433,89435,89437],{"class":164,"line":4878},[162,89430,57992],{"class":207},[162,89432,1730],{"class":168},[162,89434,1011],{"class":207},[162,89436,54564],{"class":172},[162,89438,4433],{"class":168},[162,89440,89441],{"class":164,"line":4883},[162,89442,5305],{"class":168},[162,89444,89445],{"class":164,"line":4897},[162,89446,301],{"emptyLinePlaceholder":300},[162,89448,89449,89451,89453,89455],{"class":164,"line":4902},[162,89450,89215],{"class":5082},[162,89452,89388],{"class":5082},[162,89454,6147],{"class":54373},[162,89456,1722],{"class":168},[162,89458,89459,89462,89464,89466],{"class":164,"line":5694},[162,89460,89461],{"class":207},"      font-style",[162,89463,1730],{"class":168},[162,89465,66908],{"class":207},[162,89467,4433],{"class":168},[162,89469,89470,89472,89474,89476],{"class":164,"line":5708},[162,89471,60485],{"class":207},[162,89473,1730],{"class":168},[162,89475,65138],{"class":207},[162,89477,4433],{"class":168},[162,89479,89480,89482,89484,89486],{"class":164,"line":5716},[162,89481,57829],{"class":207},[162,89483,1730],{"class":168},[162,89485,57901],{"class":207},[162,89487,4433],{"class":168},[162,89489,89490,89493,89495,89497,89499],{"class":164,"line":5721},[162,89491,89492],{"class":207},"      right",[162,89494,1730],{"class":168},[162,89496,3863],{"class":207},[162,89498,54564],{"class":172},[162,89500,4433],{"class":168},[162,89502,89503,89505,89507,89510,89512],{"class":164,"line":5727},[162,89504,58017],{"class":207},[162,89506,1730],{"class":168},[162,89508,89509],{"class":207},"-2",[162,89511,54564],{"class":172},[162,89513,4433],{"class":168},[162,89515,89516,89518,89520,89522],{"class":164,"line":5733},[162,89517,65093],{"class":207},[162,89519,1730],{"class":168},[162,89521,65098],{"class":207},[162,89523,4433],{"class":168},[162,89525,89526],{"class":164,"line":5738},[162,89527,5305],{"class":168},[162,89529,89530],{"class":164,"line":11052},[162,89531,301],{"emptyLinePlaceholder":300},[162,89533,89534,89536,89539],{"class":164,"line":11076},[162,89535,89215],{"class":5082},[162,89537,89538],{"class":5082}," .body",[162,89540,1722],{"class":168},[162,89542,89543,89545,89547,89549],{"class":164,"line":11081},[162,89544,60355],{"class":207},[162,89546,1730],{"class":168},[162,89548,54664],{"class":207},[162,89550,4433],{"class":168},[162,89552,89553,89555,89557,89559,89561],{"class":164,"line":11087},[162,89554,57765],{"class":207},[162,89556,1730],{"class":168},[162,89558,1006],{"class":207},[162,89560,54564],{"class":172},[162,89562,4433],{"class":168},[162,89564,89565],{"class":164,"line":11114},[162,89566,5305],{"class":168},[162,89568,89569],{"class":164,"line":11119},[162,89570,301],{"emptyLinePlaceholder":300},[162,89572,89573,89575,89578],{"class":164,"line":11125},[162,89574,89215],{"class":5082},[162,89576,89577],{"class":5082}," .footer",[162,89579,1722],{"class":168},[162,89581,89582,89584,89586,89588],{"class":164,"line":11137},[162,89583,58079],{"class":207},[162,89585,1730],{"class":168},[162,89587,54549],{"class":207},[162,89589,4433],{"class":168},[162,89591,89592,89594,89596,89598],{"class":164,"line":11149},[162,89593,58090],{"class":207},[162,89595,1730],{"class":168},[162,89597,54652],{"class":207},[162,89599,4433],{"class":168},[162,89601,89602,89604,89606,89608,89610],{"class":164,"line":11161},[162,89603,57765],{"class":207},[162,89605,1730],{"class":168},[162,89607,1006],{"class":207},[162,89609,54564],{"class":172},[162,89611,4433],{"class":168},[162,89613,89614],{"class":164,"line":12816},[162,89615,5305],{"class":168},[162,89617,89618],{"class":164,"line":12841},[162,89619,301],{"emptyLinePlaceholder":300},[162,89621,89622,89624,89626,89628],{"class":164,"line":12864},[162,89623,89215],{"class":5082},[162,89625,89577],{"class":5082},[162,89627,4538],{"class":54373},[162,89629,1722],{"class":168},[162,89631,89632,89634,89636,89638,89640,89642,89644],{"class":164,"line":12888},[162,89633,57765],{"class":207},[162,89635,1730],{"class":168},[162,89637,218],{"class":207},[162,89639,54564],{"class":172},[162,89641,5201],{"class":207},[162,89643,54564],{"class":172},[162,89645,4433],{"class":168},[162,89647,89648,89650,89652,89655],{"class":164,"line":12893},[162,89649,64789],{"class":207},[162,89651,1730],{"class":168},[162,89653,89654],{"class":207},"#ccc",[162,89656,4433],{"class":168},[162,89658,89659,89661,89663,89665],{"class":164,"line":12898},[162,89660,67037],{"class":207},[162,89662,1730],{"class":168},[162,89664,57807],{"class":207},[162,89666,4433],{"class":168},[162,89668,89669,89671,89673,89675],{"class":164,"line":12903},[162,89670,60485],{"class":207},[162,89672,1730],{"class":168},[162,89674,63910],{"class":207},[162,89676,4433],{"class":168},[162,89678,89679,89681,89683,89685,89687],{"class":164,"line":12912},[162,89680,58204],{"class":207},[162,89682,1730],{"class":168},[162,89684,213],{"class":207},[162,89686,54564],{"class":172},[162,89688,4433],{"class":168},[162,89690,89691,89693,89695,89697,89699],{"class":164,"line":12917},[162,89692,64818],{"class":207},[162,89694,1730],{"class":168},[162,89696,1006],{"class":207},[162,89698,54564],{"class":172},[162,89700,4433],{"class":168},[162,89702,89703,89705,89707,89709,89711],{"class":164,"line":12923},[162,89704,57992],{"class":207},[162,89706,1730],{"class":168},[162,89708,3838],{"class":207},[162,89710,54564],{"class":172},[162,89712,4433],{"class":168},[162,89714,89715],{"class":164,"line":12944},[162,89716,5305],{"class":168},[162,89718,89719],{"class":164,"line":12950},[162,89720,301],{"emptyLinePlaceholder":300},[162,89722,89723,89725,89727,89729,89732],{"class":164,"line":12964},[162,89724,89215],{"class":5082},[162,89726,89577],{"class":5082},[162,89728,4538],{"class":54373},[162,89730,89731],{"class":5082},".submit",[162,89733,1722],{"class":168},[162,89735,89736,89738,89740,89743],{"class":164,"line":12970},[162,89737,57954],{"class":207},[162,89739,1730],{"class":168},[162,89741,89742],{"class":207},"#369",[162,89744,4433],{"class":168},[162,89746,89747],{"class":164,"line":12997},[162,89748,5305],{"class":168},[162,89750,89751,89753,89755],{"class":164,"line":13006},[162,89752,55487],{"class":168},[162,89754,3219],{"class":54373},[162,89756,54380],{"class":168},[162,89758,89759,89761,89763],{"class":164,"line":13012},[162,89760,54857],{"class":168},[162,89762,54407],{"class":54373},[162,89764,54380],{"class":168},[162,89766,89767],{"class":164,"line":13020},[162,89768,301],{"emptyLinePlaceholder":300},[162,89770,89771,89773,89775],{"class":164,"line":13025},[162,89772,4187],{"class":168},[162,89774,54872],{"class":54373},[162,89776,54380],{"class":168},[162,89778,89779,89781,89783,89785,89787,89790,89793,89795],{"class":164,"line":19695},[162,89780,55215],{"class":168},[162,89782,56957],{"class":54373},[162,89784,18052],{"class":5082},[162,89786,173],{"class":168},[162,89788,89789],{"class":179},"\"delete\"",[162,89791,89792],{"class":168},">删除\u003C\u002F",[162,89794,56957],{"class":54373},[162,89796,54380],{"class":168},[162,89798,89799,89801,89803,89805,89807,89810,89813,89815],{"class":164,"line":19701},[162,89800,55215],{"class":168},[162,89802,56957],{"class":54373},[162,89804,18052],{"class":5082},[162,89806,173],{"class":168},[162,89808,89809],{"class":179},"\"login\"",[162,89811,89812],{"class":168},">登录\u003C\u002F",[162,89814,56957],{"class":54373},[162,89816,54380],{"class":168},[162,89818,89819,89821,89823],{"class":164,"line":19724},[162,89820,55215],{"class":168},[162,89822,54885],{"class":54373},[162,89824,54380],{"class":168},[162,89826,89827],{"class":164,"line":19730},[162,89828,89829],{"class":361},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[162,89831,89832,89834,89837,89839,89841,89843,89845,89847,89850,89852,89854],{"class":164,"line":19753},[162,89833,73149],{"class":172},[162,89835,89836],{"class":5082}," Modal",[162,89838,604],{"class":168},[162,89840,54480],{"class":671},[162,89842,16659],{"class":172},[162,89844,72995],{"class":179},[162,89846,183],{"class":168},[162,89848,89849],{"class":671},"message",[162,89851,16659],{"class":172},[162,89853,72995],{"class":179},[162,89855,15537],{"class":168},[162,89857,89858],{"class":164,"line":19767},[162,89859,89860],{"class":361},"      \u002F\u002F 创建Model 模态框盒子\n",[162,89862,89863],{"class":164,"line":19787},[162,89864,89865],{"class":361},"      \u002F\u002F 1.1 创建div标签\n",[162,89867,89868,89870,89873,89875,89877,89879,89881,89883],{"class":164,"line":19793},[162,89869,73116],{"class":207},[162,89871,89872],{"class":168},".modalBox ",[162,89874,173],{"class":172},[162,89876,57466],{"class":168},[162,89878,73216],{"class":5082},[162,89880,604],{"class":168},[162,89882,84996],{"class":179},[162,89884,434],{"class":168},[162,89886,89887],{"class":164,"line":19804},[162,89888,89889],{"class":361},"      \u002F\u002F 1.2 给div 添加类名为model\n",[162,89891,89892,89894,89897,89899],{"class":164,"line":19827},[162,89893,73116],{"class":207},[162,89895,89896],{"class":168},".modalBox.className ",[162,89898,173],{"class":172},[162,89900,89901],{"class":179}," 'modal'\n",[162,89903,89904],{"class":164,"line":19849},[162,89905,89906],{"class":361},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[162,89908,89909,89911,89914,89916],{"class":164,"line":19854},[162,89910,73116],{"class":207},[162,89912,89913],{"class":168},".modalBox.innerHTML ",[162,89915,173],{"class":172},[162,89917,73233],{"class":179},[162,89919,89920,89923,89925],{"class":164,"line":19860},[162,89921,89922],{"class":179},"        \u003Cdiv class=\"header\">${",[162,89924,54480],{"class":168},[162,89926,89927],{"class":179},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[162,89929,89930,89933,89935],{"class":164,"line":19874},[162,89931,89932],{"class":179},"        \u003Cdiv class=\"body\">${",[162,89934,89849],{"class":168},[162,89936,89937],{"class":179},"}\u003C\u002Fdiv>\n",[162,89939,89940],{"class":164,"line":19887},[162,89941,89942],{"class":179},"      `\n",[162,89944,89945],{"class":164,"line":19892},[162,89946,89947],{"class":361},"      \u002F\u002F console.log(this.modalBox)\n",[162,89949,89950],{"class":164,"line":19906},[162,89951,5305],{"class":168},[162,89953,89954],{"class":164,"line":19911},[162,89955,89956],{"class":361},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[162,89958,89959],{"class":164,"line":19917},[162,89960,89961],{"class":361},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[162,89963,89964],{"class":164,"line":19922},[162,89965,89966],{"class":361},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[162,89968,89969,89972,89974,89976,89978,89981,89983,89985],{"class":164,"line":19936},[162,89970,89971],{"class":207},"    Modal",[162,89973,3847],{"class":168},[162,89975,88644],{"class":207},[162,89977,3847],{"class":168},[162,89979,89980],{"class":5082},"open",[162,89982,16659],{"class":172},[162,89984,61987],{"class":172},[162,89986,57522],{"class":168},[162,89988,89989],{"class":164,"line":19941},[162,89990,89991],{"class":361},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[162,89993,89994,89996,89999,90001,90003,90005,90007,90010],{"class":164,"line":19946},[162,89995,61297],{"class":172},[162,89997,89998],{"class":207}," box",[162,90000,16659],{"class":172},[162,90002,57466],{"class":168},[162,90004,57469],{"class":5082},[162,90006,604],{"class":168},[162,90008,90009],{"class":179},"'.modal'",[162,90011,434],{"class":168},[162,90013,90014],{"class":164,"line":19960},[162,90015,90016],{"class":361},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[162,90018,90019,90022,90024,90027,90029],{"class":164,"line":19972},[162,90020,90021],{"class":168},"      box ",[162,90023,4838],{"class":172},[162,90025,90026],{"class":168}," box.",[162,90028,60075],{"class":5082},[162,90030,1526],{"class":168},[162,90032,90033],{"class":164,"line":19977},[162,90034,90035],{"class":361},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[162,90037,90038],{"class":164,"line":19990},[162,90039,90040],{"class":361},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[162,90042,90043],{"class":164,"line":19995},[162,90044,90045],{"class":361},"      \u002F\u002F append可以增加对象\n",[162,90047,90048,90051,90054,90056,90059],{"class":164,"line":20000},[162,90049,90050],{"class":168},"      document.body.",[162,90052,90053],{"class":5082},"append",[162,90055,604],{"class":168},[162,90057,90058],{"class":207},"this",[162,90060,90061],{"class":168},".modalBox)\n",[162,90063,90064],{"class":164,"line":20005},[162,90065,301],{"emptyLinePlaceholder":300},[162,90067,90068],{"class":164,"line":20018},[162,90069,90070],{"class":361},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[162,90072,90073,90075,90078,90080,90082,90085,90087,90089,90091,90093,90096,90098],{"class":164,"line":20023},[162,90074,73116],{"class":207},[162,90076,90077],{"class":168},".modalBox.",[162,90079,57469],{"class":5082},[162,90081,604],{"class":168},[162,90083,90084],{"class":179},"'i'",[162,90086,33910],{"class":168},[162,90088,60882],{"class":5082},[162,90090,604],{"class":168},[162,90092,60887],{"class":179},[162,90094,90095],{"class":168},", () ",[162,90097,87787],{"class":172},[162,90099,1722],{"class":168},[162,90101,90102],{"class":164,"line":35709},[162,90103,90104],{"class":361},"        \u002F\u002F 这个地方需要用到箭头函数\n",[162,90106,90107],{"class":164,"line":35715},[162,90108,90109],{"class":361},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[162,90111,90112],{"class":164,"line":35721},[162,90113,90114],{"class":361},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[162,90116,90117,90119,90121,90124],{"class":164,"line":35727},[162,90118,67793],{"class":207},[162,90120,3847],{"class":168},[162,90122,90123],{"class":5082},"close",[162,90125,1526],{"class":168},[162,90127,90128],{"class":164,"line":35733},[162,90129,67882],{"class":168},[162,90131,90132],{"class":164,"line":35744},[162,90133,5305],{"class":168},[162,90135,90136],{"class":164,"line":35750},[162,90137,301],{"emptyLinePlaceholder":300},[162,90139,90140],{"class":164,"line":35770},[162,90141,90142],{"class":361},"    \u002F\u002F 测试一下 点击 删除按钮\n",[162,90144,90145,90147,90149,90151,90154,90156,90158,90160,90162,90164,90166],{"class":164,"line":35776},[162,90146,55477],{"class":168},[162,90148,57469],{"class":5082},[162,90150,604],{"class":168},[162,90152,90153],{"class":179},"'#delete'",[162,90155,33910],{"class":168},[162,90157,60882],{"class":5082},[162,90159,604],{"class":168},[162,90161,60887],{"class":179},[162,90163,90095],{"class":168},[162,90165,87787],{"class":172},[162,90167,1722],{"class":168},[162,90169,90170],{"class":164,"line":35787},[162,90171,90172],{"class":361},"      \u002F\u002F 先调用Model构造函数\n",[162,90174,90175,90177,90180,90182,90184,90186,90188,90191,90193,90196],{"class":164,"line":35793},[162,90176,61297],{"class":172},[162,90178,90179],{"class":207}," del",[162,90181,16659],{"class":172},[162,90183,14674],{"class":172},[162,90185,89836],{"class":5082},[162,90187,604],{"class":168},[162,90189,90190],{"class":179},"'温馨的提示'",[162,90192,183],{"class":168},[162,90194,90195],{"class":179},"'您没有删除权限操作'",[162,90197,434],{"class":168},[162,90199,90200],{"class":164,"line":35799},[162,90201,90202],{"class":361},"      \u002F\u002F 实例对象调用open方法\n",[162,90204,90205,90208,90210],{"class":164,"line":35805},[162,90206,90207],{"class":168},"      del.",[162,90209,89980],{"class":5082},[162,90211,1526],{"class":168},[162,90213,90214],{"class":164,"line":35811},[162,90215,36536],{"class":168},[162,90217,90218],{"class":164,"line":35817},[162,90219,90220],{"class":361},"    \u002F\u002F 测试一下 点击 登录按钮\n",[162,90222,90223,90225,90227,90229,90232,90234,90236,90238,90240,90242,90244],{"class":164,"line":35823},[162,90224,55477],{"class":168},[162,90226,57469],{"class":5082},[162,90228,604],{"class":168},[162,90230,90231],{"class":179},"'#login'",[162,90233,33910],{"class":168},[162,90235,60882],{"class":5082},[162,90237,604],{"class":168},[162,90239,60887],{"class":179},[162,90241,90095],{"class":168},[162,90243,87787],{"class":172},[162,90245,1722],{"class":168},[162,90247,90248],{"class":164,"line":35829},[162,90249,90172],{"class":361},[162,90251,90252,90254,90257,90259,90261,90263,90265,90268,90270,90273],{"class":164,"line":35849},[162,90253,61297],{"class":172},[162,90255,90256],{"class":207}," log",[162,90258,16659],{"class":172},[162,90260,14674],{"class":172},[162,90262,89836],{"class":5082},[162,90264,604],{"class":168},[162,90266,90267],{"class":179},"'友情提示'",[162,90269,183],{"class":168},[162,90271,90272],{"class":179},"'您还没有登录呢'",[162,90274,434],{"class":168},[162,90276,90277],{"class":164,"line":35855},[162,90278,90202],{"class":361},[162,90280,90281,90284,90286],{"class":164,"line":35871},[162,90282,90283],{"class":168},"      log.",[162,90285,89980],{"class":5082},[162,90287,1526],{"class":168},[162,90289,90290],{"class":164,"line":35877},[162,90291,36536],{"class":168},[162,90293,90294],{"class":164,"line":35891},[162,90295,90296],{"class":361},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[162,90298,90299,90301,90303,90305,90307,90309,90311,90313],{"class":164,"line":35897},[162,90300,89971],{"class":207},[162,90302,3847],{"class":168},[162,90304,88644],{"class":207},[162,90306,3847],{"class":168},[162,90308,90123],{"class":5082},[162,90310,16659],{"class":172},[162,90312,61987],{"class":172},[162,90314,57522],{"class":168},[162,90316,90317,90319,90321,90323],{"class":164,"line":35912},[162,90318,73116],{"class":207},[162,90320,90077],{"class":168},[162,90322,60075],{"class":5082},[162,90324,1526],{"class":168},[162,90326,90327],{"class":164,"line":35918},[162,90328,5305],{"class":168},[162,90330,90331,90333,90335],{"class":164,"line":35927},[162,90332,55487],{"class":168},[162,90334,54885],{"class":54373},[162,90336,54380],{"class":168},[162,90338,90339,90341,90343],{"class":164,"line":35933},[162,90340,54857],{"class":168},[162,90342,54872],{"class":54373},[162,90344,54380],{"class":168},[162,90346,90347],{"class":164,"line":35942},[162,90348,301],{"emptyLinePlaceholder":300},[162,90350,90351,90353,90355],{"class":164,"line":35948},[162,90352,54857],{"class":168},[162,90354,53708],{"class":54373},[162,90356,54380],{"class":168},[19,90358,90359],{},[4602,90360],{"alt":158,"src":90361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,90363,90365],{"id":90364},"_414-深浅拷贝","4.14 深浅拷贝",[3284,90367,90369],{"id":90368},"_4141-浅拷贝","4.14.1 浅拷贝",[19,90371,90372],{},[4602,90373],{"alt":158,"src":90374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,90376,90377],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,90379,90380],{},[4602,90381],{"alt":158,"src":90382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,90384,90385],{},[4602,90386],{"alt":158,"src":90387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,90389,90390],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,90392,90393],{},[4602,90394],{"alt":158,"src":90395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,90397,14428],{},[19,90399,90400],{},[4602,90401],{"alt":158,"src":90402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[3284,90404,90406],{"id":90405},"_4142-深拷贝","4.14.2 深拷贝",[19,90408,90409],{},"深拷贝：拷贝的是对象，不是地址",[19,90411,90412],{},"常用的三种方法：",[1452,90414,90415,90418,90421],{},[1455,90416,90417],{},"通过递归实现深拷贝",[1455,90419,90420],{},"lodash\u002FcloneDeep",[1455,90422,90423],{},"通过JSON.stringify()实现",[25089,90425,90427],{"id":90426},"_41421-递归函数","4.14.2.1 递归函数",[19,90429,90430],{},[4602,90431],{"alt":158,"src":90432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[1452,90434,90435],{},[1455,90436,90437],{},"死递归占溢出：",[153,90439,90441],{"className":56137,"code":90440,"language":56139,"meta":158,"style":158},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[71,90442,90443,90451,90459,90463,90468,90472,90477,90485],{"__ignoreMap":158},[162,90444,90445,90447,90449],{"class":164,"line":165},[162,90446,4187],{"class":168},[162,90448,54872],{"class":54373},[162,90450,54380],{"class":168},[162,90452,90453,90455,90457],{"class":164,"line":197},[162,90454,55215],{"class":168},[162,90456,54885],{"class":54373},[162,90458,54380],{"class":168},[162,90460,90461],{"class":164,"line":228},[162,90462,80208],{"class":168},[162,90464,90465],{"class":164,"line":252},[162,90466,90467],{"class":168},"      fn()\n",[162,90469,90470],{"class":164,"line":328},[162,90471,5305],{"class":168},[162,90473,90474],{"class":164,"line":466},[162,90475,90476],{"class":168},"    fn()\n",[162,90478,90479,90481,90483],{"class":164,"line":471},[162,90480,55487],{"class":168},[162,90482,54885],{"class":54373},[162,90484,54380],{"class":168},[162,90486,90487,90489,90491],{"class":164,"line":687},[162,90488,54857],{"class":168},[162,90490,54872],{"class":54373},[162,90492,54380],{"class":168},[1452,90494,90495],{"start":197},[1455,90496,90497],{},"递归函数要加判断条件：",[19,90499,90500],{},[4602,90501],{"alt":158,"src":90502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[1452,90504,90505],{"start":228},[1455,90506,90507],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[153,90509,90511],{"className":53706,"code":90510,"language":53708,"meta":158,"style":158},"\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",[71,90512,90513,90523,90537,90541,90549,90563,90583,90595,90603,90607,90615,90627,90635,90643,90668,90680,90684,90691,90699,90707,90711],{"__ignoreMap":158},[162,90514,90515,90517,90519,90521],{"class":164,"line":165},[162,90516,54370],{"class":168},[162,90518,54374],{"class":54373},[162,90520,54377],{"class":5082},[162,90522,54380],{"class":168},[162,90524,90525,90527,90529,90531,90533,90535],{"class":164,"line":197},[162,90526,4187],{"class":168},[162,90528,53708],{"class":54373},[162,90530,54389],{"class":5082},[162,90532,173],{"class":168},[162,90534,54394],{"class":179},[162,90536,54380],{"class":168},[162,90538,90539],{"class":164,"line":228},[162,90540,301],{"emptyLinePlaceholder":300},[162,90542,90543,90545,90547],{"class":164,"line":252},[162,90544,4187],{"class":168},[162,90546,54407],{"class":54373},[162,90548,54380],{"class":168},[162,90550,90551,90553,90555,90557,90559,90561],{"class":164,"line":328},[162,90552,55215],{"class":168},[162,90554,54417],{"class":54373},[162,90556,54420],{"class":5082},[162,90558,173],{"class":168},[162,90560,54425],{"class":179},[162,90562,54380],{"class":168},[162,90564,90565,90567,90569,90571,90573,90575,90577,90579,90581],{"class":164,"line":466},[162,90566,55215],{"class":168},[162,90568,54417],{"class":54373},[162,90570,18013],{"class":5082},[162,90572,173],{"class":168},[162,90574,54464],{"class":179},[162,90576,54444],{"class":5082},[162,90578,173],{"class":168},[162,90580,54471],{"class":179},[162,90582,54380],{"class":168},[162,90584,90585,90587,90589,90591,90593],{"class":164,"line":471},[162,90586,55215],{"class":168},[162,90588,54480],{"class":54373},[162,90590,54483],{"class":168},[162,90592,54480],{"class":54373},[162,90594,54380],{"class":168},[162,90596,90597,90599,90601],{"class":164,"line":687},[162,90598,54857],{"class":168},[162,90600,54407],{"class":54373},[162,90602,54380],{"class":168},[162,90604,90605],{"class":164,"line":692},[162,90606,301],{"emptyLinePlaceholder":300},[162,90608,90609,90611,90613],{"class":164,"line":698},[162,90610,4187],{"class":168},[162,90612,54872],{"class":54373},[162,90614,54380],{"class":168},[162,90616,90617,90619,90621,90623,90625],{"class":164,"line":2955},[162,90618,55215],{"class":168},[162,90620,54683],{"class":54373},[162,90622,58384],{"class":168},[162,90624,54683],{"class":54373},[162,90626,54380],{"class":168},[162,90628,90629,90631,90633],{"class":164,"line":2960},[162,90630,55215],{"class":168},[162,90632,54885],{"class":54373},[162,90634,54380],{"class":168},[162,90636,90637,90639,90641],{"class":164,"line":2971},[162,90638,73149],{"class":172},[162,90640,76838],{"class":5082},[162,90642,13951],{"class":168},[162,90644,90645,90647,90649,90651,90653,90655,90657,90659,90661,90663,90666],{"class":164,"line":2984},[162,90646,58840],{"class":168},[162,90648,57469],{"class":5082},[162,90650,604],{"class":168},[162,90652,84996],{"class":179},[162,90654,77314],{"class":168},[162,90656,173],{"class":172},[162,90658,14674],{"class":172},[162,90660,76854],{"class":5082},[162,90662,20352],{"class":168},[162,90664,90665],{"class":5082},"toLocaleString",[162,90667,1526],{"class":168},[162,90669,90670,90673,90676,90678],{"class":164,"line":2989},[162,90671,90672],{"class":5082},"      setTimeout",[162,90674,90675],{"class":168},"(getTime, ",[162,90677,9516],{"class":207},[162,90679,434],{"class":168},[162,90681,90682],{"class":164,"line":3011},[162,90683,5305],{"class":168},[162,90685,90686,90689],{"class":164,"line":3022},[162,90687,90688],{"class":5082},"    getTime",[162,90690,1526],{"class":168},[162,90692,90693,90695,90697],{"class":164,"line":3027},[162,90694,55487],{"class":168},[162,90696,54885],{"class":54373},[162,90698,54380],{"class":168},[162,90700,90701,90703,90705],{"class":164,"line":3046},[162,90702,54857],{"class":168},[162,90704,54872],{"class":54373},[162,90706,54380],{"class":168},[162,90708,90709],{"class":164,"line":3052},[162,90710,301],{"emptyLinePlaceholder":300},[162,90712,90713,90715,90717],{"class":164,"line":3057},[162,90714,54857],{"class":168},[162,90716,53708],{"class":54373},[162,90718,54380],{"class":168},[19,90720,90721],{},[4602,90722],{"alt":158,"src":90723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[1452,90725,90726],{"start":252},[1455,90727,90417],{},[19,90729,90730],{},[4602,90731],{"alt":158,"src":90732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,90734,90735],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,90737,42264],{},[19,90739,90740],{},"这个是简易版的递归函数深拷贝",[19,90742,90743],{},"一定要注意先数组再对象，因为万物皆可对象",[153,90745,90747],{"className":53706,"code":90746,"language":53708,"meta":158,"style":158},"\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",[71,90748,90749,90759,90773,90777,90785,90799,90819,90831,90839,90843,90851,90859,90869,90878,90886,90902,90906,90914,90918,90922,90934,90939,90958,90974,90979,90984,90989,91004,91009,91014,91023,91031,91048,91056,91062,91070,91075,91080,91089,91093,91097,91101,91112,91121,91131,91145,91155,91163,91171,91179,91183],{"__ignoreMap":158},[162,90750,90751,90753,90755,90757],{"class":164,"line":165},[162,90752,54370],{"class":168},[162,90754,54374],{"class":54373},[162,90756,54377],{"class":5082},[162,90758,54380],{"class":168},[162,90760,90761,90763,90765,90767,90769,90771],{"class":164,"line":197},[162,90762,4187],{"class":168},[162,90764,53708],{"class":54373},[162,90766,54389],{"class":5082},[162,90768,173],{"class":168},[162,90770,54394],{"class":179},[162,90772,54380],{"class":168},[162,90774,90775],{"class":164,"line":228},[162,90776,301],{"emptyLinePlaceholder":300},[162,90778,90779,90781,90783],{"class":164,"line":252},[162,90780,4187],{"class":168},[162,90782,54407],{"class":54373},[162,90784,54380],{"class":168},[162,90786,90787,90789,90791,90793,90795,90797],{"class":164,"line":328},[162,90788,55215],{"class":168},[162,90790,54417],{"class":54373},[162,90792,54420],{"class":5082},[162,90794,173],{"class":168},[162,90796,54425],{"class":179},[162,90798,54380],{"class":168},[162,90800,90801,90803,90805,90807,90809,90811,90813,90815,90817],{"class":164,"line":466},[162,90802,55215],{"class":168},[162,90804,54417],{"class":54373},[162,90806,18013],{"class":5082},[162,90808,173],{"class":168},[162,90810,54464],{"class":179},[162,90812,54444],{"class":5082},[162,90814,173],{"class":168},[162,90816,54471],{"class":179},[162,90818,54380],{"class":168},[162,90820,90821,90823,90825,90827,90829],{"class":164,"line":471},[162,90822,55215],{"class":168},[162,90824,54480],{"class":54373},[162,90826,54483],{"class":168},[162,90828,54480],{"class":54373},[162,90830,54380],{"class":168},[162,90832,90833,90835,90837],{"class":164,"line":687},[162,90834,54857],{"class":168},[162,90836,54407],{"class":54373},[162,90838,54380],{"class":168},[162,90840,90841],{"class":164,"line":692},[162,90842,301],{"emptyLinePlaceholder":300},[162,90844,90845,90847,90849],{"class":164,"line":698},[162,90846,4187],{"class":168},[162,90848,54872],{"class":54373},[162,90850,54380],{"class":168},[162,90852,90853,90855,90857],{"class":164,"line":2955},[162,90854,55215],{"class":168},[162,90856,54885],{"class":54373},[162,90858,54380],{"class":168},[162,90860,90861,90863,90865,90867],{"class":164,"line":2960},[162,90862,14317],{"class":172},[162,90864,73036],{"class":207},[162,90866,16659],{"class":172},[162,90868,1722],{"class":168},[162,90870,90871,90873,90876],{"class":164,"line":2971},[162,90872,74681],{"class":168},[162,90874,90875],{"class":179},"'pink'",[162,90877,1735],{"class":168},[162,90879,90880,90882,90884],{"class":164,"line":2984},[162,90881,74691],{"class":168},[162,90883,242],{"class":207},[162,90885,1735],{"class":168},[162,90887,90888,90891,90894,90896,90899],{"class":164,"line":2989},[162,90889,90890],{"class":168},"      hobby: [",[162,90892,90893],{"class":179},"'乒乓球'",[162,90895,183],{"class":168},[162,90897,90898],{"class":179},"'足球'",[162,90900,90901],{"class":168},"],\n",[162,90903,90904],{"class":164,"line":3011},[162,90905,80937],{"class":168},[162,90907,90908,90911],{"class":164,"line":3022},[162,90909,90910],{"class":168},"        baby: ",[162,90912,90913],{"class":179},"'小pink'\n",[162,90915,90916],{"class":164,"line":3027},[162,90917,55468],{"class":168},[162,90919,90920],{"class":164,"line":3046},[162,90921,5305],{"class":168},[162,90923,90924,90926,90929,90931],{"class":164,"line":3052},[162,90925,14317],{"class":172},[162,90927,90928],{"class":207}," o",[162,90930,16659],{"class":172},[162,90932,90933],{"class":168}," {}\n",[162,90935,90936],{"class":164,"line":3057},[162,90937,90938],{"class":361},"    \u002F\u002F 拷贝函数\n",[162,90940,90941,90943,90946,90948,90951,90953,90956],{"class":164,"line":3072},[162,90942,73149],{"class":172},[162,90944,90945],{"class":5082}," deepCopy",[162,90947,604],{"class":168},[162,90949,90950],{"class":671},"newObj",[162,90952,183],{"class":168},[162,90954,90955],{"class":671},"oldObj",[162,90957,15537],{"class":168},[162,90959,90960,90962,90964,90966,90969,90971],{"class":164,"line":3077},[162,90961,55354],{"class":172},[162,90963,1003],{"class":168},[162,90965,54918],{"class":172},[162,90967,90968],{"class":168}," k ",[162,90970,814],{"class":172},[162,90972,90973],{"class":168}," oldObj) {\n",[162,90975,90976],{"class":164,"line":3100},[162,90977,90978],{"class":361},"        \u002F\u002F 处理数组的问题\n",[162,90980,90981],{"class":164,"line":3140},[162,90982,90983],{"class":361},"        \u002F\u002F 判断是否属于数组\n",[162,90985,90986],{"class":164,"line":4878},[162,90987,90988],{"class":361},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[162,90990,90991,90993,90996,90999,91002],{"class":164,"line":4883},[162,90992,5614],{"class":172},[162,90994,90995],{"class":168}," (oldObj[k] ",[162,90997,90998],{"class":172},"instanceof",[162,91000,91001],{"class":5082}," Array",[162,91003,15537],{"class":168},[162,91005,91006],{"class":164,"line":4897},[162,91007,91008],{"class":361},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[162,91010,91011],{"class":164,"line":4902},[162,91012,91013],{"class":361},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[162,91015,91016,91019,91021],{"class":164,"line":5694},[162,91017,91018],{"class":168},"          newObj[k] ",[162,91020,173],{"class":172},[162,91022,260],{"class":168},[162,91024,91025,91028],{"class":164,"line":5708},[162,91026,91027],{"class":5082},"          deepCopy",[162,91029,91030],{"class":168},"(newObj[k], oldObj[k])\n",[162,91032,91033,91035,91037,91039,91041,91043,91046],{"class":164,"line":5716},[162,91034,83145],{"class":168},[162,91036,2313],{"class":172},[162,91038,4828],{"class":172},[162,91040,90995],{"class":168},[162,91042,90998],{"class":172},[162,91044,91045],{"class":5082}," Object",[162,91047,15537],{"class":168},[162,91049,91050,91052,91054],{"class":164,"line":5721},[162,91051,91018],{"class":168},[162,91053,173],{"class":172},[162,91055,90933],{"class":168},[162,91057,91058,91060],{"class":164,"line":5727},[162,91059,91027],{"class":5082},[162,91061,91030],{"class":168},[162,91063,91064,91066,91068],{"class":164,"line":5733},[162,91065,83145],{"class":168},[162,91067,2313],{"class":172},[162,91069,1722],{"class":168},[162,91071,91072],{"class":164,"line":5738},[162,91073,91074],{"class":361},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[162,91076,91077],{"class":164,"line":11052},[162,91078,91079],{"class":361},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[162,91081,91082,91084,91086],{"class":164,"line":11076},[162,91083,91018],{"class":168},[162,91085,173],{"class":172},[162,91087,91088],{"class":168}," oldObj[k]\n",[162,91090,91091],{"class":164,"line":11081},[162,91092,5646],{"class":168},[162,91094,91095],{"class":164,"line":11087},[162,91096,55468],{"class":168},[162,91098,91099],{"class":164,"line":11114},[162,91100,5305],{"class":168},[162,91102,91103,91106,91109],{"class":164,"line":11119},[162,91104,91105],{"class":5082},"    deepCopy",[162,91107,91108],{"class":168},"(o, obj) ",[162,91110,91111],{"class":361},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[162,91113,91114,91116,91118],{"class":164,"line":11125},[162,91115,76818],{"class":168},[162,91117,61316],{"class":5082},[162,91119,91120],{"class":168},"(o)\n",[162,91122,91123,91126,91128],{"class":164,"line":11137},[162,91124,91125],{"class":168},"    o.age ",[162,91127,173],{"class":172},[162,91129,91130],{"class":207}," 20\n",[162,91132,91133,91136,91138,91140,91142],{"class":164,"line":11149},[162,91134,91135],{"class":168},"    o.hobby[",[162,91137,312],{"class":207},[162,91139,1204],{"class":168},[162,91141,173],{"class":172},[162,91143,91144],{"class":179}," '篮球'\n",[162,91146,91147,91150,91152],{"class":164,"line":11161},[162,91148,91149],{"class":168},"    o.family ",[162,91151,173],{"class":172},[162,91153,91154],{"class":179}," '老pink'\n",[162,91156,91157,91159,91161],{"class":164,"line":12816},[162,91158,76818],{"class":168},[162,91160,61316],{"class":5082},[162,91162,73101],{"class":168},[162,91164,91165,91167,91169],{"class":164,"line":12841},[162,91166,55487],{"class":168},[162,91168,54885],{"class":54373},[162,91170,54380],{"class":168},[162,91172,91173,91175,91177],{"class":164,"line":12864},[162,91174,54857],{"class":168},[162,91176,54872],{"class":54373},[162,91178,54380],{"class":168},[162,91180,91181],{"class":164,"line":12888},[162,91182,301],{"emptyLinePlaceholder":300},[162,91184,91185,91187,91189],{"class":164,"line":12893},[162,91186,54857],{"class":168},[162,91188,53708],{"class":54373},[162,91190,54380],{"class":168},[19,91192,91193],{},[4602,91194],{"alt":158,"src":91195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[25089,91197,91199,91200],{"id":91198},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[3453,91201,91202],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,91204,91205],{},[3538,91206,91207],{"href":91207,"rel":91208},"https:\u002F\u002Fwww.lodashjs.com\u002F",[26956],[19,91210,91211],{},"lodash里边的方法都要加上一个下划线_",[19,91213,91214],{},"_.cloneDeep()",[153,91216,91218],{"className":53706,"code":91217,"language":53708,"meta":158,"style":158},"\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",[71,91219,91220,91230,91244,91248,91256,91270,91290,91302,91310,91314,91322,91327,91346,91354,91364,91372,91380,91392,91396,91402,91406,91410,91426,91434,91443,91451,91459,91467,91471],{"__ignoreMap":158},[162,91221,91222,91224,91226,91228],{"class":164,"line":165},[162,91223,54370],{"class":168},[162,91225,54374],{"class":54373},[162,91227,54377],{"class":5082},[162,91229,54380],{"class":168},[162,91231,91232,91234,91236,91238,91240,91242],{"class":164,"line":197},[162,91233,4187],{"class":168},[162,91235,53708],{"class":54373},[162,91237,54389],{"class":5082},[162,91239,173],{"class":168},[162,91241,54394],{"class":179},[162,91243,54380],{"class":168},[162,91245,91246],{"class":164,"line":228},[162,91247,301],{"emptyLinePlaceholder":300},[162,91249,91250,91252,91254],{"class":164,"line":252},[162,91251,4187],{"class":168},[162,91253,54407],{"class":54373},[162,91255,54380],{"class":168},[162,91257,91258,91260,91262,91264,91266,91268],{"class":164,"line":328},[162,91259,55215],{"class":168},[162,91261,54417],{"class":54373},[162,91263,54420],{"class":5082},[162,91265,173],{"class":168},[162,91267,54425],{"class":179},[162,91269,54380],{"class":168},[162,91271,91272,91274,91276,91278,91280,91282,91284,91286,91288],{"class":164,"line":466},[162,91273,55215],{"class":168},[162,91275,54417],{"class":54373},[162,91277,18013],{"class":5082},[162,91279,173],{"class":168},[162,91281,54464],{"class":179},[162,91283,54444],{"class":5082},[162,91285,173],{"class":168},[162,91287,54471],{"class":179},[162,91289,54380],{"class":168},[162,91291,91292,91294,91296,91298,91300],{"class":164,"line":471},[162,91293,55215],{"class":168},[162,91295,54480],{"class":54373},[162,91297,54483],{"class":168},[162,91299,54480],{"class":54373},[162,91301,54380],{"class":168},[162,91303,91304,91306,91308],{"class":164,"line":687},[162,91305,54857],{"class":168},[162,91307,54407],{"class":54373},[162,91309,54380],{"class":168},[162,91311,91312],{"class":164,"line":692},[162,91313,301],{"emptyLinePlaceholder":300},[162,91315,91316,91318,91320],{"class":164,"line":698},[162,91317,4187],{"class":168},[162,91319,54872],{"class":54373},[162,91321,54380],{"class":168},[162,91323,91324],{"class":164,"line":2955},[162,91325,91326],{"class":361},"  \u003C!-- 先引用这个库 -->\n",[162,91328,91329,91331,91333,91335,91337,91340,91342,91344],{"class":164,"line":2960},[162,91330,55215],{"class":168},[162,91332,54885],{"class":54373},[162,91334,58309],{"class":5082},[162,91336,173],{"class":168},[162,91338,91339],{"class":179},"\"lodash.min.js\"",[162,91341,58384],{"class":168},[162,91343,54885],{"class":54373},[162,91345,54380],{"class":168},[162,91347,91348,91350,91352],{"class":164,"line":2971},[162,91349,55215],{"class":168},[162,91351,54885],{"class":54373},[162,91353,54380],{"class":168},[162,91355,91356,91358,91360,91362],{"class":164,"line":2984},[162,91357,14317],{"class":172},[162,91359,73036],{"class":207},[162,91361,16659],{"class":172},[162,91363,1722],{"class":168},[162,91365,91366,91368,91370],{"class":164,"line":2989},[162,91367,74681],{"class":168},[162,91369,90875],{"class":179},[162,91371,1735],{"class":168},[162,91373,91374,91376,91378],{"class":164,"line":3011},[162,91375,74691],{"class":168},[162,91377,242],{"class":207},[162,91379,1735],{"class":168},[162,91381,91382,91384,91386,91388,91390],{"class":164,"line":3022},[162,91383,90890],{"class":168},[162,91385,90893],{"class":179},[162,91387,183],{"class":168},[162,91389,90898],{"class":179},[162,91391,90901],{"class":168},[162,91393,91394],{"class":164,"line":3027},[162,91395,80937],{"class":168},[162,91397,91398,91400],{"class":164,"line":3046},[162,91399,90910],{"class":168},[162,91401,90913],{"class":179},[162,91403,91404],{"class":164,"line":3052},[162,91405,55468],{"class":168},[162,91407,91408],{"class":164,"line":3057},[162,91409,5305],{"class":168},[162,91411,91412,91414,91416,91418,91421,91424],{"class":164,"line":3072},[162,91413,14317],{"class":172},[162,91415,90928],{"class":207},[162,91417,16659],{"class":172},[162,91419,91420],{"class":168}," _.",[162,91422,91423],{"class":5082},"cloneDeep",[162,91425,73101],{"class":168},[162,91427,91428,91430,91432],{"class":164,"line":3077},[162,91429,76818],{"class":168},[162,91431,61316],{"class":5082},[162,91433,91120],{"class":168},[162,91435,91436,91439,91441],{"class":164,"line":3100},[162,91437,91438],{"class":168},"    o.family.baby ",[162,91440,173],{"class":172},[162,91442,91154],{"class":179},[162,91444,91445,91447,91449],{"class":164,"line":3140},[162,91446,76818],{"class":168},[162,91448,61316],{"class":5082},[162,91450,73101],{"class":168},[162,91452,91453,91455,91457],{"class":164,"line":4878},[162,91454,55487],{"class":168},[162,91456,54885],{"class":54373},[162,91458,54380],{"class":168},[162,91460,91461,91463,91465],{"class":164,"line":4883},[162,91462,54857],{"class":168},[162,91464,54872],{"class":54373},[162,91466,54380],{"class":168},[162,91468,91469],{"class":164,"line":4897},[162,91470,301],{"emptyLinePlaceholder":300},[162,91472,91473,91475,91477],{"class":164,"line":4902},[162,91474,54857],{"class":168},[162,91476,53708],{"class":54373},[162,91478,54380],{"class":168},[19,91480,91481],{},[4602,91482],{"alt":158,"src":91483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[25089,91485,91487],{"id":91486},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[153,91489,91491],{"className":53706,"code":91490,"language":53708,"meta":158,"style":158},"\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",[71,91492,91493,91503,91517,91521,91529,91543,91563,91575,91583,91587,91595,91603,91613,91621,91629,91641,91645,91651,91655,91659,91664,91669,91674,91700,91708,91717,91725,91733,91741,91745],{"__ignoreMap":158},[162,91494,91495,91497,91499,91501],{"class":164,"line":165},[162,91496,54370],{"class":168},[162,91498,54374],{"class":54373},[162,91500,54377],{"class":5082},[162,91502,54380],{"class":168},[162,91504,91505,91507,91509,91511,91513,91515],{"class":164,"line":197},[162,91506,4187],{"class":168},[162,91508,53708],{"class":54373},[162,91510,54389],{"class":5082},[162,91512,173],{"class":168},[162,91514,54394],{"class":179},[162,91516,54380],{"class":168},[162,91518,91519],{"class":164,"line":228},[162,91520,301],{"emptyLinePlaceholder":300},[162,91522,91523,91525,91527],{"class":164,"line":252},[162,91524,4187],{"class":168},[162,91526,54407],{"class":54373},[162,91528,54380],{"class":168},[162,91530,91531,91533,91535,91537,91539,91541],{"class":164,"line":328},[162,91532,55215],{"class":168},[162,91534,54417],{"class":54373},[162,91536,54420],{"class":5082},[162,91538,173],{"class":168},[162,91540,54425],{"class":179},[162,91542,54380],{"class":168},[162,91544,91545,91547,91549,91551,91553,91555,91557,91559,91561],{"class":164,"line":466},[162,91546,55215],{"class":168},[162,91548,54417],{"class":54373},[162,91550,18013],{"class":5082},[162,91552,173],{"class":168},[162,91554,54464],{"class":179},[162,91556,54444],{"class":5082},[162,91558,173],{"class":168},[162,91560,54471],{"class":179},[162,91562,54380],{"class":168},[162,91564,91565,91567,91569,91571,91573],{"class":164,"line":471},[162,91566,55215],{"class":168},[162,91568,54480],{"class":54373},[162,91570,54483],{"class":168},[162,91572,54480],{"class":54373},[162,91574,54380],{"class":168},[162,91576,91577,91579,91581],{"class":164,"line":687},[162,91578,54857],{"class":168},[162,91580,54407],{"class":54373},[162,91582,54380],{"class":168},[162,91584,91585],{"class":164,"line":692},[162,91586,301],{"emptyLinePlaceholder":300},[162,91588,91589,91591,91593],{"class":164,"line":698},[162,91590,4187],{"class":168},[162,91592,54872],{"class":54373},[162,91594,54380],{"class":168},[162,91596,91597,91599,91601],{"class":164,"line":2955},[162,91598,55215],{"class":168},[162,91600,54885],{"class":54373},[162,91602,54380],{"class":168},[162,91604,91605,91607,91609,91611],{"class":164,"line":2960},[162,91606,14317],{"class":172},[162,91608,73036],{"class":207},[162,91610,16659],{"class":172},[162,91612,1722],{"class":168},[162,91614,91615,91617,91619],{"class":164,"line":2971},[162,91616,74681],{"class":168},[162,91618,90875],{"class":179},[162,91620,1735],{"class":168},[162,91622,91623,91625,91627],{"class":164,"line":2984},[162,91624,74691],{"class":168},[162,91626,242],{"class":207},[162,91628,1735],{"class":168},[162,91630,91631,91633,91635,91637,91639],{"class":164,"line":2989},[162,91632,90890],{"class":168},[162,91634,90893],{"class":179},[162,91636,183],{"class":168},[162,91638,90898],{"class":179},[162,91640,90901],{"class":168},[162,91642,91643],{"class":164,"line":3011},[162,91644,80937],{"class":168},[162,91646,91647,91649],{"class":164,"line":3022},[162,91648,90910],{"class":168},[162,91650,90913],{"class":179},[162,91652,91653],{"class":164,"line":3027},[162,91654,55468],{"class":168},[162,91656,91657],{"class":164,"line":3046},[162,91658,5305],{"class":168},[162,91660,91661],{"class":164,"line":3052},[162,91662,91663],{"class":361},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[162,91665,91666],{"class":164,"line":3057},[162,91667,91668],{"class":361},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[162,91670,91671],{"class":164,"line":3072},[162,91672,91673],{"class":361},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[162,91675,91676,91678,91680,91682,91685,91687,91690,91692,91694,91696,91698],{"class":164,"line":3077},[162,91677,14317],{"class":172},[162,91679,90928],{"class":207},[162,91681,16659],{"class":172},[162,91683,91684],{"class":207}," JSON",[162,91686,3847],{"class":168},[162,91688,91689],{"class":5082},"parse",[162,91691,604],{"class":168},[162,91693,74729],{"class":207},[162,91695,3847],{"class":168},[162,91697,74734],{"class":5082},[162,91699,74737],{"class":168},[162,91701,91702,91704,91706],{"class":164,"line":3100},[162,91703,76818],{"class":168},[162,91705,61316],{"class":5082},[162,91707,91120],{"class":168},[162,91709,91710,91712,91714],{"class":164,"line":3140},[162,91711,91438],{"class":168},[162,91713,173],{"class":172},[162,91715,91716],{"class":179}," '123'\n",[162,91718,91719,91721,91723],{"class":164,"line":4878},[162,91720,76818],{"class":168},[162,91722,61316],{"class":5082},[162,91724,73101],{"class":168},[162,91726,91727,91729,91731],{"class":164,"line":4883},[162,91728,55487],{"class":168},[162,91730,54885],{"class":54373},[162,91732,54380],{"class":168},[162,91734,91735,91737,91739],{"class":164,"line":4897},[162,91736,54857],{"class":168},[162,91738,54872],{"class":54373},[162,91740,54380],{"class":168},[162,91742,91743],{"class":164,"line":4902},[162,91744,301],{"emptyLinePlaceholder":300},[162,91746,91747,91749,91751],{"class":164,"line":5694},[162,91748,54857],{"class":168},[162,91750,53708],{"class":54373},[162,91752,54380],{"class":168},[19,91754,91755],{},[4602,91756],{"alt":158,"src":91757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,91759,91761],{"id":91760},"_415-异常处理","4.15 异常处理",[1452,91763,91764],{},[1455,91765,91766],{},"throw抛异常",[19,91768,91769],{},[4602,91770],{"alt":158,"src":91771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[1452,91773,91774],{"start":197},[1455,91775,91776],{},"try\u002Fcatch 捕获错误信息",[19,91778,91779],{},[4602,91780],{"alt":158,"src":91781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[153,91783,91785],{"className":53706,"code":91784,"language":53708,"meta":158,"style":158},"\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",[71,91786,91787,91797,91811,91815,91823,91837,91857,91869,91877,91881,91889,91901,91909,91918,91925,91930,91949,91958,91969,91974,91984,91989,91994,91999,92016,92020,92025,92032,92044,92048,92060,92064,92068,92073,92078,92085,92093,92101,92105],{"__ignoreMap":158},[162,91788,91789,91791,91793,91795],{"class":164,"line":165},[162,91790,54370],{"class":168},[162,91792,54374],{"class":54373},[162,91794,54377],{"class":5082},[162,91796,54380],{"class":168},[162,91798,91799,91801,91803,91805,91807,91809],{"class":164,"line":197},[162,91800,4187],{"class":168},[162,91802,53708],{"class":54373},[162,91804,54389],{"class":5082},[162,91806,173],{"class":168},[162,91808,54394],{"class":179},[162,91810,54380],{"class":168},[162,91812,91813],{"class":164,"line":228},[162,91814,301],{"emptyLinePlaceholder":300},[162,91816,91817,91819,91821],{"class":164,"line":252},[162,91818,4187],{"class":168},[162,91820,54407],{"class":54373},[162,91822,54380],{"class":168},[162,91824,91825,91827,91829,91831,91833,91835],{"class":164,"line":328},[162,91826,55215],{"class":168},[162,91828,54417],{"class":54373},[162,91830,54420],{"class":5082},[162,91832,173],{"class":168},[162,91834,54425],{"class":179},[162,91836,54380],{"class":168},[162,91838,91839,91841,91843,91845,91847,91849,91851,91853,91855],{"class":164,"line":466},[162,91840,55215],{"class":168},[162,91842,54417],{"class":54373},[162,91844,18013],{"class":5082},[162,91846,173],{"class":168},[162,91848,54464],{"class":179},[162,91850,54444],{"class":5082},[162,91852,173],{"class":168},[162,91854,54471],{"class":179},[162,91856,54380],{"class":168},[162,91858,91859,91861,91863,91865,91867],{"class":164,"line":471},[162,91860,55215],{"class":168},[162,91862,54480],{"class":54373},[162,91864,54483],{"class":168},[162,91866,54480],{"class":54373},[162,91868,54380],{"class":168},[162,91870,91871,91873,91875],{"class":164,"line":687},[162,91872,54857],{"class":168},[162,91874,54407],{"class":54373},[162,91876,54380],{"class":168},[162,91878,91879],{"class":164,"line":692},[162,91880,301],{"emptyLinePlaceholder":300},[162,91882,91883,91885,91887],{"class":164,"line":698},[162,91884,4187],{"class":168},[162,91886,54872],{"class":54373},[162,91888,54380],{"class":168},[162,91890,91891,91893,91895,91897,91899],{"class":164,"line":2955},[162,91892,55215],{"class":168},[162,91894,19],{"class":54373},[162,91896,56564],{"class":168},[162,91898,19],{"class":54373},[162,91900,54380],{"class":168},[162,91902,91903,91905,91907],{"class":164,"line":2960},[162,91904,55215],{"class":168},[162,91906,54885],{"class":54373},[162,91908,54380],{"class":168},[162,91910,91911,91913,91916],{"class":164,"line":2971},[162,91912,73149],{"class":172},[162,91914,91915],{"class":5082}," fn",[162,91917,13951],{"class":168},[162,91919,91920,91923],{"class":164,"line":2984},[162,91921,91922],{"class":172},"      try",[162,91924,1722],{"class":168},[162,91926,91927],{"class":164,"line":2989},[162,91928,91929],{"class":361},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[162,91931,91932,91934,91936,91938,91940,91942,91944,91947],{"class":164,"line":3011},[162,91933,64338],{"class":172},[162,91935,9931],{"class":207},[162,91937,16659],{"class":172},[162,91939,57466],{"class":168},[162,91941,57469],{"class":5082},[162,91943,604],{"class":168},[162,91945,91946],{"class":179},"'.p'",[162,91948,434],{"class":168},[162,91950,91951,91954,91956],{"class":164,"line":3022},[162,91952,91953],{"class":168},"        p.style.color ",[162,91955,173],{"class":172},[162,91957,70118],{"class":179},[162,91959,91960,91963,91966],{"class":164,"line":3027},[162,91961,91962],{"class":168},"      } ",[162,91964,91965],{"class":172},"catch",[162,91967,91968],{"class":168}," (err) {\n",[162,91970,91971],{"class":164,"line":3046},[162,91972,91973],{"class":361},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[162,91975,91976,91979,91981],{"class":164,"line":3052},[162,91977,91978],{"class":168},"        console.",[162,91980,61316],{"class":5082},[162,91982,91983],{"class":168},"(err.message)\n",[162,91985,91986],{"class":164,"line":3057},[162,91987,91988],{"class":361},"        \u002F\u002F 想要中断程序，需要加return\n",[162,91990,91991],{"class":164,"line":3072},[162,91992,91993],{"class":361},"        \u002F\u002F return\n",[162,91995,91996],{"class":164,"line":3077},[162,91997,91998],{"class":361},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[162,92000,92001,92004,92006,92009,92011,92014],{"class":164,"line":3100},[162,92002,92003],{"class":172},"        throw",[162,92005,14674],{"class":172},[162,92007,92008],{"class":5082}," Error",[162,92010,604],{"class":168},[162,92012,92013],{"class":179},"'你看看，选择器错误了吧'",[162,92015,434],{"class":168},[162,92017,92018],{"class":164,"line":3140},[162,92019,55468],{"class":168},[162,92021,92022],{"class":164,"line":4878},[162,92023,92024],{"class":361},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[162,92026,92027,92030],{"class":164,"line":4883},[162,92028,92029],{"class":172},"      finally",[162,92031,1722],{"class":168},[162,92033,92034,92037,92039,92042],{"class":164,"line":4897},[162,92035,92036],{"class":5082},"        alert",[162,92038,604],{"class":168},[162,92040,92041],{"class":179},"'弹出对话框'",[162,92043,434],{"class":168},[162,92045,92046],{"class":164,"line":4902},[162,92047,55468],{"class":168},[162,92049,92050,92052,92054,92056,92058],{"class":164,"line":5694},[162,92051,61313],{"class":168},[162,92053,61316],{"class":5082},[162,92055,604],{"class":168},[162,92057,3762],{"class":207},[162,92059,434],{"class":168},[162,92061,92062],{"class":164,"line":5708},[162,92063,301],{"emptyLinePlaceholder":300},[162,92065,92066],{"class":164,"line":5716},[162,92067,5305],{"class":168},[162,92069,92070],{"class":164,"line":5721},[162,92071,92072],{"class":361},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[162,92074,92075],{"class":164,"line":5727},[162,92076,92077],{"class":361},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[162,92079,92080,92083],{"class":164,"line":5733},[162,92081,92082],{"class":5082},"    fn",[162,92084,1526],{"class":168},[162,92086,92087,92089,92091],{"class":164,"line":5738},[162,92088,55487],{"class":168},[162,92090,54885],{"class":54373},[162,92092,54380],{"class":168},[162,92094,92095,92097,92099],{"class":164,"line":11052},[162,92096,54857],{"class":168},[162,92098,54872],{"class":54373},[162,92100,54380],{"class":168},[162,92102,92103],{"class":164,"line":11076},[162,92104,301],{"emptyLinePlaceholder":300},[162,92106,92107,92109,92111],{"class":164,"line":11081},[162,92108,54857],{"class":168},[162,92110,53708],{"class":54373},[162,92112,54380],{"class":168},[19,92114,92115],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[1452,92117,92118],{"start":228},[1455,92119,92120],{},"debugger",[19,92122,92123],{},[4602,92124],{"alt":158,"src":92125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,92127,92128],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,92130,92132],{"id":92131},"_416-处理this","4.16 处理this",[3284,92134,92136],{"id":92135},"_4161-this的指向","4.16.1 this的指向",[1452,92138,92139],{},[1455,92140,92141],{},"普通函数的this",[19,92143,92144],{},[4602,92145],{"alt":158,"src":92146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[1452,92148,92149],{"start":197},[1455,92150,92151],{},"箭头函数的this",[19,92153,92154],{},[4602,92155],{"alt":158,"src":92156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,92158,92159],{},[4602,92160],{"alt":158,"src":92161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,92163,92164],{},[4602,92165],{"alt":158,"src":92166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[3284,92168,92170],{"id":92169},"_4162-this的改变","4.16.2 this的改变",[19,92172,92173],{},"call() apply() bind()",[1452,92175,92176],{},[1455,92177,92178],{},"call()",[19,92180,92181],{},[4602,92182],{"alt":158,"src":92183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,92185,92186],{},"两个作用：①调用函数；②改变this指向",[153,92188,92190],{"className":56137,"code":92189,"language":56139,"meta":158,"style":158},"\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",[71,92191,92192,92200,92208,92212,92217,92221,92226,92231,92236,92240,92245,92253],{"__ignoreMap":158},[162,92193,92194,92196,92198],{"class":164,"line":165},[162,92195,4187],{"class":168},[162,92197,54872],{"class":54373},[162,92199,54380],{"class":168},[162,92201,92202,92204,92206],{"class":164,"line":197},[162,92203,55215],{"class":168},[162,92205,54885],{"class":54373},[162,92207,54380],{"class":168},[162,92209,92210],{"class":164,"line":228},[162,92211,74588],{"class":168},[162,92213,92214],{"class":164,"line":252},[162,92215,92216],{"class":168},"      uname: 'pink'\n",[162,92218,92219],{"class":164,"line":328},[162,92220,5305],{"class":168},[162,92222,92223],{"class":164,"line":466},[162,92224,92225],{"class":168},"    function fn(x, y) {\n",[162,92227,92228],{"class":164,"line":471},[162,92229,92230],{"class":168},"      console.log(this)  \u002F\u002Fwindow\n",[162,92232,92233],{"class":164,"line":687},[162,92234,92235],{"class":168},"      console.log(x + y)\n",[162,92237,92238],{"class":164,"line":692},[162,92239,5305],{"class":168},[162,92241,92242],{"class":164,"line":698},[162,92243,92244],{"class":168},"    fn.call(obj, 1, 2)\n",[162,92246,92247,92249,92251],{"class":164,"line":2955},[162,92248,55487],{"class":168},[162,92250,54885],{"class":54373},[162,92252,54380],{"class":168},[162,92254,92255,92257,92259],{"class":164,"line":2960},[162,92256,54857],{"class":168},[162,92258,54872],{"class":54373},[162,92260,54380],{"class":168},[19,92262,92263],{},[4602,92264],{"alt":158,"src":92265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[1452,92267,92268],{"start":197},[1455,92269,92270],{},"apply()",[19,92272,92273],{},[4602,92274],{"alt":158,"src":92275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,92277,92186],{},[19,92279,92280],{},"call传递的是普通参数，而apply必须传递的是数组",[153,92282,92284],{"className":53706,"code":92283,"language":53708,"meta":158,"style":158},"\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",[71,92285,92286,92296,92310,92314,92322,92336,92356,92368,92376,92380,92388,92396,92406,92413,92417,92422,92438,92450,92464,92468,92473,92492,92497,92501,92506,92511,92519,92524,92546,92551,92567,92583,92595,92599,92604,92623,92631,92639,92643],{"__ignoreMap":158},[162,92287,92288,92290,92292,92294],{"class":164,"line":165},[162,92289,54370],{"class":168},[162,92291,54374],{"class":54373},[162,92293,54377],{"class":5082},[162,92295,54380],{"class":168},[162,92297,92298,92300,92302,92304,92306,92308],{"class":164,"line":197},[162,92299,4187],{"class":168},[162,92301,53708],{"class":54373},[162,92303,54389],{"class":5082},[162,92305,173],{"class":168},[162,92307,54394],{"class":179},[162,92309,54380],{"class":168},[162,92311,92312],{"class":164,"line":228},[162,92313,301],{"emptyLinePlaceholder":300},[162,92315,92316,92318,92320],{"class":164,"line":252},[162,92317,4187],{"class":168},[162,92319,54407],{"class":54373},[162,92321,54380],{"class":168},[162,92323,92324,92326,92328,92330,92332,92334],{"class":164,"line":328},[162,92325,55215],{"class":168},[162,92327,54417],{"class":54373},[162,92329,54420],{"class":5082},[162,92331,173],{"class":168},[162,92333,54425],{"class":179},[162,92335,54380],{"class":168},[162,92337,92338,92340,92342,92344,92346,92348,92350,92352,92354],{"class":164,"line":466},[162,92339,55215],{"class":168},[162,92341,54417],{"class":54373},[162,92343,18013],{"class":5082},[162,92345,173],{"class":168},[162,92347,54464],{"class":179},[162,92349,54444],{"class":5082},[162,92351,173],{"class":168},[162,92353,54471],{"class":179},[162,92355,54380],{"class":168},[162,92357,92358,92360,92362,92364,92366],{"class":164,"line":471},[162,92359,55215],{"class":168},[162,92361,54480],{"class":54373},[162,92363,54483],{"class":168},[162,92365,54480],{"class":54373},[162,92367,54380],{"class":168},[162,92369,92370,92372,92374],{"class":164,"line":687},[162,92371,54857],{"class":168},[162,92373,54407],{"class":54373},[162,92375,54380],{"class":168},[162,92377,92378],{"class":164,"line":692},[162,92379,301],{"emptyLinePlaceholder":300},[162,92381,92382,92384,92386],{"class":164,"line":698},[162,92383,4187],{"class":168},[162,92385,54872],{"class":54373},[162,92387,54380],{"class":168},[162,92389,92390,92392,92394],{"class":164,"line":2955},[162,92391,55215],{"class":168},[162,92393,54885],{"class":54373},[162,92395,54380],{"class":168},[162,92397,92398,92400,92402,92404],{"class":164,"line":2960},[162,92399,14317],{"class":172},[162,92401,73036],{"class":207},[162,92403,16659],{"class":172},[162,92405,1722],{"class":168},[162,92407,92408,92410],{"class":164,"line":2971},[162,92409,74691],{"class":168},[162,92411,92412],{"class":207},"18\n",[162,92414,92415],{"class":164,"line":2984},[162,92416,5305],{"class":168},[162,92418,92419],{"class":164,"line":2989},[162,92420,92421],{"class":361},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[162,92423,92424,92426,92428,92430,92432,92434,92436],{"class":164,"line":3011},[162,92425,73149],{"class":172},[162,92427,91915],{"class":5082},[162,92429,604],{"class":168},[162,92431,4101],{"class":671},[162,92433,183],{"class":168},[162,92435,4126],{"class":671},[162,92437,15537],{"class":168},[162,92439,92440,92442,92444,92446,92448],{"class":164,"line":3022},[162,92441,61313],{"class":168},[162,92443,61316],{"class":5082},[162,92445,604],{"class":168},[162,92447,90058],{"class":207},[162,92449,434],{"class":168},[162,92451,92452,92454,92456,92459,92461],{"class":164,"line":3027},[162,92453,61313],{"class":168},[162,92455,61316],{"class":5082},[162,92457,92458],{"class":168},"(x ",[162,92460,3771],{"class":172},[162,92462,92463],{"class":168}," y)\n",[162,92465,92466],{"class":164,"line":3046},[162,92467,5305],{"class":168},[162,92469,92470],{"class":164,"line":3052},[162,92471,92472],{"class":361},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[162,92474,92475,92478,92481,92484,92486,92488,92490],{"class":164,"line":3057},[162,92476,92477],{"class":168},"    fn.",[162,92479,92480],{"class":5082},"apply",[162,92482,92483],{"class":168},"(obj, [",[162,92485,208],{"class":207},[162,92487,183],{"class":168},[162,92489,213],{"class":207},[162,92491,315],{"class":168},[162,92493,92494],{"class":164,"line":3072},[162,92495,92496],{"class":361},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[162,92498,92499],{"class":164,"line":3077},[162,92500,301],{"emptyLinePlaceholder":300},[162,92502,92503],{"class":164,"line":3100},[162,92504,92505],{"class":361},"    \u002F\u002F 使用场景：求数组最大值\n",[162,92507,92508],{"class":164,"line":3140},[162,92509,92510],{"class":361},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[162,92512,92513,92516],{"class":164,"line":4878},[162,92514,92515],{"class":361},"    \u002F\u002F console.log(max)",[162,92517,92518],{"class":361},"   \u002F\u002F3\n",[162,92520,92521],{"class":164,"line":4883},[162,92522,92523],{"class":361},"    \u002F\u002F 指向空或者Math都是可以的\n",[162,92525,92526,92528,92530,92532,92534,92536,92538,92540,92542,92544],{"class":164,"line":4897},[162,92527,14317],{"class":172},[162,92529,60764],{"class":207},[162,92531,16659],{"class":172},[162,92533,176],{"class":168},[162,92535,3608],{"class":207},[162,92537,183],{"class":168},[162,92539,3794],{"class":207},[162,92541,183],{"class":168},[162,92543,3824],{"class":207},[162,92545,194],{"class":168},[162,92547,92548],{"class":164,"line":4902},[162,92549,92550],{"class":361},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[162,92552,92553,92555,92557,92559,92562,92564],{"class":164,"line":5694},[162,92554,14317],{"class":172},[162,92556,9058],{"class":207},[162,92558,16659],{"class":172},[162,92560,92561],{"class":168}," Math.max.",[162,92563,92480],{"class":5082},[162,92565,92566],{"class":168},"(Math, arr)\n",[162,92568,92569,92571,92574,92576,92579,92581],{"class":164,"line":5708},[162,92570,14317],{"class":172},[162,92572,92573],{"class":207}," min",[162,92575,16659],{"class":172},[162,92577,92578],{"class":168}," Math.min.",[162,92580,92480],{"class":5082},[162,92582,92566],{"class":168},[162,92584,92585,92587,92589,92592],{"class":164,"line":5716},[162,92586,76818],{"class":168},[162,92588,61316],{"class":5082},[162,92590,92591],{"class":168},"(max, min)     ",[162,92593,92594],{"class":361},"\u002F\u002F100,4\n",[162,92596,92597],{"class":164,"line":5721},[162,92598,301],{"emptyLinePlaceholder":300},[162,92600,92601],{"class":164,"line":5727},[162,92602,92603],{"class":361},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[162,92605,92606,92608,92610,92613,92615,92617,92620],{"class":164,"line":5733},[162,92607,76818],{"class":168},[162,92609,61316],{"class":5082},[162,92611,92612],{"class":168},"(Max.",[162,92614,2397],{"class":5082},[162,92616,604],{"class":168},[162,92618,92619],{"class":172},"...",[162,92621,92622],{"class":168},"arr))\n",[162,92624,92625,92627,92629],{"class":164,"line":5738},[162,92626,55487],{"class":168},[162,92628,54885],{"class":54373},[162,92630,54380],{"class":168},[162,92632,92633,92635,92637],{"class":164,"line":11052},[162,92634,54857],{"class":168},[162,92636,54872],{"class":54373},[162,92638,54380],{"class":168},[162,92640,92641],{"class":164,"line":11076},[162,92642,301],{"emptyLinePlaceholder":300},[162,92644,92645,92647,92649],{"class":164,"line":11081},[162,92646,54857],{"class":168},[162,92648,53708],{"class":54373},[162,92650,54380],{"class":168},[19,92652,92653],{},[4602,92654],{"alt":158,"src":92655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[1452,92657,92658],{"start":228},[1455,92659,92660],{},"bind()",[19,92662,92663],{},[4602,92664],{"alt":158,"src":92665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,92667,92668],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,92670,92671],{},"bind的语法跟call很相似",[153,92673,92675],{"className":56137,"code":92674,"language":56139,"meta":158,"style":158},"\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",[71,92676,92677,92685,92693,92697,92702,92706,92710,92715,92719,92724,92729,92734,92739,92744,92749,92754,92758,92766],{"__ignoreMap":158},[162,92678,92679,92681,92683],{"class":164,"line":165},[162,92680,4187],{"class":168},[162,92682,54872],{"class":54373},[162,92684,54380],{"class":168},[162,92686,92687,92689,92691],{"class":164,"line":197},[162,92688,55215],{"class":168},[162,92690,54885],{"class":54373},[162,92692,54380],{"class":168},[162,92694,92695],{"class":164,"line":228},[162,92696,74588],{"class":168},[162,92698,92699],{"class":164,"line":252},[162,92700,92701],{"class":168},"      age: 18\n",[162,92703,92704],{"class":164,"line":328},[162,92705,5305],{"class":168},[162,92707,92708],{"class":164,"line":466},[162,92709,80208],{"class":168},[162,92711,92712],{"class":164,"line":471},[162,92713,92714],{"class":168},"      console.log(this)\n",[162,92716,92717],{"class":164,"line":687},[162,92718,5305],{"class":168},[162,92720,92721],{"class":164,"line":692},[162,92722,92723],{"class":168},"    \u002F\u002F 1.bind 不会调用函数\n",[162,92725,92726],{"class":164,"line":698},[162,92727,92728],{"class":168},"    \u002F\u002F 2.bind能改变this的指向\n",[162,92730,92731],{"class":164,"line":2955},[162,92732,92733],{"class":168},"    fn.bind()\n",[162,92735,92736],{"class":164,"line":2960},[162,92737,92738],{"class":168},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[162,92740,92741],{"class":164,"line":2971},[162,92742,92743],{"class":168},"    const fun = fn.bind(obj)\n",[162,92745,92746],{"class":164,"line":2984},[162,92747,92748],{"class":168},"    \u002F\u002F console.log(fun)\n",[162,92750,92751],{"class":164,"line":2989},[162,92752,92753],{"class":168},"    \u002F\u002F 调用,查看this的指向\n",[162,92755,92756],{"class":164,"line":3011},[162,92757,55721],{"class":168},[162,92759,92760,92762,92764],{"class":164,"line":3022},[162,92761,55487],{"class":168},[162,92763,54885],{"class":54373},[162,92765,54380],{"class":168},[162,92767,92768,92770,92772],{"class":164,"line":3027},[162,92769,54857],{"class":168},[162,92771,54872],{"class":54373},[162,92773,54380],{"class":168},[19,92775,92776],{},[4602,92777],{"alt":158,"src":92778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[1452,92780,92781],{"start":252},[1455,92782,92783],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[153,92785,92787],{"className":56137,"code":92786,"language":56139,"meta":158,"style":158},"\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",[71,92788,92789,92797,92810,92818,92823,92827,92832,92837,92842,92847,92852,92857,92862,92867,92871,92879],{"__ignoreMap":158},[162,92790,92791,92793,92795],{"class":164,"line":165},[162,92792,4187],{"class":168},[162,92794,54872],{"class":54373},[162,92796,54380],{"class":168},[162,92798,92799,92801,92803,92806,92808],{"class":164,"line":197},[162,92800,55215],{"class":168},[162,92802,56957],{"class":54373},[162,92804,92805],{"class":168},">禁用\u003C\u002F",[162,92807,56957],{"class":54373},[162,92809,54380],{"class":168},[162,92811,92812,92814,92816],{"class":164,"line":228},[162,92813,55215],{"class":168},[162,92815,54885],{"class":54373},[162,92817,54380],{"class":168},[162,92819,92820],{"class":164,"line":252},[162,92821,92822],{"class":168},"    const btn = document.querySelector('button')\n",[162,92824,92825],{"class":164,"line":328},[162,92826,62085],{"class":168},[162,92828,92829],{"class":164,"line":466},[162,92830,92831],{"class":168},"      this.disabled = true\n",[162,92833,92834],{"class":164,"line":471},[162,92835,92836],{"class":168},"      \u002F\u002F 定时器是window进行调用的\n",[162,92838,92839],{"class":164,"line":687},[162,92840,92841],{"class":168},"      setTimeout(function () {\n",[162,92843,92844],{"class":164,"line":692},[162,92845,92846],{"class":168},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[162,92848,92849],{"class":164,"line":698},[162,92850,92851],{"class":168},"        this.disabled = false\n",[162,92853,92854],{"class":164,"line":2955},[162,92855,92856],{"class":168},"      }.bind(this), 2000)\n",[162,92858,92859],{"class":164,"line":2960},[162,92860,92861],{"class":168},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[162,92863,92864],{"class":164,"line":2971},[162,92865,92866],{"class":168},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[162,92868,92869],{"class":164,"line":2984},[162,92870,36536],{"class":168},[162,92872,92873,92875,92877],{"class":164,"line":2989},[162,92874,55487],{"class":168},[162,92876,54885],{"class":54373},[162,92878,54380],{"class":168},[162,92880,92881,92883,92885],{"class":164,"line":3011},[162,92882,54857],{"class":168},[162,92884,54872],{"class":54373},[162,92886,54380],{"class":168},[1452,92888,92889],{"start":328},[1455,92890,25044],{},[19,92892,92893],{},[4602,92894],{"alt":158,"src":92895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,92897,92899],{"id":92898},"_417-性能优化","4.17 性能优化",[3284,92901,92903],{"id":92902},"_4171-防抖","4.17.1 防抖",[19,92905,92906],{},[4602,92907],{"alt":158,"src":92908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,92910,92911],{},[3453,92912,92913],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,92915,92916],{},"防抖实现方式：",[4279,92918,92919],{},[1455,92920,92921],{},"lodash 提供了防抖处理",[19,92923,92924],{},"_.debounce(func,[wait=0],[options={}])",[19,92926,92927],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[153,92929,92931],{"className":53706,"code":92930,"language":53708,"meta":158,"style":158},"\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",[71,92932,92933,92943,92957,92961,92969,92983,93003,93015,93023,93029,93039,93051,93063,93074,93086,93096,93106,93119,93123,93131,93139,93143,93151,93169,93187,93195,93214,93224,93233,93244,93249,93253,93258,93263,93268,93293,93301,93309,93313],{"__ignoreMap":158},[162,92934,92935,92937,92939,92941],{"class":164,"line":165},[162,92936,54370],{"class":168},[162,92938,54374],{"class":54373},[162,92940,54377],{"class":5082},[162,92942,54380],{"class":168},[162,92944,92945,92947,92949,92951,92953,92955],{"class":164,"line":197},[162,92946,4187],{"class":168},[162,92948,53708],{"class":54373},[162,92950,54389],{"class":5082},[162,92952,173],{"class":168},[162,92954,54394],{"class":179},[162,92956,54380],{"class":168},[162,92958,92959],{"class":164,"line":228},[162,92960,301],{"emptyLinePlaceholder":300},[162,92962,92963,92965,92967],{"class":164,"line":252},[162,92964,4187],{"class":168},[162,92966,54407],{"class":54373},[162,92968,54380],{"class":168},[162,92970,92971,92973,92975,92977,92979,92981],{"class":164,"line":328},[162,92972,55215],{"class":168},[162,92974,54417],{"class":54373},[162,92976,54420],{"class":5082},[162,92978,173],{"class":168},[162,92980,54425],{"class":179},[162,92982,54380],{"class":168},[162,92984,92985,92987,92989,92991,92993,92995,92997,92999,93001],{"class":164,"line":466},[162,92986,55215],{"class":168},[162,92988,54417],{"class":54373},[162,92990,18013],{"class":5082},[162,92992,173],{"class":168},[162,92994,54464],{"class":179},[162,92996,54444],{"class":5082},[162,92998,173],{"class":168},[162,93000,54471],{"class":179},[162,93002,54380],{"class":168},[162,93004,93005,93007,93009,93011,93013],{"class":164,"line":471},[162,93006,55215],{"class":168},[162,93008,54480],{"class":54373},[162,93010,54483],{"class":168},[162,93012,54480],{"class":54373},[162,93014,54380],{"class":168},[162,93016,93017,93019,93021],{"class":164,"line":687},[162,93018,55215],{"class":168},[162,93020,3219],{"class":54373},[162,93022,54380],{"class":168},[162,93024,93025,93027],{"class":164,"line":692},[162,93026,57822],{"class":5082},[162,93028,1722],{"class":168},[162,93030,93031,93033,93035,93037],{"class":164,"line":698},[162,93032,75661],{"class":207},[162,93034,1730],{"class":168},[162,93036,63574],{"class":207},[162,93038,4433],{"class":168},[162,93040,93041,93043,93045,93047,93049],{"class":164,"line":2955},[162,93042,57841],{"class":207},[162,93044,1730],{"class":168},[162,93046,4845],{"class":207},[162,93048,54564],{"class":172},[162,93050,4433],{"class":168},[162,93052,93053,93055,93057,93059,93061],{"class":164,"line":2960},[162,93054,57855],{"class":207},[162,93056,1730],{"class":168},[162,93058,4845],{"class":207},[162,93060,54564],{"class":172},[162,93062,4433],{"class":168},[162,93064,93065,93067,93069,93072],{"class":164,"line":2971},[162,93066,57954],{"class":207},[162,93068,1730],{"class":168},[162,93070,93071],{"class":207},"gray",[162,93073,4433],{"class":168},[162,93075,93076,93078,93080,93082,93084],{"class":164,"line":2984},[162,93077,57992],{"class":207},[162,93079,1730],{"class":168},[162,93081,4106],{"class":207},[162,93083,54564],{"class":172},[162,93085,4433],{"class":168},[162,93087,93088,93090,93092,93094],{"class":164,"line":2989},[162,93089,60485],{"class":207},[162,93091,1730],{"class":168},[162,93093,63910],{"class":207},[162,93095,4433],{"class":168},[162,93097,93098,93100,93102,93104],{"class":164,"line":3011},[162,93099,60355],{"class":207},[162,93101,1730],{"class":168},[162,93103,54664],{"class":207},[162,93105,4433],{"class":168},[162,93107,93108,93111,93113,93115,93117],{"class":164,"line":3022},[162,93109,93110],{"class":207},"      padding-top",[162,93112,1730],{"class":168},[162,93114,637],{"class":207},[162,93116,54564],{"class":172},[162,93118,4433],{"class":168},[162,93120,93121],{"class":164,"line":3027},[162,93122,5305],{"class":168},[162,93124,93125,93127,93129],{"class":164,"line":3046},[162,93126,55487],{"class":168},[162,93128,3219],{"class":54373},[162,93130,54380],{"class":168},[162,93132,93133,93135,93137],{"class":164,"line":3052},[162,93134,54857],{"class":168},[162,93136,54407],{"class":54373},[162,93138,54380],{"class":168},[162,93140,93141],{"class":164,"line":3057},[162,93142,301],{"emptyLinePlaceholder":300},[162,93144,93145,93147,93149],{"class":164,"line":3072},[162,93146,4187],{"class":168},[162,93148,54872],{"class":54373},[162,93150,54380],{"class":168},[162,93152,93153,93155,93157,93159,93161,93163,93165,93167],{"class":164,"line":3077},[162,93154,55215],{"class":168},[162,93156,54683],{"class":54373},[162,93158,56556],{"class":5082},[162,93160,173],{"class":168},[162,93162,56561],{"class":179},[162,93164,58384],{"class":168},[162,93166,54683],{"class":54373},[162,93168,54380],{"class":168},[162,93170,93171,93173,93175,93177,93179,93181,93183,93185],{"class":164,"line":3100},[162,93172,55215],{"class":168},[162,93174,54885],{"class":54373},[162,93176,58309],{"class":5082},[162,93178,173],{"class":168},[162,93180,91339],{"class":179},[162,93182,58384],{"class":168},[162,93184,54885],{"class":54373},[162,93186,54380],{"class":168},[162,93188,93189,93191,93193],{"class":164,"line":3140},[162,93190,55215],{"class":168},[162,93192,54885],{"class":54373},[162,93194,54380],{"class":168},[162,93196,93197,93199,93201,93203,93205,93207,93209,93212],{"class":164,"line":4878},[162,93198,14317],{"class":172},[162,93200,89998],{"class":207},[162,93202,16659],{"class":172},[162,93204,57466],{"class":168},[162,93206,57469],{"class":5082},[162,93208,604],{"class":168},[162,93210,93211],{"class":179},"'.box'",[162,93213,434],{"class":168},[162,93215,93216,93218,93220,93222],{"class":164,"line":4883},[162,93217,55290],{"class":172},[162,93219,2642],{"class":168},[162,93221,173],{"class":172},[162,93223,902],{"class":207},[162,93225,93226,93228,93231],{"class":164,"line":4897},[162,93227,73149],{"class":172},[162,93229,93230],{"class":5082}," mouseMove",[162,93232,13951],{"class":168},[162,93234,93235,93238,93240,93242],{"class":164,"line":4902},[162,93236,93237],{"class":168},"      box.innerHTML ",[162,93239,173],{"class":172},[162,93241,6147],{"class":168},[162,93243,5819],{"class":172},[162,93245,93246],{"class":164,"line":5694},[162,93247,93248],{"class":361},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[162,93250,93251],{"class":164,"line":5708},[162,93252,5305],{"class":168},[162,93254,93255],{"class":164,"line":5716},[162,93256,93257],{"class":361},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[162,93259,93260],{"class":164,"line":5721},[162,93261,93262],{"class":361},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[162,93264,93265],{"class":164,"line":5727},[162,93266,93267],{"class":361},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[162,93269,93270,93273,93275,93277,93280,93283,93286,93289,93291],{"class":164,"line":5733},[162,93271,93272],{"class":168},"    box.",[162,93274,60882],{"class":5082},[162,93276,604],{"class":168},[162,93278,93279],{"class":179},"'mousemove'",[162,93281,93282],{"class":168},", _.",[162,93284,93285],{"class":5082},"debounce",[162,93287,93288],{"class":168},"(mouseMove, ",[162,93290,68141],{"class":207},[162,93292,586],{"class":168},[162,93294,93295,93297,93299],{"class":164,"line":5738},[162,93296,55487],{"class":168},[162,93298,54885],{"class":54373},[162,93300,54380],{"class":168},[162,93302,93303,93305,93307],{"class":164,"line":11052},[162,93304,54857],{"class":168},[162,93306,54872],{"class":54373},[162,93308,54380],{"class":168},[162,93310,93311],{"class":164,"line":11076},[162,93312,301],{"emptyLinePlaceholder":300},[162,93314,93315,93317,93319],{"class":164,"line":11081},[162,93316,54857],{"class":168},[162,93318,53708],{"class":54373},[162,93320,54380],{"class":168},[4279,93322,93323],{},[1455,93324,93325],{},"手写一个防抖函数来处理",[19,93327,93328],{},"防抖的核心就是利用定时器来实现的：",[19,93330,93331],{},"①声明一个定时器变量",[19,93333,93334],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,93336,93337],{},"③如果没有定时器则开启定时器，记得存到变量里面",[153,93339,93341],{"className":53706,"code":93340,"language":53708,"meta":158,"style":158},"\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",[71,93342,93343,93353,93367,93371,93379,93393,93413,93425,93433,93439,93449,93461,93473,93483,93495,93505,93515,93527,93531,93539,93547,93551,93559,93577,93595,93603,93621,93631,93639,93649,93653,93657,93661,93666,93671,93676,93681,93686,93691,93709,93716,93721,93729,93734,93747,93763,93773,93778,93782,93786,93806,93810,93815,93820,93825,93830,93838,93846,93850],{"__ignoreMap":158},[162,93344,93345,93347,93349,93351],{"class":164,"line":165},[162,93346,54370],{"class":168},[162,93348,54374],{"class":54373},[162,93350,54377],{"class":5082},[162,93352,54380],{"class":168},[162,93354,93355,93357,93359,93361,93363,93365],{"class":164,"line":197},[162,93356,4187],{"class":168},[162,93358,53708],{"class":54373},[162,93360,54389],{"class":5082},[162,93362,173],{"class":168},[162,93364,54394],{"class":179},[162,93366,54380],{"class":168},[162,93368,93369],{"class":164,"line":228},[162,93370,301],{"emptyLinePlaceholder":300},[162,93372,93373,93375,93377],{"class":164,"line":252},[162,93374,4187],{"class":168},[162,93376,54407],{"class":54373},[162,93378,54380],{"class":168},[162,93380,93381,93383,93385,93387,93389,93391],{"class":164,"line":328},[162,93382,55215],{"class":168},[162,93384,54417],{"class":54373},[162,93386,54420],{"class":5082},[162,93388,173],{"class":168},[162,93390,54425],{"class":179},[162,93392,54380],{"class":168},[162,93394,93395,93397,93399,93401,93403,93405,93407,93409,93411],{"class":164,"line":466},[162,93396,55215],{"class":168},[162,93398,54417],{"class":54373},[162,93400,18013],{"class":5082},[162,93402,173],{"class":168},[162,93404,54464],{"class":179},[162,93406,54444],{"class":5082},[162,93408,173],{"class":168},[162,93410,54471],{"class":179},[162,93412,54380],{"class":168},[162,93414,93415,93417,93419,93421,93423],{"class":164,"line":471},[162,93416,55215],{"class":168},[162,93418,54480],{"class":54373},[162,93420,54483],{"class":168},[162,93422,54480],{"class":54373},[162,93424,54380],{"class":168},[162,93426,93427,93429,93431],{"class":164,"line":687},[162,93428,55215],{"class":168},[162,93430,3219],{"class":54373},[162,93432,54380],{"class":168},[162,93434,93435,93437],{"class":164,"line":692},[162,93436,57822],{"class":5082},[162,93438,1722],{"class":168},[162,93440,93441,93443,93445,93447],{"class":164,"line":698},[162,93442,75661],{"class":207},[162,93444,1730],{"class":168},[162,93446,63574],{"class":207},[162,93448,4433],{"class":168},[162,93450,93451,93453,93455,93457,93459],{"class":164,"line":2955},[162,93452,57841],{"class":207},[162,93454,1730],{"class":168},[162,93456,4845],{"class":207},[162,93458,54564],{"class":172},[162,93460,4433],{"class":168},[162,93462,93463,93465,93467,93469,93471],{"class":164,"line":2960},[162,93464,57855],{"class":207},[162,93466,1730],{"class":168},[162,93468,4845],{"class":207},[162,93470,54564],{"class":172},[162,93472,4433],{"class":168},[162,93474,93475,93477,93479,93481],{"class":164,"line":2971},[162,93476,57954],{"class":207},[162,93478,1730],{"class":168},[162,93480,93071],{"class":207},[162,93482,4433],{"class":168},[162,93484,93485,93487,93489,93491,93493],{"class":164,"line":2984},[162,93486,57992],{"class":207},[162,93488,1730],{"class":168},[162,93490,4106],{"class":207},[162,93492,54564],{"class":172},[162,93494,4433],{"class":168},[162,93496,93497,93499,93501,93503],{"class":164,"line":2989},[162,93498,60485],{"class":207},[162,93500,1730],{"class":168},[162,93502,63910],{"class":207},[162,93504,4433],{"class":168},[162,93506,93507,93509,93511,93513],{"class":164,"line":3011},[162,93508,60355],{"class":207},[162,93510,1730],{"class":168},[162,93512,54664],{"class":207},[162,93514,4433],{"class":168},[162,93516,93517,93519,93521,93523,93525],{"class":164,"line":3022},[162,93518,93110],{"class":207},[162,93520,1730],{"class":168},[162,93522,637],{"class":207},[162,93524,54564],{"class":172},[162,93526,4433],{"class":168},[162,93528,93529],{"class":164,"line":3027},[162,93530,5305],{"class":168},[162,93532,93533,93535,93537],{"class":164,"line":3046},[162,93534,55487],{"class":168},[162,93536,3219],{"class":54373},[162,93538,54380],{"class":168},[162,93540,93541,93543,93545],{"class":164,"line":3052},[162,93542,54857],{"class":168},[162,93544,54407],{"class":54373},[162,93546,54380],{"class":168},[162,93548,93549],{"class":164,"line":3057},[162,93550,301],{"emptyLinePlaceholder":300},[162,93552,93553,93555,93557],{"class":164,"line":3072},[162,93554,4187],{"class":168},[162,93556,54872],{"class":54373},[162,93558,54380],{"class":168},[162,93560,93561,93563,93565,93567,93569,93571,93573,93575],{"class":164,"line":3077},[162,93562,55215],{"class":168},[162,93564,54683],{"class":54373},[162,93566,56556],{"class":5082},[162,93568,173],{"class":168},[162,93570,56561],{"class":179},[162,93572,58384],{"class":168},[162,93574,54683],{"class":54373},[162,93576,54380],{"class":168},[162,93578,93579,93581,93583,93585,93587,93589,93591,93593],{"class":164,"line":3100},[162,93580,55215],{"class":168},[162,93582,54885],{"class":54373},[162,93584,58309],{"class":5082},[162,93586,173],{"class":168},[162,93588,91339],{"class":179},[162,93590,58384],{"class":168},[162,93592,54885],{"class":54373},[162,93594,54380],{"class":168},[162,93596,93597,93599,93601],{"class":164,"line":3140},[162,93598,55215],{"class":168},[162,93600,54885],{"class":54373},[162,93602,54380],{"class":168},[162,93604,93605,93607,93609,93611,93613,93615,93617,93619],{"class":164,"line":4878},[162,93606,14317],{"class":172},[162,93608,89998],{"class":207},[162,93610,16659],{"class":172},[162,93612,57466],{"class":168},[162,93614,57469],{"class":5082},[162,93616,604],{"class":168},[162,93618,93211],{"class":179},[162,93620,434],{"class":168},[162,93622,93623,93625,93627,93629],{"class":164,"line":4883},[162,93624,55290],{"class":172},[162,93626,2642],{"class":168},[162,93628,173],{"class":172},[162,93630,902],{"class":207},[162,93632,93633,93635,93637],{"class":164,"line":4897},[162,93634,73149],{"class":172},[162,93636,93230],{"class":5082},[162,93638,13951],{"class":168},[162,93640,93641,93643,93645,93647],{"class":164,"line":4902},[162,93642,93237],{"class":168},[162,93644,173],{"class":172},[162,93646,6147],{"class":168},[162,93648,5819],{"class":172},[162,93650,93651],{"class":164,"line":5694},[162,93652,93248],{"class":361},[162,93654,93655],{"class":164,"line":5708},[162,93656,5305],{"class":168},[162,93658,93659],{"class":164,"line":5716},[162,93660,93257],{"class":361},[162,93662,93663],{"class":164,"line":5721},[162,93664,93665],{"class":361},"    \u002F\u002F 手写防抖函数\n",[162,93667,93668],{"class":164,"line":5727},[162,93669,93670],{"class":361},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[162,93672,93673],{"class":164,"line":5733},[162,93674,93675],{"class":361},"    \u002F\u002F 1.声明定时器变量\n",[162,93677,93678],{"class":164,"line":5738},[162,93679,93680],{"class":361},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[162,93682,93683],{"class":164,"line":11052},[162,93684,93685],{"class":361},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[162,93687,93688],{"class":164,"line":11076},[162,93689,93690],{"class":361},"    \u002F\u002F 4.定时器里面写函数调用\n",[162,93692,93693,93695,93698,93700,93703,93705,93707],{"class":164,"line":11081},[162,93694,73149],{"class":172},[162,93696,93697],{"class":5082}," debounce",[162,93699,604],{"class":168},[162,93701,93702],{"class":671},"fn",[162,93704,183],{"class":168},[162,93706,4003],{"class":671},[162,93708,15537],{"class":168},[162,93710,93711,93713],{"class":164,"line":11087},[162,93712,82837],{"class":172},[162,93714,93715],{"class":168}," timer\n",[162,93717,93718],{"class":164,"line":11114},[162,93719,93720],{"class":361},"      \u002F\u002F return 返回一个匿名函数\n",[162,93722,93723,93725,93727],{"class":164,"line":11119},[162,93724,77047],{"class":172},[162,93726,61987],{"class":172},[162,93728,57522],{"class":168},[162,93730,93731],{"class":164,"line":11125},[162,93732,93733],{"class":361},"        \u002F\u002F 这里边写第二三四步\n",[162,93735,93736,93738,93741,93744],{"class":164,"line":11137},[162,93737,5614],{"class":172},[162,93739,93740],{"class":168}," (timer) ",[162,93742,93743],{"class":5082},"clearTimeout",[162,93745,93746],{"class":168},"(timer)\n",[162,93748,93749,93752,93754,93757,93759,93761],{"class":164,"line":11149},[162,93750,93751],{"class":168},"        timer ",[162,93753,173],{"class":172},[162,93755,93756],{"class":5082}," setTimeout",[162,93758,604],{"class":168},[162,93760,57519],{"class":172},[162,93762,57522],{"class":168},[162,93764,93765,93768,93770],{"class":164,"line":11161},[162,93766,93767],{"class":5082},"          fn",[162,93769,16145],{"class":168},[162,93771,93772],{"class":361},"\u002F\u002F加小括号调用fn }, t)\n",[162,93774,93775],{"class":164,"line":12816},[162,93776,93777],{"class":168},"        }, t)\n",[162,93779,93780],{"class":164,"line":12841},[162,93781,55468],{"class":168},[162,93783,93784],{"class":164,"line":12864},[162,93785,5305],{"class":168},[162,93787,93788,93790,93792,93794,93796,93798,93800,93802,93804],{"class":164,"line":12888},[162,93789,93272],{"class":168},[162,93791,60882],{"class":5082},[162,93793,604],{"class":168},[162,93795,93279],{"class":179},[162,93797,183],{"class":168},[162,93799,93285],{"class":5082},[162,93801,93288],{"class":168},[162,93803,68141],{"class":207},[162,93805,586],{"class":168},[162,93807,93808],{"class":164,"line":12893},[162,93809,301],{"emptyLinePlaceholder":300},[162,93811,93812],{"class":164,"line":12898},[162,93813,93814],{"class":361},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[162,93816,93817],{"class":164,"line":12903},[162,93818,93819],{"class":361},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[162,93821,93822],{"class":164,"line":12912},[162,93823,93824],{"class":361},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[162,93826,93827],{"class":164,"line":12917},[162,93828,93829],{"class":361},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[162,93831,93832,93834,93836],{"class":164,"line":12923},[162,93833,55487],{"class":168},[162,93835,54885],{"class":54373},[162,93837,54380],{"class":168},[162,93839,93840,93842,93844],{"class":164,"line":12944},[162,93841,54857],{"class":168},[162,93843,54872],{"class":54373},[162,93845,54380],{"class":168},[162,93847,93848],{"class":164,"line":12950},[162,93849,301],{"emptyLinePlaceholder":300},[162,93851,93852,93854,93856],{"class":164,"line":12964},[162,93853,54857],{"class":168},[162,93855,53708],{"class":54373},[162,93857,54380],{"class":168},[3284,93859,93861],{"id":93860},"_4172-节流","4.17.2 节流",[19,93863,93864],{},[4602,93865],{"alt":158,"src":93866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,93868,93869],{},[4602,93870],{"alt":158,"src":93871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,93873,93874],{},[3453,93875,93876],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,93878,93879],{},"实现方式：",[4279,93881,93882],{},[1455,93883,93884],{},"lodash 提供的节流函数来处理",[19,93886,93887],{},"_.throttle(func,[wait=0],[options=])",[19,93889,93890],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[153,93892,93894],{"className":53706,"code":93893,"language":53708,"meta":158,"style":158},"\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",[71,93895,93896,93906,93920,93924,93932,93946,93966,93978,93986,93992,94002,94014,94026,94036,94048,94058,94068,94080,94084,94092,94100,94104,94112,94130,94148,94156,94174,94184,94192,94202,94206,94210,94214,94219,94224,94245,94253,94261,94265],{"__ignoreMap":158},[162,93897,93898,93900,93902,93904],{"class":164,"line":165},[162,93899,54370],{"class":168},[162,93901,54374],{"class":54373},[162,93903,54377],{"class":5082},[162,93905,54380],{"class":168},[162,93907,93908,93910,93912,93914,93916,93918],{"class":164,"line":197},[162,93909,4187],{"class":168},[162,93911,53708],{"class":54373},[162,93913,54389],{"class":5082},[162,93915,173],{"class":168},[162,93917,54394],{"class":179},[162,93919,54380],{"class":168},[162,93921,93922],{"class":164,"line":228},[162,93923,301],{"emptyLinePlaceholder":300},[162,93925,93926,93928,93930],{"class":164,"line":252},[162,93927,4187],{"class":168},[162,93929,54407],{"class":54373},[162,93931,54380],{"class":168},[162,93933,93934,93936,93938,93940,93942,93944],{"class":164,"line":328},[162,93935,55215],{"class":168},[162,93937,54417],{"class":54373},[162,93939,54420],{"class":5082},[162,93941,173],{"class":168},[162,93943,54425],{"class":179},[162,93945,54380],{"class":168},[162,93947,93948,93950,93952,93954,93956,93958,93960,93962,93964],{"class":164,"line":466},[162,93949,55215],{"class":168},[162,93951,54417],{"class":54373},[162,93953,18013],{"class":5082},[162,93955,173],{"class":168},[162,93957,54464],{"class":179},[162,93959,54444],{"class":5082},[162,93961,173],{"class":168},[162,93963,54471],{"class":179},[162,93965,54380],{"class":168},[162,93967,93968,93970,93972,93974,93976],{"class":164,"line":471},[162,93969,55215],{"class":168},[162,93971,54480],{"class":54373},[162,93973,54483],{"class":168},[162,93975,54480],{"class":54373},[162,93977,54380],{"class":168},[162,93979,93980,93982,93984],{"class":164,"line":687},[162,93981,55215],{"class":168},[162,93983,3219],{"class":54373},[162,93985,54380],{"class":168},[162,93987,93988,93990],{"class":164,"line":692},[162,93989,57822],{"class":5082},[162,93991,1722],{"class":168},[162,93993,93994,93996,93998,94000],{"class":164,"line":698},[162,93995,75661],{"class":207},[162,93997,1730],{"class":168},[162,93999,63574],{"class":207},[162,94001,4433],{"class":168},[162,94003,94004,94006,94008,94010,94012],{"class":164,"line":2955},[162,94005,57841],{"class":207},[162,94007,1730],{"class":168},[162,94009,4845],{"class":207},[162,94011,54564],{"class":172},[162,94013,4433],{"class":168},[162,94015,94016,94018,94020,94022,94024],{"class":164,"line":2960},[162,94017,57855],{"class":207},[162,94019,1730],{"class":168},[162,94021,4845],{"class":207},[162,94023,54564],{"class":172},[162,94025,4433],{"class":168},[162,94027,94028,94030,94032,94034],{"class":164,"line":2971},[162,94029,57954],{"class":207},[162,94031,1730],{"class":168},[162,94033,93071],{"class":207},[162,94035,4433],{"class":168},[162,94037,94038,94040,94042,94044,94046],{"class":164,"line":2984},[162,94039,57992],{"class":207},[162,94041,1730],{"class":168},[162,94043,4106],{"class":207},[162,94045,54564],{"class":172},[162,94047,4433],{"class":168},[162,94049,94050,94052,94054,94056],{"class":164,"line":2989},[162,94051,60485],{"class":207},[162,94053,1730],{"class":168},[162,94055,63910],{"class":207},[162,94057,4433],{"class":168},[162,94059,94060,94062,94064,94066],{"class":164,"line":3011},[162,94061,60355],{"class":207},[162,94063,1730],{"class":168},[162,94065,54664],{"class":207},[162,94067,4433],{"class":168},[162,94069,94070,94072,94074,94076,94078],{"class":164,"line":3022},[162,94071,93110],{"class":207},[162,94073,1730],{"class":168},[162,94075,637],{"class":207},[162,94077,54564],{"class":172},[162,94079,4433],{"class":168},[162,94081,94082],{"class":164,"line":3027},[162,94083,5305],{"class":168},[162,94085,94086,94088,94090],{"class":164,"line":3046},[162,94087,55487],{"class":168},[162,94089,3219],{"class":54373},[162,94091,54380],{"class":168},[162,94093,94094,94096,94098],{"class":164,"line":3052},[162,94095,54857],{"class":168},[162,94097,54407],{"class":54373},[162,94099,54380],{"class":168},[162,94101,94102],{"class":164,"line":3057},[162,94103,301],{"emptyLinePlaceholder":300},[162,94105,94106,94108,94110],{"class":164,"line":3072},[162,94107,4187],{"class":168},[162,94109,54872],{"class":54373},[162,94111,54380],{"class":168},[162,94113,94114,94116,94118,94120,94122,94124,94126,94128],{"class":164,"line":3077},[162,94115,55215],{"class":168},[162,94117,54683],{"class":54373},[162,94119,56556],{"class":5082},[162,94121,173],{"class":168},[162,94123,56561],{"class":179},[162,94125,58384],{"class":168},[162,94127,54683],{"class":54373},[162,94129,54380],{"class":168},[162,94131,94132,94134,94136,94138,94140,94142,94144,94146],{"class":164,"line":3100},[162,94133,55215],{"class":168},[162,94135,54885],{"class":54373},[162,94137,58309],{"class":5082},[162,94139,173],{"class":168},[162,94141,91339],{"class":179},[162,94143,58384],{"class":168},[162,94145,54885],{"class":54373},[162,94147,54380],{"class":168},[162,94149,94150,94152,94154],{"class":164,"line":3140},[162,94151,55215],{"class":168},[162,94153,54885],{"class":54373},[162,94155,54380],{"class":168},[162,94157,94158,94160,94162,94164,94166,94168,94170,94172],{"class":164,"line":4878},[162,94159,14317],{"class":172},[162,94161,89998],{"class":207},[162,94163,16659],{"class":172},[162,94165,57466],{"class":168},[162,94167,57469],{"class":5082},[162,94169,604],{"class":168},[162,94171,93211],{"class":179},[162,94173,434],{"class":168},[162,94175,94176,94178,94180,94182],{"class":164,"line":4883},[162,94177,55290],{"class":172},[162,94179,2642],{"class":168},[162,94181,173],{"class":172},[162,94183,902],{"class":207},[162,94185,94186,94188,94190],{"class":164,"line":4897},[162,94187,73149],{"class":172},[162,94189,93230],{"class":5082},[162,94191,13951],{"class":168},[162,94193,94194,94196,94198,94200],{"class":164,"line":4902},[162,94195,93237],{"class":168},[162,94197,173],{"class":172},[162,94199,6147],{"class":168},[162,94201,5819],{"class":172},[162,94203,94204],{"class":164,"line":5694},[162,94205,93248],{"class":361},[162,94207,94208],{"class":164,"line":5708},[162,94209,5305],{"class":168},[162,94211,94212],{"class":164,"line":5716},[162,94213,93257],{"class":361},[162,94215,94216],{"class":164,"line":5721},[162,94217,94218],{"class":361},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[162,94220,94221],{"class":164,"line":5727},[162,94222,94223],{"class":361},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[162,94225,94226,94228,94230,94232,94234,94236,94239,94241,94243],{"class":164,"line":5733},[162,94227,93272],{"class":168},[162,94229,60882],{"class":5082},[162,94231,604],{"class":168},[162,94233,93279],{"class":179},[162,94235,93282],{"class":168},[162,94237,94238],{"class":5082},"throttle",[162,94240,93288],{"class":168},[162,94242,68141],{"class":207},[162,94244,586],{"class":168},[162,94246,94247,94249,94251],{"class":164,"line":5738},[162,94248,55487],{"class":168},[162,94250,54885],{"class":54373},[162,94252,54380],{"class":168},[162,94254,94255,94257,94259],{"class":164,"line":11052},[162,94256,54857],{"class":168},[162,94258,54872],{"class":54373},[162,94260,54380],{"class":168},[162,94262,94263],{"class":164,"line":11076},[162,94264,301],{"emptyLinePlaceholder":300},[162,94266,94267,94269,94271],{"class":164,"line":11081},[162,94268,54857],{"class":168},[162,94270,53708],{"class":54373},[162,94272,54380],{"class":168},[4279,94274,94275],{},[1455,94276,94277],{},"手写一个节流函数来处理",[19,94279,74017],{},[19,94281,93331],{},[19,94283,94284],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,94286,94287],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[153,94289,94291],{"className":53706,"code":94290,"language":53708,"meta":158,"style":158},"\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",[71,94292,94293,94303,94317,94321,94329,94343,94363,94375,94383,94389,94399,94411,94423,94433,94445,94455,94465,94477,94481,94489,94497,94501,94509,94527,94545,94553,94571,94581,94589,94599,94603,94607,94611,94616,94621,94626,94631,94636,94641,94658,94664,94672,94683,94698,94705,94710,94715,94725,94730,94735,94740,94744,94748,94752,94772,94780,94788,94792],{"__ignoreMap":158},[162,94294,94295,94297,94299,94301],{"class":164,"line":165},[162,94296,54370],{"class":168},[162,94298,54374],{"class":54373},[162,94300,54377],{"class":5082},[162,94302,54380],{"class":168},[162,94304,94305,94307,94309,94311,94313,94315],{"class":164,"line":197},[162,94306,4187],{"class":168},[162,94308,53708],{"class":54373},[162,94310,54389],{"class":5082},[162,94312,173],{"class":168},[162,94314,54394],{"class":179},[162,94316,54380],{"class":168},[162,94318,94319],{"class":164,"line":228},[162,94320,301],{"emptyLinePlaceholder":300},[162,94322,94323,94325,94327],{"class":164,"line":252},[162,94324,4187],{"class":168},[162,94326,54407],{"class":54373},[162,94328,54380],{"class":168},[162,94330,94331,94333,94335,94337,94339,94341],{"class":164,"line":328},[162,94332,55215],{"class":168},[162,94334,54417],{"class":54373},[162,94336,54420],{"class":5082},[162,94338,173],{"class":168},[162,94340,54425],{"class":179},[162,94342,54380],{"class":168},[162,94344,94345,94347,94349,94351,94353,94355,94357,94359,94361],{"class":164,"line":466},[162,94346,55215],{"class":168},[162,94348,54417],{"class":54373},[162,94350,18013],{"class":5082},[162,94352,173],{"class":168},[162,94354,54464],{"class":179},[162,94356,54444],{"class":5082},[162,94358,173],{"class":168},[162,94360,54471],{"class":179},[162,94362,54380],{"class":168},[162,94364,94365,94367,94369,94371,94373],{"class":164,"line":471},[162,94366,55215],{"class":168},[162,94368,54480],{"class":54373},[162,94370,54483],{"class":168},[162,94372,54480],{"class":54373},[162,94374,54380],{"class":168},[162,94376,94377,94379,94381],{"class":164,"line":687},[162,94378,55215],{"class":168},[162,94380,3219],{"class":54373},[162,94382,54380],{"class":168},[162,94384,94385,94387],{"class":164,"line":692},[162,94386,57822],{"class":5082},[162,94388,1722],{"class":168},[162,94390,94391,94393,94395,94397],{"class":164,"line":698},[162,94392,75661],{"class":207},[162,94394,1730],{"class":168},[162,94396,63574],{"class":207},[162,94398,4433],{"class":168},[162,94400,94401,94403,94405,94407,94409],{"class":164,"line":2955},[162,94402,57841],{"class":207},[162,94404,1730],{"class":168},[162,94406,4845],{"class":207},[162,94408,54564],{"class":172},[162,94410,4433],{"class":168},[162,94412,94413,94415,94417,94419,94421],{"class":164,"line":2960},[162,94414,57855],{"class":207},[162,94416,1730],{"class":168},[162,94418,4845],{"class":207},[162,94420,54564],{"class":172},[162,94422,4433],{"class":168},[162,94424,94425,94427,94429,94431],{"class":164,"line":2971},[162,94426,57954],{"class":207},[162,94428,1730],{"class":168},[162,94430,93071],{"class":207},[162,94432,4433],{"class":168},[162,94434,94435,94437,94439,94441,94443],{"class":164,"line":2984},[162,94436,57992],{"class":207},[162,94438,1730],{"class":168},[162,94440,4106],{"class":207},[162,94442,54564],{"class":172},[162,94444,4433],{"class":168},[162,94446,94447,94449,94451,94453],{"class":164,"line":2989},[162,94448,60485],{"class":207},[162,94450,1730],{"class":168},[162,94452,63910],{"class":207},[162,94454,4433],{"class":168},[162,94456,94457,94459,94461,94463],{"class":164,"line":3011},[162,94458,60355],{"class":207},[162,94460,1730],{"class":168},[162,94462,54664],{"class":207},[162,94464,4433],{"class":168},[162,94466,94467,94469,94471,94473,94475],{"class":164,"line":3022},[162,94468,93110],{"class":207},[162,94470,1730],{"class":168},[162,94472,637],{"class":207},[162,94474,54564],{"class":172},[162,94476,4433],{"class":168},[162,94478,94479],{"class":164,"line":3027},[162,94480,5305],{"class":168},[162,94482,94483,94485,94487],{"class":164,"line":3046},[162,94484,55487],{"class":168},[162,94486,3219],{"class":54373},[162,94488,54380],{"class":168},[162,94490,94491,94493,94495],{"class":164,"line":3052},[162,94492,54857],{"class":168},[162,94494,54407],{"class":54373},[162,94496,54380],{"class":168},[162,94498,94499],{"class":164,"line":3057},[162,94500,301],{"emptyLinePlaceholder":300},[162,94502,94503,94505,94507],{"class":164,"line":3072},[162,94504,4187],{"class":168},[162,94506,54872],{"class":54373},[162,94508,54380],{"class":168},[162,94510,94511,94513,94515,94517,94519,94521,94523,94525],{"class":164,"line":3077},[162,94512,55215],{"class":168},[162,94514,54683],{"class":54373},[162,94516,56556],{"class":5082},[162,94518,173],{"class":168},[162,94520,56561],{"class":179},[162,94522,58384],{"class":168},[162,94524,54683],{"class":54373},[162,94526,54380],{"class":168},[162,94528,94529,94531,94533,94535,94537,94539,94541,94543],{"class":164,"line":3100},[162,94530,55215],{"class":168},[162,94532,54885],{"class":54373},[162,94534,58309],{"class":5082},[162,94536,173],{"class":168},[162,94538,91339],{"class":179},[162,94540,58384],{"class":168},[162,94542,54885],{"class":54373},[162,94544,54380],{"class":168},[162,94546,94547,94549,94551],{"class":164,"line":3140},[162,94548,55215],{"class":168},[162,94550,54885],{"class":54373},[162,94552,54380],{"class":168},[162,94554,94555,94557,94559,94561,94563,94565,94567,94569],{"class":164,"line":4878},[162,94556,14317],{"class":172},[162,94558,89998],{"class":207},[162,94560,16659],{"class":172},[162,94562,57466],{"class":168},[162,94564,57469],{"class":5082},[162,94566,604],{"class":168},[162,94568,93211],{"class":179},[162,94570,434],{"class":168},[162,94572,94573,94575,94577,94579],{"class":164,"line":4883},[162,94574,55290],{"class":172},[162,94576,2642],{"class":168},[162,94578,173],{"class":172},[162,94580,902],{"class":207},[162,94582,94583,94585,94587],{"class":164,"line":4897},[162,94584,73149],{"class":172},[162,94586,93230],{"class":5082},[162,94588,13951],{"class":168},[162,94590,94591,94593,94595,94597],{"class":164,"line":4902},[162,94592,93237],{"class":168},[162,94594,173],{"class":172},[162,94596,6147],{"class":168},[162,94598,5819],{"class":172},[162,94600,94601],{"class":164,"line":5694},[162,94602,93248],{"class":361},[162,94604,94605],{"class":164,"line":5708},[162,94606,5305],{"class":168},[162,94608,94609],{"class":164,"line":5716},[162,94610,93257],{"class":361},[162,94612,94613],{"class":164,"line":5721},[162,94614,94615],{"class":361},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[162,94617,94618],{"class":164,"line":5727},[162,94619,94620],{"class":361},"    \u002F\u002F 1.声明一个定时器变量\n",[162,94622,94623],{"class":164,"line":5733},[162,94624,94625],{"class":361},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[162,94627,94628],{"class":164,"line":5738},[162,94629,94630],{"class":361},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[162,94632,94633],{"class":164,"line":11052},[162,94634,94635],{"class":361},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[162,94637,94638],{"class":164,"line":11076},[162,94639,94640],{"class":361},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[162,94642,94643,94645,94648,94650,94652,94654,94656],{"class":164,"line":11081},[162,94644,73149],{"class":172},[162,94646,94647],{"class":5082}," throttle",[162,94649,604],{"class":168},[162,94651,93702],{"class":671},[162,94653,183],{"class":168},[162,94655,4003],{"class":671},[162,94657,15537],{"class":168},[162,94659,94660,94662],{"class":164,"line":11087},[162,94661,82837],{"class":172},[162,94663,93715],{"class":168},[162,94665,94666,94668,94670],{"class":164,"line":11114},[162,94667,77047],{"class":172},[162,94669,61987],{"class":172},[162,94671,57522],{"class":168},[162,94673,94674,94676,94678,94680],{"class":164,"line":11119},[162,94675,5614],{"class":172},[162,94677,1003],{"class":168},[162,94679,3526],{"class":172},[162,94681,94682],{"class":168},"timer) {\n",[162,94684,94685,94688,94690,94692,94694,94696],{"class":164,"line":11125},[162,94686,94687],{"class":168},"          timer ",[162,94689,173],{"class":172},[162,94691,93756],{"class":5082},[162,94693,604],{"class":168},[162,94695,57519],{"class":172},[162,94697,57522],{"class":168},[162,94699,94700,94703],{"class":164,"line":11137},[162,94701,94702],{"class":5082},"            fn",[162,94704,1526],{"class":168},[162,94706,94707],{"class":164,"line":11149},[162,94708,94709],{"class":361},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[162,94711,94712],{"class":164,"line":11161},[162,94713,94714],{"class":361},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[162,94716,94717,94720,94722],{"class":164,"line":12816},[162,94718,94719],{"class":168},"            timer ",[162,94721,173],{"class":172},[162,94723,94724],{"class":207}," null\n",[162,94726,94727],{"class":164,"line":12841},[162,94728,94729],{"class":361},"            \u002F\u002F 不能用clearTimeout(timer)\n",[162,94731,94732],{"class":164,"line":12864},[162,94733,94734],{"class":361},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[162,94736,94737],{"class":164,"line":12888},[162,94738,94739],{"class":168},"          }, t)\n",[162,94741,94742],{"class":164,"line":12893},[162,94743,5646],{"class":168},[162,94745,94746],{"class":164,"line":12898},[162,94747,55468],{"class":168},[162,94749,94750],{"class":164,"line":12903},[162,94751,5305],{"class":168},[162,94753,94754,94756,94758,94760,94762,94764,94766,94768,94770],{"class":164,"line":12912},[162,94755,93272],{"class":168},[162,94757,60882],{"class":5082},[162,94759,604],{"class":168},[162,94761,93279],{"class":179},[162,94763,183],{"class":168},[162,94765,94238],{"class":5082},[162,94767,93288],{"class":168},[162,94769,68141],{"class":207},[162,94771,586],{"class":168},[162,94773,94774,94776,94778],{"class":164,"line":12917},[162,94775,55487],{"class":168},[162,94777,54885],{"class":54373},[162,94779,54380],{"class":168},[162,94781,94782,94784,94786],{"class":164,"line":12923},[162,94783,54857],{"class":168},[162,94785,54872],{"class":54373},[162,94787,54380],{"class":168},[162,94789,94790],{"class":164,"line":12944},[162,94791,301],{"emptyLinePlaceholder":300},[162,94793,94794,94796,94798],{"class":164,"line":12950},[162,94795,54857],{"class":168},[162,94797,53708],{"class":54373},[162,94799,54380],{"class":168},[3284,94801,94803],{"id":94802},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[153,94805,94807],{"className":56137,"code":94806,"language":56139,"meta":158,"style":158},"\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",[71,94808,94809,94817,94825,94830,94835,94840,94845,94849,94857],{"__ignoreMap":158},[162,94810,94811,94813,94815],{"class":164,"line":165},[162,94812,4187],{"class":168},[162,94814,54872],{"class":54373},[162,94816,54380],{"class":168},[162,94818,94819,94821,94823],{"class":164,"line":197},[162,94820,55215],{"class":168},[162,94822,54885],{"class":54373},[162,94824,54380],{"class":168},[162,94826,94827],{"class":164,"line":228},[162,94828,94829],{"class":168},"    let timer = null\n",[162,94831,94832],{"class":164,"line":252},[162,94833,94834],{"class":168},"    timer = setTimeout(() => {\n",[162,94836,94837],{"class":164,"line":328},[162,94838,94839],{"class":168},"      clearTimeout(timer)\n",[162,94841,94842],{"class":164,"line":466},[162,94843,94844],{"class":168},"      console.log(timer)\n",[162,94846,94847],{"class":164,"line":471},[162,94848,63294],{"class":168},[162,94850,94851,94853,94855],{"class":164,"line":687},[162,94852,55487],{"class":168},[162,94854,54885],{"class":54373},[162,94856,54380],{"class":168},[162,94858,94859,94861,94863],{"class":164,"line":692},[162,94860,54857],{"class":168},[162,94862,54872],{"class":54373},[162,94864,54380],{"class":168},[19,94866,94867],{},"输出为1",[19,94869,94870],{},"在开启的定时器里边写清除定时器",[19,94872,94873],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[3284,94875,94877],{"id":94876},"_4174-节流综合案例","4.17.4 节流综合案例",[19,94879,94880],{},"页面打开，可以记录上一次的视频播放位置",[19,94882,94883],{},[4602,94884],{"alt":158,"src":94885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,94887,94888],{},[4602,94889],{"alt":158,"src":94890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[153,94892,94894],{"className":53706,"code":94893,"language":53708,"meta":158,"style":158},"\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",[71,94895,94896,94906,94920,94924,94932,94946,94966,94986,95008,95021,95029,95035,95045,95055,95065,95069,95073,95080,95093,95105,95109,95113,95123,95135,95149,95153,95157,95164,95174,95187,95199,95209,95219,95235,95247,95251,95255,95263,95273,95285,95295,95305,95315,95319,95323,95333,95344,95348,95356,95364,95368,95376,95391,95406,95421,95442,95450,95458,95473,95495,95503,95518,95544,95570,95596,95604,95612,95631,95639,95644,95663,95668,95686,95691,95696,95704,95709,95723,95731,95736,95753,95757,95762,95784,95788,95796,95804,95808],{"__ignoreMap":158},[162,94897,94898,94900,94902,94904],{"class":164,"line":165},[162,94899,54370],{"class":168},[162,94901,54374],{"class":54373},[162,94903,54377],{"class":5082},[162,94905,54380],{"class":168},[162,94907,94908,94910,94912,94914,94916,94918],{"class":164,"line":197},[162,94909,4187],{"class":168},[162,94911,53708],{"class":54373},[162,94913,54389],{"class":5082},[162,94915,173],{"class":168},[162,94917,54394],{"class":179},[162,94919,54380],{"class":168},[162,94921,94922],{"class":164,"line":228},[162,94923,301],{"emptyLinePlaceholder":300},[162,94925,94926,94928,94930],{"class":164,"line":252},[162,94927,4187],{"class":168},[162,94929,54407],{"class":54373},[162,94931,54380],{"class":168},[162,94933,94934,94936,94938,94940,94942,94944],{"class":164,"line":328},[162,94935,55215],{"class":168},[162,94937,54417],{"class":54373},[162,94939,54420],{"class":5082},[162,94941,173],{"class":168},[162,94943,54425],{"class":179},[162,94945,62196],{"class":168},[162,94947,94948,94950,94952,94954,94956,94958,94960,94962,94964],{"class":164,"line":466},[162,94949,55215],{"class":168},[162,94951,54417],{"class":54373},[162,94953,54436],{"class":5082},[162,94955,173],{"class":168},[162,94957,54441],{"class":179},[162,94959,54444],{"class":5082},[162,94961,173],{"class":168},[162,94963,54449],{"class":179},[162,94965,62196],{"class":168},[162,94967,94968,94970,94972,94974,94976,94978,94980,94982,94984],{"class":164,"line":471},[162,94969,55215],{"class":168},[162,94971,54417],{"class":54373},[162,94973,18013],{"class":5082},[162,94975,173],{"class":168},[162,94977,54464],{"class":179},[162,94979,54444],{"class":5082},[162,94981,173],{"class":168},[162,94983,54471],{"class":179},[162,94985,62196],{"class":168},[162,94987,94988,94990,94992,94994,94996,94999,95001,95003,95006],{"class":164,"line":687},[162,94989,55215],{"class":168},[162,94991,54417],{"class":54373},[162,94993,18013],{"class":5082},[162,94995,173],{"class":168},[162,94997,94998],{"class":179},"\"referrer\"",[162,95000,54444],{"class":5082},[162,95002,173],{"class":168},[162,95004,95005],{"class":179},"\"never\"",[162,95007,62196],{"class":168},[162,95009,95010,95012,95014,95017,95019],{"class":164,"line":692},[162,95011,55215],{"class":168},[162,95013,54480],{"class":54373},[162,95015,95016],{"class":168},">综合案例\u003C\u002F",[162,95018,54480],{"class":54373},[162,95020,54380],{"class":168},[162,95022,95023,95025,95027],{"class":164,"line":698},[162,95024,55215],{"class":168},[162,95026,3219],{"class":54373},[162,95028,54380],{"class":168},[162,95030,95031,95033],{"class":164,"line":2955},[162,95032,9509],{"class":54373},[162,95034,1722],{"class":168},[162,95036,95037,95039,95041,95043],{"class":164,"line":2960},[162,95038,57765],{"class":207},[162,95040,1730],{"class":168},[162,95042,312],{"class":207},[162,95044,4433],{"class":168},[162,95046,95047,95049,95051,95053],{"class":164,"line":2971},[162,95048,57776],{"class":207},[162,95050,1730],{"class":168},[162,95052,312],{"class":207},[162,95054,4433],{"class":168},[162,95056,95057,95059,95061,95063],{"class":164,"line":2984},[162,95058,75661],{"class":207},[162,95060,1730],{"class":168},[162,95062,63574],{"class":207},[162,95064,4433],{"class":168},[162,95066,95067],{"class":164,"line":2989},[162,95068,5305],{"class":168},[162,95070,95071],{"class":164,"line":3011},[162,95072,301],{"emptyLinePlaceholder":300},[162,95074,95075,95078],{"class":164,"line":3022},[162,95076,95077],{"class":5082},"    .container",[162,95079,1722],{"class":168},[162,95081,95082,95084,95086,95089,95091],{"class":164,"line":3027},[162,95083,57841],{"class":207},[162,95085,1730],{"class":168},[162,95087,95088],{"class":207},"1200",[162,95090,54564],{"class":172},[162,95092,4433],{"class":168},[162,95094,95095,95097,95099,95101,95103],{"class":164,"line":3046},[162,95096,57776],{"class":207},[162,95098,1730],{"class":168},[162,95100,312],{"class":207},[162,95102,54628],{"class":207},[162,95104,4433],{"class":168},[162,95106,95107],{"class":164,"line":3052},[162,95108,5305],{"class":168},[162,95110,95111],{"class":164,"line":3057},[162,95112,301],{"emptyLinePlaceholder":300},[162,95114,95115,95118,95121],{"class":164,"line":3072},[162,95116,95117],{"class":5082},"    .video",[162,95119,95120],{"class":54373}," video",[162,95122,1722],{"class":168},[162,95124,95125,95127,95129,95131,95133],{"class":164,"line":3077},[162,95126,57841],{"class":207},[162,95128,1730],{"class":168},[162,95130,3608],{"class":207},[162,95132,2708],{"class":172},[162,95134,4433],{"class":168},[162,95136,95137,95139,95141,95143,95145,95147],{"class":164,"line":3100},[162,95138,57765],{"class":207},[162,95140,1730],{"class":168},[162,95142,1011],{"class":207},[162,95144,54564],{"class":172},[162,95146,2717],{"class":207},[162,95148,4433],{"class":168},[162,95150,95151],{"class":164,"line":3140},[162,95152,5305],{"class":168},[162,95154,95155],{"class":164,"line":4878},[162,95156,301],{"emptyLinePlaceholder":300},[162,95158,95159,95162],{"class":164,"line":4883},[162,95160,95161],{"class":5082},"    .elevator",[162,95163,1722],{"class":168},[162,95165,95166,95168,95170,95172],{"class":164,"line":4897},[162,95167,57829],{"class":207},[162,95169,1730],{"class":168},[162,95171,89298],{"class":207},[162,95173,4433],{"class":168},[162,95175,95176,95178,95180,95183,95185],{"class":164,"line":4902},[162,95177,58017],{"class":207},[162,95179,1730],{"class":168},[162,95181,95182],{"class":207},"280",[162,95184,54564],{"class":172},[162,95186,4433],{"class":168},[162,95188,95189,95191,95193,95195,95197],{"class":164,"line":5694},[162,95190,89492],{"class":207},[162,95192,1730],{"class":168},[162,95194,1011],{"class":207},[162,95196,54564],{"class":172},[162,95198,4433],{"class":168},[162,95200,95201,95203,95205,95207],{"class":164,"line":5708},[162,95202,89305],{"class":207},[162,95204,1730],{"class":168},[162,95206,89310],{"class":207},[162,95208,4433],{"class":168},[162,95210,95211,95213,95215,95217],{"class":164,"line":5716},[162,95212,64789],{"class":207},[162,95214,1730],{"class":168},[162,95216,63910],{"class":207},[162,95218,4433],{"class":168},[162,95220,95221,95223,95225,95227,95229,95231,95233],{"class":164,"line":5721},[162,95222,65045],{"class":207},[162,95224,1730],{"class":168},[162,95226,208],{"class":207},[162,95228,54564],{"class":172},[162,95230,54593],{"class":207},[162,95232,65312],{"class":207},[162,95234,4433],{"class":168},[162,95236,95237,95239,95241,95243,95245],{"class":164,"line":5727},[162,95238,57841],{"class":207},[162,95240,1730],{"class":168},[162,95242,4184],{"class":207},[162,95244,54564],{"class":172},[162,95246,4433],{"class":168},[162,95248,95249],{"class":164,"line":5733},[162,95250,5305],{"class":168},[162,95252,95253],{"class":164,"line":5738},[162,95254,301],{"emptyLinePlaceholder":300},[162,95256,95257,95259,95261],{"class":164,"line":11052},[162,95258,95161],{"class":5082},[162,95260,4538],{"class":54373},[162,95262,1722],{"class":168},[162,95264,95265,95267,95269,95271],{"class":164,"line":11076},[162,95266,58079],{"class":207},[162,95268,1730],{"class":168},[162,95270,63937],{"class":207},[162,95272,4433],{"class":168},[162,95274,95275,95277,95279,95281,95283],{"class":164,"line":11081},[162,95276,57765],{"class":207},[162,95278,1730],{"class":168},[162,95280,1006],{"class":207},[162,95282,54564],{"class":172},[162,95284,4433],{"class":168},[162,95286,95287,95289,95291,95293],{"class":164,"line":11087},[162,95288,67037],{"class":207},[162,95290,1730],{"class":168},[162,95292,57807],{"class":207},[162,95294,4433],{"class":168},[162,95296,95297,95299,95301,95303],{"class":164,"line":11114},[162,95298,60355],{"class":207},[162,95300,1730],{"class":168},[162,95302,54664],{"class":207},[162,95304,4433],{"class":168},[162,95306,95307,95309,95311,95313],{"class":164,"line":11119},[162,95308,60485],{"class":207},[162,95310,1730],{"class":168},[162,95312,65138],{"class":207},[162,95314,4433],{"class":168},[162,95316,95317],{"class":164,"line":11125},[162,95318,5305],{"class":168},[162,95320,95321],{"class":164,"line":11137},[162,95322,301],{"emptyLinePlaceholder":300},[162,95324,95325,95327,95329,95331],{"class":164,"line":11149},[162,95326,95161],{"class":5082},[162,95328,4538],{"class":54373},[162,95330,67091],{"class":5082},[162,95332,1722],{"class":168},[162,95334,95335,95337,95339,95342],{"class":164,"line":11161},[162,95336,60485],{"class":207},[162,95338,1730],{"class":168},[162,95340,95341],{"class":207},"#1286ff",[162,95343,4433],{"class":168},[162,95345,95346],{"class":164,"line":12816},[162,95347,5305],{"class":168},[162,95349,95350,95352,95354],{"class":164,"line":12841},[162,95351,55487],{"class":168},[162,95353,3219],{"class":54373},[162,95355,54380],{"class":168},[162,95357,95358,95360,95362],{"class":164,"line":12864},[162,95359,54857],{"class":168},[162,95361,54407],{"class":54373},[162,95363,54380],{"class":168},[162,95365,95366],{"class":164,"line":12888},[162,95367,301],{"emptyLinePlaceholder":300},[162,95369,95370,95372,95374],{"class":164,"line":12893},[162,95371,4187],{"class":168},[162,95373,54872],{"class":54373},[162,95375,54380],{"class":168},[162,95377,95378,95380,95382,95384,95386,95389],{"class":164,"line":12898},[162,95379,55215],{"class":168},[162,95381,54683],{"class":54373},[162,95383,56556],{"class":5082},[162,95385,173],{"class":168},[162,95387,95388],{"class":179},"\"container\"",[162,95390,54380],{"class":168},[162,95392,95393,95395,95397,95399,95401,95404],{"class":164,"line":12903},[162,95394,54414],{"class":168},[162,95396,54683],{"class":54373},[162,95398,56556],{"class":5082},[162,95400,173],{"class":168},[162,95402,95403],{"class":179},"\"header\"",[162,95405,54380],{"class":168},[162,95407,95408,95410,95412,95414,95416,95419],{"class":164,"line":12912},[162,95409,58304],{"class":168},[162,95411,3538],{"class":54373},[162,95413,64125],{"class":5082},[162,95415,173],{"class":168},[162,95417,95418],{"class":179},"\"http:\u002F\u002Fpip.itcast.cn\"",[162,95420,54380],{"class":168},[162,95422,95423,95425,95427,95429,95431,95434,95436,95438,95440],{"class":164,"line":12917},[162,95424,58372],{"class":168},[162,95426,4602],{"class":54373},[162,95428,58309],{"class":5082},[162,95430,173],{"class":168},[162,95432,95433],{"class":179},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[162,95435,58317],{"class":5082},[162,95437,173],{"class":168},[162,95439,10756],{"class":179},[162,95441,62196],{"class":168},[162,95443,95444,95446,95448],{"class":164,"line":12923},[162,95445,58477],{"class":168},[162,95447,3538],{"class":54373},[162,95449,54380],{"class":168},[162,95451,95452,95454,95456],{"class":164,"line":12944},[162,95453,54848],{"class":168},[162,95455,54683],{"class":54373},[162,95457,54380],{"class":168},[162,95459,95460,95462,95464,95466,95468,95471],{"class":164,"line":12950},[162,95461,54414],{"class":168},[162,95463,54683],{"class":54373},[162,95465,56556],{"class":5082},[162,95467,173],{"class":168},[162,95469,95470],{"class":179},"\"video\"",[162,95472,54380],{"class":168},[162,95474,95475,95477,95479,95481,95483,95486,95489,95491,95493],{"class":164,"line":12964},[162,95476,58304],{"class":168},[162,95478,31272],{"class":54373},[162,95480,58309],{"class":5082},[162,95482,173],{"class":168},[162,95484,95485],{"class":179},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[162,95487,95488],{"class":5082}," controls",[162,95490,58384],{"class":168},[162,95492,31272],{"class":54373},[162,95494,54380],{"class":168},[162,95496,95497,95499,95501],{"class":164,"line":12970},[162,95498,54848],{"class":168},[162,95500,54683],{"class":54373},[162,95502,54380],{"class":168},[162,95504,95505,95507,95509,95511,95513,95516],{"class":164,"line":12997},[162,95506,54414],{"class":168},[162,95508,54683],{"class":54373},[162,95510,56556],{"class":5082},[162,95512,173],{"class":168},[162,95514,95515],{"class":179},"\"elevator\"",[162,95517,54380],{"class":168},[162,95519,95520,95522,95524,95526,95528,95530,95533,95535,95537,95540,95542],{"class":164,"line":13006},[162,95521,58304],{"class":168},[162,95523,3538],{"class":54373},[162,95525,64125],{"class":5082},[162,95527,173],{"class":168},[162,95529,67303],{"class":179},[162,95531,95532],{"class":5082}," data-ref",[162,95534,173],{"class":168},[162,95536,95470],{"class":179},[162,95538,95539],{"class":168},">视频介绍\u003C\u002F",[162,95541,3538],{"class":54373},[162,95543,54380],{"class":168},[162,95545,95546,95548,95550,95552,95554,95556,95558,95560,95563,95566,95568],{"class":164,"line":13012},[162,95547,58304],{"class":168},[162,95549,3538],{"class":54373},[162,95551,64125],{"class":5082},[162,95553,173],{"class":168},[162,95555,67303],{"class":179},[162,95557,95532],{"class":5082},[162,95559,173],{"class":168},[162,95561,95562],{"class":179},"\"intro\"",[162,95564,95565],{"class":168},">课程简介\u003C\u002F",[162,95567,3538],{"class":54373},[162,95569,54380],{"class":168},[162,95571,95572,95574,95576,95578,95580,95582,95584,95586,95589,95592,95594],{"class":164,"line":13020},[162,95573,58304],{"class":168},[162,95575,3538],{"class":54373},[162,95577,64125],{"class":5082},[162,95579,173],{"class":168},[162,95581,67303],{"class":179},[162,95583,95532],{"class":5082},[162,95585,173],{"class":168},[162,95587,95588],{"class":179},"\"outline\"",[162,95590,95591],{"class":168},">评论列表\u003C\u002F",[162,95593,3538],{"class":54373},[162,95595,54380],{"class":168},[162,95597,95598,95600,95602],{"class":164,"line":13025},[162,95599,54848],{"class":168},[162,95601,54683],{"class":54373},[162,95603,54380],{"class":168},[162,95605,95606,95608,95610],{"class":164,"line":19695},[162,95607,55487],{"class":168},[162,95609,54683],{"class":54373},[162,95611,54380],{"class":168},[162,95613,95614,95616,95618,95620,95622,95625,95627,95629],{"class":164,"line":19701},[162,95615,55215],{"class":168},[162,95617,54885],{"class":54373},[162,95619,58309],{"class":5082},[162,95621,173],{"class":168},[162,95623,95624],{"class":179},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[162,95626,58384],{"class":168},[162,95628,54885],{"class":54373},[162,95630,54380],{"class":168},[162,95632,95633,95635,95637],{"class":164,"line":19724},[162,95634,55215],{"class":168},[162,95636,54885],{"class":54373},[162,95638,54380],{"class":168},[162,95640,95641],{"class":164,"line":19730},[162,95642,95643],{"class":361},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[162,95645,95646,95648,95650,95652,95654,95656,95658,95661],{"class":164,"line":19753},[162,95647,14317],{"class":172},[162,95649,95120],{"class":207},[162,95651,16659],{"class":172},[162,95653,57466],{"class":168},[162,95655,57469],{"class":5082},[162,95657,604],{"class":168},[162,95659,95660],{"class":179},"'video'",[162,95662,434],{"class":168},[162,95664,95665],{"class":164,"line":19767},[162,95666,95667],{"class":361},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[162,95669,95670,95673,95675,95677,95679,95682,95684],{"class":164,"line":19787},[162,95671,95672],{"class":168},"    video.ontimeupdate ",[162,95674,173],{"class":172},[162,95676,91420],{"class":168},[162,95678,94238],{"class":5082},[162,95680,95681],{"class":168},"(() ",[162,95683,87787],{"class":172},[162,95685,1722],{"class":168},[162,95687,95688],{"class":164,"line":19793},[162,95689,95690],{"class":361},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[162,95692,95693],{"class":164,"line":19804},[162,95694,95695],{"class":361},"      \u002F\u002F 控制台输出当前的时间\n",[162,95697,95698,95701],{"class":164,"line":19827},[162,95699,95700],{"class":361},"      \u002F\u002F console.log(video.currentTime)",[162,95702,95703],{"class":361},"  \u002F\u002F获得当前的视频时间\n",[162,95705,95706],{"class":164,"line":19849},[162,95707,95708],{"class":361},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[162,95710,95711,95713,95715,95717,95720],{"class":164,"line":19854},[162,95712,77748],{"class":168},[162,95714,74719],{"class":5082},[162,95716,604],{"class":168},[162,95718,95719],{"class":179},"'currentTime'",[162,95721,95722],{"class":168},", video.currentTime)\n",[162,95724,95725,95727,95729],{"class":164,"line":19860},[162,95726,57605],{"class":168},[162,95728,9516],{"class":207},[162,95730,434],{"class":168},[162,95732,95733],{"class":164,"line":19874},[162,95734,95735],{"class":361},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[162,95737,95738,95741,95744,95746,95749,95751],{"class":164,"line":19887},[162,95739,95740],{"class":168},"    video.",[162,95742,95743],{"class":5082},"onloadeddata",[162,95745,16659],{"class":172},[162,95747,95748],{"class":168}," () ",[162,95750,87787],{"class":172},[162,95752,1722],{"class":168},[162,95754,95755],{"class":164,"line":19892},[162,95756,63081],{"class":361},[162,95758,95759],{"class":164,"line":19906},[162,95760,95761],{"class":361},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[162,95763,95764,95767,95769,95772,95774,95776,95778,95780,95782],{"class":164,"line":19911},[162,95765,95766],{"class":168},"      video.currentTime ",[162,95768,173],{"class":172},[162,95770,95771],{"class":168}," localStorage.",[162,95773,74750],{"class":5082},[162,95775,604],{"class":168},[162,95777,95719],{"class":179},[162,95779,1823],{"class":168},[162,95781,74422],{"class":172},[162,95783,902],{"class":207},[162,95785,95786],{"class":164,"line":19917},[162,95787,5305],{"class":168},[162,95789,95790,95792,95794],{"class":164,"line":19922},[162,95791,55487],{"class":168},[162,95793,54885],{"class":54373},[162,95795,54380],{"class":168},[162,95797,95798,95800,95802],{"class":164,"line":19936},[162,95799,54857],{"class":168},[162,95801,54872],{"class":54373},[162,95803,54380],{"class":168},[162,95805,95806],{"class":164,"line":19941},[162,95807,301],{"emptyLinePlaceholder":300},[162,95809,95810,95812,95814],{"class":164,"line":19946},[162,95811,54857],{"class":168},[162,95813,53708],{"class":54373},[162,95815,54380],{"class":168},[3219,95817,95818],{},"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":158,"searchDepth":197,"depth":197,"links":95820},[95821,95826,95830,95831,95832,95837,95842,95843,95844,95845,95852,95857,95858,95868,95872,95873,95877],{"id":79756,"depth":197,"text":79757,"children":95822},[95823,95824,95825],{"id":79760,"depth":228,"text":79761},{"id":79785,"depth":228,"text":79786},{"id":79797,"depth":228,"text":79798},{"id":79809,"depth":197,"text":79810,"children":95827},[95828,95829],{"id":79813,"depth":228,"text":79814},{"id":79828,"depth":228,"text":79829},{"id":79880,"depth":197,"text":79881},{"id":79924,"depth":197,"text":79925},{"id":79941,"depth":197,"text":79942,"children":95833},[95834,95835,95836],{"id":79945,"depth":228,"text":79946},{"id":79958,"depth":228,"text":79959},{"id":80063,"depth":228,"text":80064},{"id":80352,"depth":197,"text":80353,"children":95838},[95839,95840,95841],{"id":80356,"depth":228,"text":80357},{"id":80799,"depth":228,"text":80800},{"id":81210,"depth":228,"text":81211},{"id":81273,"depth":197,"text":81274},{"id":81352,"depth":197,"text":81353},{"id":81445,"depth":197,"text":81446},{"id":83290,"depth":197,"text":83291,"children":95846},[95847,95848,95849,95850,95851],{"id":83294,"depth":228,"text":83295},{"id":83306,"depth":228,"text":83307},{"id":83525,"depth":228,"text":83526},{"id":83543,"depth":228,"text":83544},{"id":83603,"depth":228,"text":83604},{"id":87871,"depth":197,"text":87872,"children":95853},[95854,95855,95856],{"id":87875,"depth":228,"text":87876},{"id":87893,"depth":228,"text":87894},{"id":87919,"depth":228,"text":87920},{"id":87928,"depth":197,"text":87929},{"id":87950,"depth":197,"text":87951,"children":95859},[95860,95861,95862,95863,95864,95865,95866,95867],{"id":87954,"depth":228,"text":87955},{"id":88215,"depth":228,"text":88216},{"id":88401,"depth":228,"text":88402},{"id":88768,"depth":228,"text":88769},{"id":88884,"depth":228,"text":88885},{"id":88920,"depth":228,"text":88921},{"id":88967,"depth":228,"text":88968},{"id":89001,"depth":228,"text":89002},{"id":90364,"depth":197,"text":90365,"children":95869},[95870,95871],{"id":90368,"depth":228,"text":90369},{"id":90405,"depth":228,"text":90406},{"id":91760,"depth":197,"text":91761},{"id":92131,"depth":197,"text":92132,"children":95874},[95875,95876],{"id":92135,"depth":228,"text":92136},{"id":92169,"depth":228,"text":92170},{"id":92898,"depth":197,"text":92899,"children":95878},[95879,95880,95881,95882],{"id":92902,"depth":228,"text":92903},{"id":93860,"depth":228,"text":93861},{"id":94802,"depth":228,"text":94803},{"id":94876,"depth":228,"text":94877},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":79745,"description":3241},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":95889,"title":95890,"body":95891,"description":95902,"extension":3242,"meta":95903,"navigation":300,"path":95905,"seo":95906,"stem":95907,"__hash__":95908},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":95892,"toc":95900},[95893],[19,95894,95895,95896],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[3538,95897,95898],{"href":95898,"rel":95899},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[26956],{"title":158,"searchDepth":197,"depth":197,"links":95901},[],"三件套第三套学习",{"category":95904},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":95890,"description":95902},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":95910,"title":95911,"body":95912,"description":3241,"extension":3242,"meta":96017,"navigation":300,"path":96018,"seo":96019,"stem":96020,"__hash__":96021},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":95913,"toc":96012},[95914,95921,95924,95927,95930,95934,95943,95946,95949,95953,95962,95965,95969,95972,95992,95995,96009],[19,95915,95916],{},[3538,95917,95920],{"href":95918,"rel":95919},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[26956],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,95922,95911],{"id":95923},"_1安装",[19,95925,95926],{},"numpy是科学计算基础库,底层是C语言",[19,95928,95929],{},"三种方式：",[14,95931,95933],{"id":95932},"_11-通过pip安装","1.1 通过pip安装",[153,95935,95937],{"className":155,"code":95936,"language":157,"meta":158,"style":158},"pip install numpy\n",[71,95938,95939],{"__ignoreMap":158},[162,95940,95941],{"class":164,"line":165},[162,95942,95936],{"class":168},[19,95944,95945],{},"首选方式，自动处理依赖项",[19,95947,95948],{},"在提示系统命令符中使用cmd",[14,95950,95952],{"id":95951},"_12-通过anaconda安装","1.2 通过Anaconda安装",[153,95954,95956],{"className":155,"code":95955,"language":157,"meta":158,"style":158},"conda install numpy\n",[71,95957,95958],{"__ignoreMap":158},[162,95959,95960],{"class":164,"line":165},[162,95961,95955],{"class":168},[19,95963,95964],{},"自动解决环境依赖",[14,95966,95968],{"id":95967},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,95970,95971],{},"对于Debian\u002FUbuntu",[153,95973,95975],{"className":155,"code":95974,"language":157,"meta":158,"style":158},"sudo apt-get install python3-numpy\n",[71,95976,95977],{"__ignoreMap":158},[162,95978,95979,95982,95984,95987,95989],{"class":164,"line":165},[162,95980,95981],{"class":168},"sudo apt",[162,95983,353],{"class":172},[162,95985,95986],{"class":168},"get install python3",[162,95988,353],{"class":172},[162,95990,95991],{"class":168},"numpy\n",[19,95993,95994],{},"对于Fedora:",[153,95996,95998],{"className":155,"code":95997,"language":157,"meta":158,"style":158},"sudo dnf install python3-numpy\n",[71,95999,96000],{"__ignoreMap":158},[162,96001,96002,96005,96007],{"class":164,"line":165},[162,96003,96004],{"class":168},"sudo dnf install python3",[162,96006,353],{"class":172},[162,96008,95991],{"class":168},[3219,96010,96011],{},"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":158,"searchDepth":197,"depth":197,"links":96013},[96014,96015,96016],{"id":95932,"depth":197,"text":95933},{"id":95951,"depth":197,"text":95952},{"id":95967,"depth":197,"text":95968},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":95911,"description":3241},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":96023,"title":96024,"body":96025,"description":3241,"extension":3242,"meta":96138,"navigation":300,"path":96139,"seo":96140,"stem":96141,"__hash__":96142},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":96026,"toc":96136},[96027,96030,96033,96036,96039,96042,96045,96048,96051,96054,96130,96133],[10,96028,96024],{"id":96029},"_10算数函数",[19,96031,96032],{},"加减乘除运算跟python基础语法没区别",[19,96034,96035],{},"除了python那种方法外还可以使用函数",[19,96037,96038],{},"加：np.add(a,b)",[19,96040,96041],{},"减：np.subtract(a,b)",[19,96043,96044],{},"乘：np.multiply(a,b)",[19,96046,96047],{},"除：np.divide(a,b) == a\u002Fb",[19,96049,96050],{},"取余：np.mod(a,b) == a%b",[19,96052,96053],{},"必须会的用法：",[153,96055,96057],{"className":155,"code":96056,"language":157,"meta":158,"style":158},"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",[71,96058,96059,96081,96102,96112,96125],{"__ignoreMap":158},[162,96060,96061,96063,96065,96068,96070,96073,96075,96077,96079],{"class":164,"line":165},[162,96062,3538],{"class":168},[162,96064,173],{"class":172},[162,96066,96067],{"class":168},"np.arange(",[162,96069,3711],{"class":207},[162,96071,96072],{"class":168},").reshape(",[162,96074,218],{"class":207},[162,96076,3670],{"class":168},[162,96078,218],{"class":207},[162,96080,434],{"class":168},[162,96082,96083,96085,96087,96090,96092,96094,96096,96098,96100],{"class":164,"line":197},[162,96084,3561],{"class":168},[162,96086,173],{"class":172},[162,96088,96089],{"class":168},"np.array([",[162,96091,1006],{"class":207},[162,96093,3670],{"class":168},[162,96095,1006],{"class":207},[162,96097,3670],{"class":168},[162,96099,1006],{"class":207},[162,96101,315],{"class":168},[162,96103,96104,96107,96109],{"class":164,"line":228},[162,96105,96106],{"class":168},"result",[162,96108,173],{"class":172},[162,96110,96111],{"class":168},"np.empty_like(a)\n",[162,96113,96114,96117,96120,96122],{"class":164,"line":252},[162,96115,96116],{"class":168},"np.add(a,b,",[162,96118,96119],{"class":671},"out",[162,96121,173],{"class":172},[162,96123,96124],{"class":168},"result)\n",[162,96126,96127],{"class":164,"line":328},[162,96128,96129],{"class":168},"result\n",[19,96131,96132],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[3219,96134,96135],{},"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":158,"searchDepth":197,"depth":197,"links":96137},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":96024,"description":3241},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":96144,"title":96145,"body":96146,"description":3241,"extension":3242,"meta":96908,"navigation":300,"path":96909,"seo":96910,"stem":96911,"__hash__":96912},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":96147,"toc":96895},[96148,96151,96154,96157,96161,96200,96204,96248,96308,96312,96315,96354,96357,96402,96406,96442,96446,96515,96519,96583,96587,96590,96593,96596,96599,96635,96639,96679,96683,96755,96758,96762,96825,96829,96892],[10,96149,96145],{"id":96150},"_11统计函数",[19,96152,96153],{},"sum max min mean",[19,96155,96156],{},"这些有axis参数，可以指定方向",[14,96158,96160],{"id":96159},"_111-sum求和函数","11.1 sum()求和函数",[153,96162,96164],{"className":155,"code":96163,"language":157,"meta":158,"style":158},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[71,96165,96166,96171,96192],{"__ignoreMap":158},[162,96167,96168],{"class":164,"line":165},[162,96169,96170],{"class":361},"#创建一维数组\n",[162,96172,96173,96175,96177,96180,96182,96184,96186,96188,96190],{"class":164,"line":197},[162,96174,3538],{"class":168},[162,96176,173],{"class":172},[162,96178,96179],{"class":168},"np.random.randint(",[162,96181,208],{"class":207},[162,96183,3670],{"class":168},[162,96185,3608],{"class":207},[162,96187,3670],{"class":168},[162,96189,1011],{"class":207},[162,96191,434],{"class":168},[162,96193,96194,96197],{"class":164,"line":228},[162,96195,96196],{"class":168},"np.sum(a)",[162,96198,96199],{"class":361},"#求和\n",[14,96201,96203],{"id":96202},"_112-max求最大值函数","11.2 max()求最大值函数",[153,96205,96207],{"className":155,"code":96206,"language":157,"meta":158,"style":158},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[71,96208,96209,96213,96233,96238,96243],{"__ignoreMap":158},[162,96210,96211],{"class":164,"line":165},[162,96212,96170],{"class":361},[162,96214,96215,96217,96219,96221,96223,96225,96227,96229,96231],{"class":164,"line":197},[162,96216,3538],{"class":168},[162,96218,173],{"class":172},[162,96220,96179],{"class":168},[162,96222,208],{"class":207},[162,96224,3670],{"class":168},[162,96226,3608],{"class":207},[162,96228,3670],{"class":168},[162,96230,1011],{"class":207},[162,96232,434],{"class":168},[162,96234,96235],{"class":164,"line":228},[162,96236,96237],{"class":168},"np.max(a)\n",[162,96239,96240],{"class":164,"line":252},[162,96241,96242],{"class":361},"#最大索引(求最大元素的索引)arg\n",[162,96244,96245],{"class":164,"line":328},[162,96246,96247],{"class":168},"np.argmax(a)\n",[153,96249,96251],{"className":155,"code":96250,"language":157,"meta":158,"style":158},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[71,96252,96253,96274,96294,96298],{"__ignoreMap":158},[162,96254,96255,96257,96259,96262,96264,96266,96268,96270,96272],{"class":164,"line":165},[162,96256,1616],{"class":168},[162,96258,173],{"class":172},[162,96260,96261],{"class":168}," np.array([",[162,96263,208],{"class":207},[162,96265,183],{"class":168},[162,96267,637],{"class":207},[162,96269,183],{"class":168},[162,96271,218],{"class":207},[162,96273,315],{"class":168},[162,96275,96276,96278,96280,96282,96284,96286,96288,96290,96292],{"class":164,"line":197},[162,96277,1637],{"class":168},[162,96279,173],{"class":172},[162,96281,96261],{"class":168},[162,96283,218],{"class":207},[162,96285,183],{"class":168},[162,96287,213],{"class":207},[162,96289,183],{"class":168},[162,96291,223],{"class":207},[162,96293,315],{"class":168},[162,96295,96296],{"class":164,"line":228},[162,96297,301],{"emptyLinePlaceholder":300},[162,96299,96300,96302,96305],{"class":164,"line":252},[162,96301,306],{"class":207},[162,96303,96304],{"class":168},"(np.maximum(a, b))   ",[162,96306,96307],{"class":361},"# [3 5 4]，每个位置上取较大值\n",[14,96309,96311],{"id":96310},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,96313,96314],{},"①一维数组：",[153,96316,96318],{"className":155,"code":96317,"language":157,"meta":158,"style":158},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[71,96319,96320,96324,96344,96349],{"__ignoreMap":158},[162,96321,96322],{"class":164,"line":165},[162,96323,96170],{"class":361},[162,96325,96326,96328,96330,96332,96334,96336,96338,96340,96342],{"class":164,"line":197},[162,96327,3538],{"class":168},[162,96329,173],{"class":172},[162,96331,96179],{"class":168},[162,96333,208],{"class":207},[162,96335,3670],{"class":168},[162,96337,3608],{"class":207},[162,96339,3670],{"class":168},[162,96341,1011],{"class":207},[162,96343,434],{"class":168},[162,96345,96346],{"class":164,"line":228},[162,96347,96348],{"class":361},"#求平均值\n",[162,96350,96351],{"class":164,"line":252},[162,96352,96353],{"class":168},"np.mean(a)\n",[19,96355,96356],{},"②二维数组",[153,96358,96360],{"className":155,"code":96359,"language":157,"meta":158,"style":158},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[71,96361,96362,96367,96392,96397],{"__ignoreMap":158},[162,96363,96364],{"class":164,"line":165},[162,96365,96366],{"class":361},"#二维数组\n",[162,96368,96369,96372,96374,96376,96378,96380,96382,96384,96386,96388,96390],{"class":164,"line":197},[162,96370,96371],{"class":168},"aa",[162,96373,173],{"class":172},[162,96375,96067],{"class":168},[162,96377,208],{"class":207},[162,96379,3670],{"class":168},[162,96381,3813],{"class":207},[162,96383,96072],{"class":168},[162,96385,218],{"class":207},[162,96387,3670],{"class":168},[162,96389,223],{"class":207},[162,96391,434],{"class":168},[162,96393,96394],{"class":164,"line":228},[162,96395,96396],{"class":361},"#对数组中的所有数求平均\n",[162,96398,96399],{"class":164,"line":252},[162,96400,96401],{"class":168},"np.mean(aa)\n",[14,96403,96405],{"id":96404},"_114-median求中位数函数","11.4 median()求中位数函数",[153,96407,96409],{"className":155,"code":96408,"language":157,"meta":158,"style":158},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[71,96410,96411,96416,96432,96437],{"__ignoreMap":158},[162,96412,96413],{"class":164,"line":165},[162,96414,96415],{"class":361},"#求中位数\n",[162,96417,96418,96420,96422,96424,96426,96428,96430],{"class":164,"line":197},[162,96419,3561],{"class":168},[162,96421,173],{"class":172},[162,96423,96067],{"class":168},[162,96425,208],{"class":207},[162,96427,3670],{"class":168},[162,96429,1006],{"class":207},[162,96431,434],{"class":168},[162,96433,96434],{"class":164,"line":228},[162,96435,96436],{"class":168},"np.median(b)\n",[162,96438,96439],{"class":164,"line":252},[162,96440,96441],{"class":361},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,96443,96445],{"id":96444},"_115-power求幂运算函数","11.5 power()求幂运算函数",[153,96447,96449],{"className":155,"code":96448,"language":157,"meta":158,"style":158},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[71,96450,96451,96467,96472,96477,96486,96491,96500],{"__ignoreMap":158},[162,96452,96453,96455,96457,96459,96461,96463,96465],{"class":164,"line":165},[162,96454,3561],{"class":168},[162,96456,173],{"class":172},[162,96458,96067],{"class":168},[162,96460,208],{"class":207},[162,96462,3670],{"class":168},[162,96464,1006],{"class":207},[162,96466,434],{"class":168},[162,96468,96469],{"class":164,"line":197},[162,96470,96471],{"class":361},"#幂运算\n",[162,96473,96474],{"class":164,"line":228},[162,96475,96476],{"class":361},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[162,96478,96479,96482,96484],{"class":164,"line":252},[162,96480,96481],{"class":168},"np.power(b,",[162,96483,213],{"class":207},[162,96485,434],{"class":168},[162,96487,96488],{"class":164,"line":328},[162,96489,96490],{"class":361},"#或者以下代码，将数据存储起来\n",[162,96492,96493,96495,96497],{"class":164,"line":466},[162,96494,4126],{"class":168},[162,96496,173],{"class":172},[162,96498,96499],{"class":168},"np.empty_like(b)\n",[162,96501,96502,96504,96506,96508,96510,96512],{"class":164,"line":471},[162,96503,96481],{"class":168},[162,96505,213],{"class":207},[162,96507,3670],{"class":168},[162,96509,96119],{"class":671},[162,96511,173],{"class":172},[162,96513,96514],{"class":168},"y)\n",[14,96516,96518],{"id":96517},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[153,96520,96522],{"className":155,"code":96521,"language":157,"meta":158,"style":158},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[71,96523,96524,96540,96545,96550,96554,96572],{"__ignoreMap":158},[162,96525,96526,96528,96530,96532,96534,96536,96538],{"class":164,"line":165},[162,96527,3561],{"class":168},[162,96529,173],{"class":172},[162,96531,96067],{"class":168},[162,96533,208],{"class":207},[162,96535,3670],{"class":168},[162,96537,1006],{"class":207},[162,96539,434],{"class":168},[162,96541,96542],{"class":164,"line":197},[162,96543,96544],{"class":361},"#开方\n",[162,96546,96547],{"class":164,"line":228},[162,96548,96549],{"class":168},"np.sqrt(b)\n",[162,96551,96552],{"class":164,"line":252},[162,96553,96490],{"class":361},[162,96555,96556,96558,96560,96563,96566,96568,96570],{"class":164,"line":328},[162,96557,4126],{"class":168},[162,96559,173],{"class":172},[162,96561,96562],{"class":168},"np.empty_like(b,",[162,96564,96565],{"class":671},"dtype",[162,96567,173],{"class":172},[162,96569,3354],{"class":207},[162,96571,434],{"class":168},[162,96573,96574,96577,96579,96581],{"class":164,"line":466},[162,96575,96576],{"class":168},"np.sqrt(b,",[162,96578,96119],{"class":671},[162,96580,173],{"class":172},[162,96582,96514],{"class":168},[14,96584,96586],{"id":96585},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,96588,96589],{},"对数组中的元素累计求和，可指定轴",[19,96591,96592],{},"#累计求和的意思是：",[19,96594,96595],{},"a = np.array([1, 2, 3, 4])",[19,96597,96598],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[153,96600,96602],{"className":155,"code":96601,"language":157,"meta":158,"style":158},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[71,96603,96604,96620,96625,96630],{"__ignoreMap":158},[162,96605,96606,96608,96610,96612,96614,96616,96618],{"class":164,"line":165},[162,96607,3561],{"class":168},[162,96609,173],{"class":172},[162,96611,96067],{"class":168},[162,96613,208],{"class":207},[162,96615,3670],{"class":168},[162,96617,1006],{"class":207},[162,96619,434],{"class":168},[162,96621,96622],{"class":164,"line":197},[162,96623,96624],{"class":168},"np.cumsum(b)\n",[162,96626,96627],{"class":164,"line":228},[162,96628,96629],{"class":361},"#结果：\n",[162,96631,96632],{"class":164,"line":252},[162,96633,96634],{"class":361},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,96636,96638],{"id":96637},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[153,96640,96642],{"className":155,"code":96641,"language":157,"meta":158,"style":158},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[71,96643,96644,96660,96665,96670,96674],{"__ignoreMap":158},[162,96645,96646,96648,96650,96652,96654,96656,96658],{"class":164,"line":165},[162,96647,3561],{"class":168},[162,96649,173],{"class":172},[162,96651,96067],{"class":168},[162,96653,208],{"class":207},[162,96655,3670],{"class":168},[162,96657,1006],{"class":207},[162,96659,434],{"class":168},[162,96661,96662],{"class":164,"line":197},[162,96663,96664],{"class":361},"#对数组中的元素累计求积，可指定轴\n",[162,96666,96667],{"class":164,"line":228},[162,96668,96669],{"class":168},"np.cumprod(b)\n",[162,96671,96672],{"class":164,"line":252},[162,96673,96629],{"class":361},[162,96675,96676],{"class":164,"line":328},[162,96677,96678],{"class":361},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,96680,96682],{"id":96681},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[153,96684,96686],{"className":155,"code":96685,"language":157,"meta":158,"style":158},"#删除数组中的重复数据，并对数据进行排序\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",[71,96687,96688,96693,96741,96746,96750],{"__ignoreMap":158},[162,96689,96690],{"class":164,"line":165},[162,96691,96692],{"class":361},"#删除数组中的重复数据，并对数据进行排序\n",[162,96694,96695,96697,96699,96701,96703,96705,96707,96709,96711,96713,96715,96717,96719,96721,96723,96725,96727,96729,96731,96733,96735,96737,96739],{"class":164,"line":197},[162,96696,3538],{"class":168},[162,96698,173],{"class":172},[162,96700,96089],{"class":168},[162,96702,208],{"class":207},[162,96704,3670],{"class":168},[162,96706,213],{"class":207},[162,96708,3670],{"class":168},[162,96710,218],{"class":207},[162,96712,3670],{"class":168},[162,96714,3788],{"class":207},[162,96716,3670],{"class":168},[162,96718,218],{"class":207},[162,96720,3670],{"class":168},[162,96722,1006],{"class":207},[162,96724,3670],{"class":168},[162,96726,3498],{"class":207},[162,96728,3670],{"class":168},[162,96730,312],{"class":207},[162,96732,3670],{"class":168},[162,96734,4057],{"class":207},[162,96736,3670],{"class":168},[162,96738,223],{"class":207},[162,96740,315],{"class":168},[162,96742,96743],{"class":164,"line":228},[162,96744,96745],{"class":168},"np.unique(a)\n",[162,96747,96748],{"class":164,"line":252},[162,96749,96629],{"class":361},[162,96751,96752],{"class":164,"line":328},[162,96753,96754],{"class":361},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,96756,96757],{},"升序形式排序",[14,96759,96761],{"id":96760},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[153,96763,96765],{"className":155,"code":96764,"language":157,"meta":158,"style":158},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[71,96766,96767,96815,96820],{"__ignoreMap":158},[162,96768,96769,96771,96773,96775,96777,96779,96781,96783,96785,96787,96789,96791,96793,96795,96797,96799,96801,96803,96805,96807,96809,96811,96813],{"class":164,"line":165},[162,96770,3538],{"class":168},[162,96772,173],{"class":172},[162,96774,96089],{"class":168},[162,96776,208],{"class":207},[162,96778,3670],{"class":168},[162,96780,213],{"class":207},[162,96782,3670],{"class":168},[162,96784,218],{"class":207},[162,96786,3670],{"class":168},[162,96788,3788],{"class":207},[162,96790,3670],{"class":168},[162,96792,218],{"class":207},[162,96794,3670],{"class":168},[162,96796,1006],{"class":207},[162,96798,3670],{"class":168},[162,96800,3498],{"class":207},[162,96802,3670],{"class":168},[162,96804,312],{"class":207},[162,96806,3670],{"class":168},[162,96808,4057],{"class":207},[162,96810,3670],{"class":168},[162,96812,223],{"class":207},[162,96814,315],{"class":168},[162,96816,96817],{"class":164,"line":197},[162,96818,96819],{"class":361},"#返回数组中非零元素的索引\n",[162,96821,96822],{"class":164,"line":228},[162,96823,96824],{"class":168},"np.nonzero(a)\n",[14,96826,96828],{"id":96827},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[153,96830,96832],{"className":155,"code":96831,"language":157,"meta":158,"style":158},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[71,96833,96834,96882,96887],{"__ignoreMap":158},[162,96835,96836,96838,96840,96842,96844,96846,96848,96850,96852,96854,96856,96858,96860,96862,96864,96866,96868,96870,96872,96874,96876,96878,96880],{"class":164,"line":165},[162,96837,3538],{"class":168},[162,96839,173],{"class":172},[162,96841,96089],{"class":168},[162,96843,208],{"class":207},[162,96845,3670],{"class":168},[162,96847,213],{"class":207},[162,96849,3670],{"class":168},[162,96851,218],{"class":207},[162,96853,3670],{"class":168},[162,96855,3788],{"class":207},[162,96857,3670],{"class":168},[162,96859,218],{"class":207},[162,96861,3670],{"class":168},[162,96863,1006],{"class":207},[162,96865,3670],{"class":168},[162,96867,3498],{"class":207},[162,96869,3670],{"class":168},[162,96871,312],{"class":207},[162,96873,3670],{"class":168},[162,96875,4057],{"class":207},[162,96877,3670],{"class":168},[162,96879,223],{"class":207},[162,96881,315],{"class":168},[162,96883,96884],{"class":164,"line":197},[162,96885,96886],{"class":361},"#计算一组数中最大值与最小值的差，可指定轴\n",[162,96888,96889],{"class":164,"line":228},[162,96890,96891],{"class":168},"np.ptp(a)\n",[3219,96893,96894],{},"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":158,"searchDepth":197,"depth":197,"links":96896},[96897,96898,96899,96900,96901,96902,96903,96904,96905,96906,96907],{"id":96159,"depth":197,"text":96160},{"id":96202,"depth":197,"text":96203},{"id":96310,"depth":197,"text":96311},{"id":96404,"depth":197,"text":96405},{"id":96444,"depth":197,"text":96445},{"id":96517,"depth":197,"text":96518},{"id":96585,"depth":197,"text":96586},{"id":96637,"depth":197,"text":96638},{"id":96681,"depth":197,"text":96682},{"id":96760,"depth":197,"text":96761},{"id":96827,"depth":197,"text":96828},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":96145,"description":3241},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":96914,"title":96915,"body":96916,"description":3241,"extension":3242,"meta":97571,"navigation":300,"path":97572,"seo":97573,"stem":97574,"__hash__":97575},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":96917,"toc":97559},[96918,96921,96925,96928,97144,97148,97151,97360,97364,97430,97435,97439,97442,97445,97483,97487,97490,97495,97499,97502,97505,97510,97514,97517,97521,97524,97527,97532,97536,97539,97542,97547,97551,97556],[10,96919,96915],{"id":96920},"_12其他常用函数",[14,96922,96924],{"id":96923},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,96926,96927],{},"将数组的数据按照行列复制扩展",[153,96929,96931],{"className":155,"code":96930,"language":157,"meta":158,"style":158},"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",[71,96932,96933,96949,96958,96962,96967,96972,96985,96989,96994,96999,97004,97008,97013,97037,97049,97053,97057,97062,97067,97072,97077,97081,97094,97098,97102,97107,97112,97117,97122,97127,97131,97135,97140],{"__ignoreMap":158},[162,96934,96935,96937,96939,96941,96943,96945,96947],{"class":164,"line":165},[162,96936,3538],{"class":168},[162,96938,173],{"class":172},[162,96940,96067],{"class":168},[162,96942,208],{"class":207},[162,96944,3670],{"class":168},[162,96946,637],{"class":207},[162,96948,434],{"class":168},[162,96950,96951,96954,96956],{"class":164,"line":197},[162,96952,96953],{"class":168},"np.tile(a,",[162,96955,213],{"class":207},[162,96957,434],{"class":168},[162,96959,96960],{"class":164,"line":228},[162,96961,96629],{"class":361},[162,96963,96964],{"class":164,"line":252},[162,96965,96966],{"class":361},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[162,96968,96969],{"class":164,"line":328},[162,96970,96971],{"class":361},"#行复制两次，列复制三次\n",[162,96973,96974,96977,96979,96981,96983],{"class":164,"line":466},[162,96975,96976],{"class":168},"np.tile(a,(",[162,96978,213],{"class":207},[162,96980,3670],{"class":168},[162,96982,218],{"class":207},[162,96984,586],{"class":168},[162,96986,96987],{"class":164,"line":471},[162,96988,96629],{"class":361},[162,96990,96991],{"class":164,"line":687},[162,96992,96993],{"class":179},"'''\n",[162,96995,96996],{"class":164,"line":692},[162,96997,96998],{"class":179},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[162,97000,97001],{"class":164,"line":698},[162,97002,97003],{"class":179},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[162,97005,97006],{"class":164,"line":2955},[162,97007,96993],{"class":179},[162,97009,97010],{"class":164,"line":2960},[162,97011,97012],{"class":361},"#创建二维数组\n",[162,97014,97015,97017,97019,97021,97023,97025,97027,97029,97031,97033,97035],{"class":164,"line":2971},[162,97016,96371],{"class":168},[162,97018,173],{"class":172},[162,97020,96067],{"class":168},[162,97022,208],{"class":207},[162,97024,3670],{"class":168},[162,97026,3813],{"class":207},[162,97028,96072],{"class":168},[162,97030,223],{"class":207},[162,97032,3670],{"class":168},[162,97034,218],{"class":207},[162,97036,434],{"class":168},[162,97038,97039,97042,97044,97046],{"class":164,"line":2984},[162,97040,97041],{"class":168},"np.tile(aa,",[162,97043,213],{"class":207},[162,97045,3720],{"class":168},[162,97047,97048],{"class":361},"#一个数的时候就是行\n",[162,97050,97051],{"class":164,"line":2989},[162,97052,96629],{"class":361},[162,97054,97055],{"class":164,"line":3011},[162,97056,96993],{"class":179},[162,97058,97059],{"class":164,"line":3022},[162,97060,97061],{"class":179},"array([[ 1,  2,  3,  1,  2,  3],\n",[162,97063,97064],{"class":164,"line":3027},[162,97065,97066],{"class":179},"       [ 4,  5,  6,  4,  5,  6],\n",[162,97068,97069],{"class":164,"line":3046},[162,97070,97071],{"class":179},"       [ 7,  8,  9,  7,  8,  9],\n",[162,97073,97074],{"class":164,"line":3052},[162,97075,97076],{"class":179},"       [10, 11, 12, 10, 11, 12]])\n",[162,97078,97079],{"class":164,"line":3057},[162,97080,96993],{"class":179},[162,97082,97083,97086,97088,97090,97092],{"class":164,"line":3072},[162,97084,97085],{"class":168},"np.tile(aa,(",[162,97087,213],{"class":207},[162,97089,3670],{"class":168},[162,97091,218],{"class":207},[162,97093,586],{"class":168},[162,97095,97096],{"class":164,"line":3077},[162,97097,96629],{"class":361},[162,97099,97100],{"class":164,"line":3100},[162,97101,96993],{"class":179},[162,97103,97104],{"class":164,"line":3140},[162,97105,97106],{"class":179},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[162,97108,97109],{"class":164,"line":4878},[162,97110,97111],{"class":179},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[162,97113,97114],{"class":164,"line":4883},[162,97115,97116],{"class":179},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[162,97118,97119],{"class":164,"line":4897},[162,97120,97121],{"class":179},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[162,97123,97124],{"class":164,"line":4902},[162,97125,97126],{"class":179},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[162,97128,97129],{"class":164,"line":5694},[162,97130,97111],{"class":179},[162,97132,97133],{"class":164,"line":5708},[162,97134,97116],{"class":179},[162,97136,97137],{"class":164,"line":5716},[162,97138,97139],{"class":179},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[162,97141,97142],{"class":164,"line":5721},[162,97143,96993],{"class":179},[14,97145,97147],{"id":97146},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,97149,97150],{},"repeat()将数组中的每个元素重复若干次",[153,97152,97154],{"className":155,"code":97153,"language":157,"meta":158,"style":158},"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",[71,97155,97156,97172,97181,97185,97190,97214,97219,97228,97232,97237,97241,97246,97262,97266,97270,97275,97280,97285,97289,97294,97298,97303,97308,97312,97328,97332,97336,97341,97346,97351,97356],{"__ignoreMap":158},[162,97157,97158,97160,97162,97164,97166,97168,97170],{"class":164,"line":165},[162,97159,3538],{"class":168},[162,97161,173],{"class":172},[162,97163,96067],{"class":168},[162,97165,208],{"class":207},[162,97167,3670],{"class":168},[162,97169,637],{"class":207},[162,97171,434],{"class":168},[162,97173,97174,97177,97179],{"class":164,"line":197},[162,97175,97176],{"class":168},"np.repeat(a,",[162,97178,218],{"class":207},[162,97180,434],{"class":168},[162,97182,97183],{"class":164,"line":228},[162,97184,96629],{"class":361},[162,97186,97187],{"class":164,"line":252},[162,97188,97189],{"class":361},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[162,97191,97192,97194,97196,97198,97200,97202,97204,97206,97208,97210,97212],{"class":164,"line":328},[162,97193,96371],{"class":168},[162,97195,173],{"class":172},[162,97197,96067],{"class":168},[162,97199,208],{"class":207},[162,97201,3670],{"class":168},[162,97203,3813],{"class":207},[162,97205,96072],{"class":168},[162,97207,223],{"class":207},[162,97209,3670],{"class":168},[162,97211,218],{"class":207},[162,97213,434],{"class":168},[162,97215,97216],{"class":164,"line":466},[162,97217,97218],{"class":361},"#这个重复之后二维变成一维\n",[162,97220,97221,97224,97226],{"class":164,"line":471},[162,97222,97223],{"class":168},"np.repeat(aa,",[162,97225,213],{"class":207},[162,97227,434],{"class":168},[162,97229,97230],{"class":164,"line":687},[162,97231,96993],{"class":179},[162,97233,97234],{"class":164,"line":692},[162,97235,97236],{"class":179},"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",[162,97238,97239],{"class":164,"line":698},[162,97240,96993],{"class":179},[162,97242,97243],{"class":164,"line":2955},[162,97244,97245],{"class":361},"#指定axis\n",[162,97247,97248,97250,97252,97254,97256,97258,97260],{"class":164,"line":2960},[162,97249,97223],{"class":168},[162,97251,213],{"class":207},[162,97253,3670],{"class":168},[162,97255,50587],{"class":671},[162,97257,173],{"class":172},[162,97259,312],{"class":207},[162,97261,434],{"class":168},[162,97263,97264],{"class":164,"line":2971},[162,97265,96629],{"class":361},[162,97267,97268],{"class":164,"line":2984},[162,97269,96993],{"class":179},[162,97271,97272],{"class":164,"line":2989},[162,97273,97274],{"class":179},"array([[ 1,  2,  3],\n",[162,97276,97277],{"class":164,"line":3011},[162,97278,97279],{"class":179},"       [ 1,  2,  3],\n",[162,97281,97282],{"class":164,"line":3022},[162,97283,97284],{"class":179},"       [ 4,  5,  6],\n",[162,97286,97287],{"class":164,"line":3027},[162,97288,97284],{"class":179},[162,97290,97291],{"class":164,"line":3046},[162,97292,97293],{"class":179},"       [ 7,  8,  9],\n",[162,97295,97296],{"class":164,"line":3052},[162,97297,97293],{"class":179},[162,97299,97300],{"class":164,"line":3057},[162,97301,97302],{"class":179},"       [10, 11, 12],\n",[162,97304,97305],{"class":164,"line":3072},[162,97306,97307],{"class":179},"       [10, 11, 12]])\n",[162,97309,97310],{"class":164,"line":3077},[162,97311,96993],{"class":179},[162,97313,97314,97316,97318,97320,97322,97324,97326],{"class":164,"line":3100},[162,97315,97223],{"class":168},[162,97317,213],{"class":207},[162,97319,3670],{"class":168},[162,97321,50587],{"class":671},[162,97323,173],{"class":172},[162,97325,208],{"class":207},[162,97327,434],{"class":168},[162,97329,97330],{"class":164,"line":3140},[162,97331,96629],{"class":361},[162,97333,97334],{"class":164,"line":4878},[162,97335,96993],{"class":179},[162,97337,97338],{"class":164,"line":4883},[162,97339,97340],{"class":179},"array([[ 1,  1,  2,  2,  3,  3],\n",[162,97342,97343],{"class":164,"line":4897},[162,97344,97345],{"class":179},"       [ 4,  4,  5,  5,  6,  6],\n",[162,97347,97348],{"class":164,"line":4902},[162,97349,97350],{"class":179},"       [ 7,  7,  8,  8,  9,  9],\n",[162,97352,97353],{"class":164,"line":5694},[162,97354,97355],{"class":179},"       [10, 10, 11, 11, 12, 12]])\n",[162,97357,97358],{"class":164,"line":5708},[162,97359,96993],{"class":179},[14,97361,97363],{"id":97362},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[153,97365,97367],{"className":155,"code":97366,"language":157,"meta":158,"style":158},"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",[71,97368,97369,97385,97390,97402,97406,97411,97421,97425],{"__ignoreMap":158},[162,97370,97371,97373,97375,97377,97379,97381,97383],{"class":164,"line":165},[162,97372,3538],{"class":168},[162,97374,173],{"class":172},[162,97376,96067],{"class":168},[162,97378,208],{"class":207},[162,97380,3670],{"class":168},[162,97382,637],{"class":207},[162,97384,434],{"class":168},[162,97386,97387],{"class":164,"line":197},[162,97388,97389],{"class":361},"#array([，2，3，4])\n",[162,97391,97392,97395,97397,97399],{"class":164,"line":228},[162,97393,97394],{"class":168},"np.roll(a,",[162,97396,213],{"class":207},[162,97398,3720],{"class":168},[162,97400,97401],{"class":361},"#传正数向后调多少位，传负数向前调多少位\n",[162,97403,97404],{"class":164,"line":252},[162,97405,96629],{"class":361},[162,97407,97408],{"class":164,"line":328},[162,97409,97410],{"class":361},"#array([3, 4, 1, 2])\n",[162,97412,97413,97415,97417,97419],{"class":164,"line":466},[162,97414,97394],{"class":168},[162,97416,353],{"class":172},[162,97418,208],{"class":207},[162,97420,434],{"class":168},[162,97422,97423],{"class":164,"line":471},[162,97424,96629],{"class":361},[162,97426,97427],{"class":164,"line":687},[162,97428,97429],{"class":361},"#array([2, 3, 4, 1])\n",[19,97431,97432],{},[4602,97433],{"alt":158,"src":97434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,97436,97438],{"id":97437},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,97440,97441],{},"resize()重新调整数组的大小",[19,97443,97444],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[153,97446,97448],{"className":155,"code":97447,"language":157,"meta":158,"style":158},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[71,97449,97450,97455,97468],{"__ignoreMap":158},[162,97451,97452],{"class":164,"line":165},[162,97453,97454],{"class":361},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[162,97456,97457,97460,97462,97464,97466],{"class":164,"line":197},[162,97458,97459],{"class":168},"np.resize(aa,(",[162,97461,213],{"class":207},[162,97463,3670],{"class":168},[162,97465,1314],{"class":207},[162,97467,586],{"class":168},[162,97469,97470,97472,97474,97476,97478,97480],{"class":164,"line":228},[162,97471,97459],{"class":168},[162,97473,213],{"class":207},[162,97475,3670],{"class":168},[162,97477,3711],{"class":207},[162,97479,85836],{"class":168},[162,97481,97482],{"class":361},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,97484,97486],{"id":97485},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,97488,97489],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,97491,97492],{},[4602,97493],{"alt":158,"src":97494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,97496,97498],{"id":97497},"_126-保存加载文件","12.6 保存加载文件",[19,97500,97501],{},"savetxt():将数据保存到txt文件中",[19,97503,97504],{},"loadtxt():从文件加载数据",[19,97506,97507],{},[4602,97508],{"alt":158,"src":97509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,97511,97513],{"id":97512},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,97515,97516],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,97518,97520],{"id":97519},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,97522,97523],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,97525,97526],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,97528,97529],{},[4602,97530],{"alt":158,"src":97531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,97533,97535],{"id":97534},"_129-where语句","12.9 where语句",[19,97537,97538],{},"np.where(条件,x,y)",[19,97540,97541],{},"如果条件为True,对应值为x,否则对应值为y",[19,97543,97544],{},[4602,97545],{"alt":158,"src":97546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,97548,97550],{"id":97549},"_1210-dot矩阵","12.10 dot()矩阵",[19,97552,97553],{},[4602,97554],{"alt":158,"src":97555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[3219,97557,97558],{},"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":158,"searchDepth":197,"depth":197,"links":97560},[97561,97562,97563,97564,97565,97566,97567,97568,97569,97570],{"id":96923,"depth":197,"text":96924},{"id":97146,"depth":197,"text":97147},{"id":97362,"depth":197,"text":97363},{"id":97437,"depth":197,"text":97438},{"id":97485,"depth":197,"text":97486},{"id":97497,"depth":197,"text":97498},{"id":97512,"depth":197,"text":97513},{"id":97519,"depth":197,"text":97520},{"id":97534,"depth":197,"text":97535},{"id":97549,"depth":197,"text":97550},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":96915,"description":3241},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":97577,"title":97578,"body":97579,"description":3241,"extension":3242,"meta":97932,"navigation":300,"path":97933,"seo":97934,"stem":97935,"__hash__":97936},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":97580,"toc":97930},[97581,97584,97587,97590,97593,97596,97661,97663,97927],[10,97582,97578],{"id":97583},"_13数组排序",[19,97585,97586],{},"排序主要用到的方法是np.sort和np.argsort",[19,97588,97589],{},"其中np.sort()对数组直接排序",[19,97591,97592],{},"而np.argsort()是返回排序后的原始索引",[19,97594,97595],{},"①一维数组",[153,97597,97599],{"className":155,"code":97598,"language":157,"meta":158,"style":158},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[71,97600,97601,97605,97645,97653],{"__ignoreMap":158},[162,97602,97603],{"class":164,"line":165},[162,97604,96170],{"class":361},[162,97606,97607,97609,97611,97613,97615,97617,97619,97621,97623,97625,97627,97629,97631,97633,97635,97637,97639,97641,97643],{"class":164,"line":197},[162,97608,3538],{"class":168},[162,97610,173],{"class":172},[162,97612,96089],{"class":168},[162,97614,218],{"class":207},[162,97616,3670],{"class":168},[162,97618,3788],{"class":207},[162,97620,3670],{"class":168},[162,97622,3687],{"class":207},[162,97624,3670],{"class":168},[162,97626,4057],{"class":207},[162,97628,3670],{"class":168},[162,97630,3577],{"class":207},[162,97632,3670],{"class":168},[162,97634,4171],{"class":207},[162,97636,3670],{"class":168},[162,97638,1314],{"class":207},[162,97640,3670],{"class":168},[162,97642,1006],{"class":207},[162,97644,315],{"class":168},[162,97646,97647,97650],{"class":164,"line":228},[162,97648,97649],{"class":168},"np.sort(a)",[162,97651,97652],{"class":361},"#升序排序\n",[162,97654,97655,97658],{"class":164,"line":252},[162,97656,97657],{"class":168},"np.argsort(a)",[162,97659,97660],{"class":361},"#按照元素大小来索引排序\n",[19,97662,96356],{},[153,97664,97666],{"className":155,"code":97665,"language":157,"meta":158,"style":158},"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",[71,97667,97668,97680,97706,97711,97715,97720,97725,97730,97735,97739,97747,97751,97756,97761,97766,97771,97775,97780,97793,97797,97802,97807,97812,97817,97821,97826,97838,97842,97846,97850,97854,97858,97862,97867,97882,97887,97896,97901,97905,97909,97914,97918,97923],{"__ignoreMap":158},[162,97669,97670,97673,97675,97677],{"class":164,"line":165},[162,97671,97672],{"class":168},"np.random.seed(",[162,97674,312],{"class":207},[162,97676,3720],{"class":168},[162,97678,97679],{"class":361},"#保证每次值一样\n",[162,97681,97682,97684,97686,97688,97690,97692,97694,97696,97698,97700,97702,97704],{"class":164,"line":197},[162,97683,96371],{"class":168},[162,97685,173],{"class":172},[162,97687,96179],{"class":168},[162,97689,3608],{"class":207},[162,97691,3670],{"class":168},[162,97693,34577],{"class":671},[162,97695,173],{"class":172},[162,97697,604],{"class":168},[162,97699,223],{"class":207},[162,97701,3670],{"class":168},[162,97703,1314],{"class":207},[162,97705,586],{"class":168},[162,97707,97708],{"class":164,"line":228},[162,97709,97710],{"class":361},"#原数组：\n",[162,97712,97713],{"class":164,"line":252},[162,97714,96993],{"class":179},[162,97716,97717],{"class":164,"line":328},[162,97718,97719],{"class":179},"array([[44, 47, 64, 67, 67,  9],\n",[162,97721,97722],{"class":164,"line":466},[162,97723,97724],{"class":179},"       [83, 21, 36, 87, 70, 88],\n",[162,97726,97727],{"class":164,"line":471},[162,97728,97729],{"class":179},"       [88, 12, 58, 65, 39, 87],\n",[162,97731,97732],{"class":164,"line":687},[162,97733,97734],{"class":179},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[162,97736,97737],{"class":164,"line":692},[162,97738,96993],{"class":179},[162,97740,97741,97744],{"class":164,"line":698},[162,97742,97743],{"class":168},"np.sort(aa)",[162,97745,97746],{"class":361},"#每行进行了排序\n",[162,97748,97749],{"class":164,"line":2955},[162,97750,96993],{"class":179},[162,97752,97753],{"class":164,"line":2960},[162,97754,97755],{"class":179},"array([[ 9, 44, 47, 64, 67, 67],\n",[162,97757,97758],{"class":164,"line":2971},[162,97759,97760],{"class":179},"       [21, 36, 70, 83, 87, 88],\n",[162,97762,97763],{"class":164,"line":2984},[162,97764,97765],{"class":179},"       [12, 39, 58, 65, 87, 88],\n",[162,97767,97768],{"class":164,"line":2989},[162,97769,97770],{"class":179},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[162,97772,97773],{"class":164,"line":3011},[162,97774,96993],{"class":179},[162,97776,97777],{"class":164,"line":3022},[162,97778,97779],{"class":361},"#axis=0时\n",[162,97781,97782,97785,97787,97789,97791],{"class":164,"line":3027},[162,97783,97784],{"class":168},"np.sort(aa,",[162,97786,50587],{"class":671},[162,97788,173],{"class":172},[162,97790,312],{"class":207},[162,97792,434],{"class":168},[162,97794,97795],{"class":164,"line":3046},[162,97796,96993],{"class":179},[162,97798,97799],{"class":164,"line":3052},[162,97800,97801],{"class":179},"array([[44, 12, 36, 37, 25,  9],\n",[162,97803,97804],{"class":164,"line":3057},[162,97805,97806],{"class":179},"       [46, 21, 58, 65, 39, 77],\n",[162,97808,97809],{"class":164,"line":3072},[162,97810,97811],{"class":179},"       [83, 47, 64, 67, 67, 87],\n",[162,97813,97814],{"class":164,"line":3077},[162,97815,97816],{"class":179},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[162,97818,97819],{"class":164,"line":3100},[162,97820,96993],{"class":179},[162,97822,97823],{"class":164,"line":3140},[162,97824,97825],{"class":361},"#axis=1时,为默认值\n",[162,97827,97828,97830,97832,97834,97836],{"class":164,"line":4878},[162,97829,97784],{"class":168},[162,97831,50587],{"class":671},[162,97833,173],{"class":172},[162,97835,208],{"class":207},[162,97837,434],{"class":168},[162,97839,97840],{"class":164,"line":4883},[162,97841,96993],{"class":179},[162,97843,97844],{"class":164,"line":4897},[162,97845,97755],{"class":179},[162,97847,97848],{"class":164,"line":4902},[162,97849,97760],{"class":179},[162,97851,97852],{"class":164,"line":5694},[162,97853,97765],{"class":179},[162,97855,97856],{"class":164,"line":5708},[162,97857,97770],{"class":179},[162,97859,97860],{"class":164,"line":5716},[162,97861,96993],{"class":179},[162,97863,97864],{"class":164,"line":5721},[162,97865,97866],{"class":361},"#按最后一列排序\n",[162,97868,97869,97871,97873,97876,97878,97880],{"class":164,"line":5727},[162,97870,3561],{"class":168},[162,97872,173],{"class":172},[162,97874,97875],{"class":168},"aa[:,",[162,97877,353],{"class":172},[162,97879,208],{"class":207},[162,97881,194],{"class":168},[162,97883,97884],{"class":164,"line":5733},[162,97885,97886],{"class":361},"#获取最后一列排好序的索引\n",[162,97888,97889,97891,97893],{"class":164,"line":5738},[162,97890,77123],{"class":168},[162,97892,173],{"class":172},[162,97894,97895],{"class":168},"np.argsort(b)\n",[162,97897,97898],{"class":164,"line":11052},[162,97899,97900],{"class":168},"aa[index]\n",[162,97902,97903],{"class":164,"line":11076},[162,97904,96993],{"class":179},[162,97906,97907],{"class":164,"line":11081},[162,97908,97719],{"class":179},[162,97910,97911],{"class":164,"line":11087},[162,97912,97913],{"class":179},"       [46, 88, 81, 37, 25, 77],\n",[162,97915,97916],{"class":164,"line":11114},[162,97917,97729],{"class":179},[162,97919,97920],{"class":164,"line":11119},[162,97921,97922],{"class":179},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[162,97924,97925],{"class":164,"line":11125},[162,97926,96993],{"class":179},[3219,97928,97929],{},"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":158,"searchDepth":197,"depth":197,"links":97931},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":97578,"description":3241},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":97938,"title":97939,"body":97940,"description":3241,"extension":3242,"meta":97970,"navigation":300,"path":97971,"seo":97972,"stem":97973,"__hash__":97974},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":97941,"toc":97968},[97942,97945,97948,97951,97954,97957,97960,97963],[10,97943,97939],{"id":97944},"_14广播机制",[19,97946,97947],{},"广播的规则：",[19,97949,97950],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,97952,97953],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,97955,97956],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,97958,97959],{},"3.如果没有维度形状为1，则会引发异常",[19,97961,97962],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,97964,97965],{},[4602,97966],{"alt":158,"src":97967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":158,"searchDepth":197,"depth":197,"links":97969},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":97939,"description":3241},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":97976,"title":97977,"body":97978,"description":3241,"extension":3242,"meta":98076,"navigation":300,"path":98077,"seo":98078,"stem":98079,"__hash__":98080},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":97979,"toc":98074},[97980,97983,97986,98071],[10,97981,97977],{"id":97982},"_15比较掩码",[19,97984,97985],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[153,97987,97989],{"className":155,"code":97988,"language":157,"meta":158,"style":158},"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",[71,97990,97991,98037,98048,98062,98066],{"__ignoreMap":158},[162,97992,97993,97995,97997,98000,98002,98004,98006,98008,98010,98012,98014,98016,98018,98020,98022,98024,98026,98028,98030,98032,98034],{"class":164,"line":165},[162,97994,3538],{"class":168},[162,97996,173],{"class":172},[162,97998,97999],{"class":168},"np.array([[",[162,98001,208],{"class":207},[162,98003,3670],{"class":168},[162,98005,213],{"class":207},[162,98007,3670],{"class":168},[162,98009,218],{"class":207},[162,98011,51103],{"class":168},[162,98013,3762],{"class":207},[162,98015,3670],{"class":168},[162,98017,3788],{"class":207},[162,98019,3670],{"class":168},[162,98021,3813],{"class":207},[162,98023,51103],{"class":168},[162,98025,4008],{"class":207},[162,98027,3670],{"class":168},[162,98029,4032],{"class":207},[162,98031,3670],{"class":168},[162,98033,4057],{"class":207},[162,98035,98036],{"class":168},"]])\n",[162,98038,98039,98041,98043,98045],{"class":164,"line":197},[162,98040,3538],{"class":168},[162,98042,4187],{"class":172},[162,98044,1011],{"class":207},[162,98046,98047],{"class":361},"#结果是一个由True,False组成的数组\n",[162,98049,98050,98053,98055,98057,98059],{"class":164,"line":228},[162,98051,98052],{"class":168},"a[a",[162,98054,4187],{"class":172},[162,98056,1011],{"class":207},[162,98058,3120],{"class":168},[162,98060,98061],{"class":361},"#小于20的元素会存到这个数组中\n",[162,98063,98064],{"class":164,"line":252},[162,98065,96629],{"class":361},[162,98067,98068],{"class":164,"line":328},[162,98069,98070],{"class":361},"#array([ 1,  2,  3, 11, 12, 13])\n",[3219,98072,98073],{},"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":158,"searchDepth":197,"depth":197,"links":98075},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":97977,"description":3241},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":98082,"title":98083,"body":98084,"description":3241,"extension":3242,"meta":98176,"navigation":300,"path":98177,"seo":98178,"stem":98179,"__hash__":98180},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":98085,"toc":98174},[98086,98089,98092,98095,98098,98101,98166,98171],[10,98087,98083],{"id":98088},"_16魔法命令time",[19,98090,98091],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,98093,98094],{},"%:行模式",[19,98096,98097],{},"%%:单元格模式",[19,98099,98100],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[153,98102,98104],{"className":155,"code":98103,"language":157,"meta":158,"style":158},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[71,98105,98106,98111,98118,98123,98132,98145,98149,98157],{"__ignoreMap":158},[162,98107,98108],{"class":164,"line":165},[162,98109,98110],{"class":361},"#程序执行时间\n",[162,98112,98113,98115],{"class":164,"line":197},[162,98114,33478],{"class":172},[162,98116,98117],{"class":168}," time \n",[162,98119,98120],{"class":164,"line":228},[162,98121,98122],{"class":361},"#获取时间\n",[162,98124,98125,98128,98130],{"class":164,"line":252},[162,98126,98127],{"class":168},"start",[162,98129,173],{"class":172},[162,98131,35497],{"class":168},[162,98133,98134,98137,98140,98142],{"class":164,"line":328},[162,98135,98136],{"class":168},"time.sleep(",[162,98138,98139],{"class":207},"0.4",[162,98141,3720],{"class":168},[162,98143,98144],{"class":361},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[162,98146,98147],{"class":164,"line":466},[162,98148,98122],{"class":361},[162,98150,98151,98153,98155],{"class":164,"line":471},[162,98152,48875],{"class":168},[162,98154,173],{"class":172},[162,98156,35497],{"class":168},[162,98158,98159,98161,98163],{"class":164,"line":687},[162,98160,48875],{"class":168},[162,98162,353],{"class":172},[162,98164,98165],{"class":168},"start\n",[19,98167,98168],{},[4602,98169],{"alt":158,"src":98170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[3219,98172,98173],{},"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":158,"searchDepth":197,"depth":197,"links":98175},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":98083,"description":3241},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":98182,"title":98183,"body":98184,"description":3241,"extension":3242,"meta":98219,"navigation":300,"path":98220,"seo":98221,"stem":98222,"__hash__":98223},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":98185,"toc":98217},[98186,98189,98192,98195,98198,98201,98204,98207,98212],[10,98187,98183],{"id":98188},"_17魔法命令timeit",[19,98190,98191],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,98193,98194],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,98196,98197],{},"单元格模式：",[19,98199,98200],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,98202,98203],{},"初始化语句执行次数由轮数来决定",[19,98205,98206],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,98208,98209],{},[4602,98210],{"alt":158,"src":98211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,98213,98214],{},[4602,98215],{"alt":158,"src":98216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":158,"searchDepth":197,"depth":197,"links":98218},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":98183,"description":3241},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":98225,"title":98226,"body":98227,"description":3241,"extension":3242,"meta":98245,"navigation":300,"path":98246,"seo":98247,"stem":98248,"__hash__":98249},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":98228,"toc":98243},[98229,98232,98235,98238],[10,98230,98226],{"id":98231},"_18魔法命令writefile和run",[19,98233,98234],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,98236,98237],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,98239,98240],{},[4602,98241],{"alt":158,"src":98242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":158,"searchDepth":197,"depth":197,"links":98244},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":98226,"description":3241},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":98251,"title":98252,"body":98253,"description":3241,"extension":3242,"meta":98306,"navigation":300,"path":98307,"seo":98308,"stem":98309,"__hash__":98310},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":98254,"toc":98304},[98255,98258,98261,98263,98266,98269,98274,98277,98280,98283,98286,98289,98292,98295,98298,98301],[10,98256,98252],{"id":98257},"_19魔法命令memit",[19,98259,98260],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,98262,27691],{},[19,98264,98265],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,98267,98268],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,98270,98271],{},[4602,98272],{"alt":158,"src":98273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,98275,98276],{},"补充：",[19,98278,98279],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,98281,98282],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,98284,98285],{},"解决方法：",[19,98287,98288],{},"1.cmd",[19,98290,98291],{},"2.依次输入以下代码：",[19,98293,98294],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,98296,98297],{},"pip install --upgrade ipython",[19,98299,98300],{},"#升级 memory_profiler 和 setuptools",[19,98302,98303],{},"pip install --upgrade memory_profiler setuptools",{"title":158,"searchDepth":197,"depth":197,"links":98305},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":98252,"description":3241},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":98312,"title":98313,"body":98314,"description":3241,"extension":3242,"meta":99960,"navigation":300,"path":99961,"seo":99962,"stem":99963,"__hash__":99964},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":98315,"toc":99930},[98316,98319,98323,98327,98388,98391,98396,98400,98405,98410,98415,98420,98423,98428,98432,98436,98469,98472,98475,98478,98530,98533,98569,98572,98614,98618,98639,98641,98678,98680,98685,98687,98692,98696,98699,98727,98731,98735,98788,98792,98884,98888,98892,98895,98900,98904,98929,98934,98938,98941,98944,98947,98950,98953,98956,98959,98971,98975,98979,98982,99014,99017,99040,99043,99069,99072,99098,99101,99135,99138,99200,99204,99207,99211,99214,99240,99243,99246,99251,99254,99323,99325,99330,99391,99394,99405,99411,99416,99420,99423,99436,99440,99455,99457,99480,99482,99508,99511,99514,99517,99565,99567,99572,99576,99580,99607,99611,99638,99641,99646,99651,99741,99745,99803,99808,99811,99814,99856,99860,99916,99921,99924,99927],[10,98317,98313],{"id":98318},"_2创建数组",[14,98320,98322],{"id":98321},"_21-array函数创建数组","2.1 array()函数创建数组",[3284,98324,98326],{"id":98325},"_221-函数语句","2.2.1 函数语句",[153,98328,98330],{"className":155,"code":98329,"language":157,"meta":158,"style":158},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[71,98331,98332],{"__ignoreMap":158},[162,98333,98334,98337,98340,98342,98344,98346,98348,98350,98353,98355,98358,98360,98363,98365,98367,98369,98372,98374,98377,98379,98382,98384,98386],{"class":164,"line":165},[162,98335,98336],{"class":168},"numpy.array(",[162,98338,98339],{"class":207},"object",[162,98341,183],{"class":168},[162,98343,96565],{"class":671},[162,98345,16659],{"class":172},[162,98347,42008],{"class":207},[162,98349,183],{"class":168},[162,98351,98352],{"class":671},"copy",[162,98354,16659],{"class":172},[162,98356,98357],{"class":207}," True",[162,98359,183],{"class":168},[162,98361,98362],{"class":671},"order",[162,98364,16659],{"class":172},[162,98366,42008],{"class":207},[162,98368,183],{"class":168},[162,98370,98371],{"class":671},"subok",[162,98373,16659],{"class":172},[162,98375,98376],{"class":207}," False",[162,98378,183],{"class":168},[162,98380,98381],{"class":671},"ndmin",[162,98383,16659],{"class":172},[162,98385,2717],{"class":207},[162,98387,434],{"class":168},[19,98389,98390],{},"参数：",[19,98392,98393],{},[4602,98394],{"alt":158,"src":98395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[3284,98397,98399],{"id":98398},"_222-实例","2.2.2 实例",[19,98401,98402],{},[4602,98403],{"alt":158,"src":98404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,98406,98407],{},[4602,98408],{"alt":158,"src":98409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,98411,98412],{},[4602,98413],{"alt":158,"src":98414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,98416,98417],{},[4602,98418],{"alt":158,"src":98419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,98421,98422],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,98424,98425],{},[4602,98426],{"alt":158,"src":98427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,98429,98431],{"id":98430},"_22-随机数创建数组","2.2 随机数创建数组",[3284,98433,98435],{"id":98434},"_221-random语句","2.2.1 random语句",[153,98437,98439],{"className":155,"code":98438,"language":157,"meta":158,"style":158},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[71,98440,98441,98446,98451,98459,98464],{"__ignoreMap":158},[162,98442,98443],{"class":164,"line":165},[162,98444,98445],{"class":361},"#random.random()\n",[162,98447,98448],{"class":164,"line":197},[162,98449,98450],{"class":361},"#确定随机种子,就是每次运行结果是相同的\n",[162,98452,98453,98455,98457],{"class":164,"line":228},[162,98454,97672],{"class":168},[162,98456,312],{"class":207},[162,98458,434],{"class":168},[162,98460,98461],{"class":164,"line":252},[162,98462,98463],{"class":168},"np.random.random()\n",[162,98465,98466],{"class":164,"line":328},[162,98467,98468],{"class":361},"#生成一个随机的数目\n",[19,98470,98471],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,98473,98474],{},"可以指定数组形状 size",[19,98476,98477],{},"①生成一维数组",[153,98479,98481],{"className":155,"code":98480,"language":157,"meta":158,"style":158},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[71,98482,98483,98488,98501,98506,98522],{"__ignoreMap":158},[162,98484,98485],{"class":164,"line":165},[162,98486,98487],{"class":361},"#random.random(size())\n",[162,98489,98490,98493,98495,98497,98499],{"class":164,"line":197},[162,98491,98492],{"class":168},"np.random.random(",[162,98494,34577],{"class":671},[162,98496,173],{"class":172},[162,98498,637],{"class":207},[162,98500,434],{"class":168},[162,98502,98503],{"class":164,"line":228},[162,98504,98505],{"class":361},"#生成一位的五个元素\n",[162,98507,98508,98510,98512,98514,98516,98518,98520],{"class":164,"line":252},[162,98509,3538],{"class":168},[162,98511,173],{"class":172},[162,98513,98492],{"class":168},[162,98515,34577],{"class":671},[162,98517,173],{"class":172},[162,98519,223],{"class":207},[162,98521,434],{"class":168},[162,98523,98524,98527],{"class":164,"line":328},[162,98525,98526],{"class":168},"a.shape ",[162,98528,98529],{"class":361},"#输出数组形状\n",[19,98531,98532],{},"②生成二维数组",[153,98534,98536],{"className":155,"code":98535,"language":157,"meta":158,"style":158},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[71,98537,98538,98542,98564],{"__ignoreMap":158},[162,98539,98540],{"class":164,"line":165},[162,98541,96366],{"class":361},[162,98543,98544,98546,98548,98550,98552,98554,98556,98558,98560,98562],{"class":164,"line":197},[162,98545,96371],{"class":168},[162,98547,173],{"class":172},[162,98549,98492],{"class":168},[162,98551,34577],{"class":671},[162,98553,173],{"class":172},[162,98555,604],{"class":168},[162,98557,223],{"class":207},[162,98559,3670],{"class":168},[162,98561,637],{"class":207},[162,98563,586],{"class":168},[162,98565,98566],{"class":164,"line":228},[162,98567,98568],{"class":361},"#生成四行五列的数组\n",[19,98570,98571],{},"③生成三维数组",[153,98573,98575],{"className":155,"code":98574,"language":157,"meta":158,"style":158},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[71,98576,98577,98582,98609],{"__ignoreMap":158},[162,98578,98579],{"class":164,"line":165},[162,98580,98581],{"class":361},"#三维数组\n",[162,98583,98584,98587,98589,98591,98593,98595,98597,98599,98601,98603,98605,98607],{"class":164,"line":197},[162,98585,98586],{"class":168},"aaa",[162,98588,173],{"class":172},[162,98590,98492],{"class":168},[162,98592,34577],{"class":671},[162,98594,173],{"class":172},[162,98596,604],{"class":168},[162,98598,213],{"class":207},[162,98600,3670],{"class":168},[162,98602,218],{"class":207},[162,98604,3670],{"class":168},[162,98606,223],{"class":207},[162,98608,586],{"class":168},[162,98610,98611],{"class":164,"line":228},[162,98612,98613],{"class":168},"aaa.shape\n",[3284,98615,98617],{"id":98616},"_222-randint语句","2.2.2 randint语句",[153,98619,98621],{"className":155,"code":98620,"language":157,"meta":158,"style":158},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[71,98622,98623,98628],{"__ignoreMap":158},[162,98624,98625],{"class":164,"line":165},[162,98626,98627],{"class":361},"#生成随机的整数 random.randint(low,high,size)\n",[162,98629,98630,98632,98634,98636],{"class":164,"line":197},[162,98631,96179],{"class":168},[162,98633,637],{"class":207},[162,98635,1823],{"class":168},[162,98637,98638],{"class":361},"#0~5中的随机一个数\n",[19,98640,98477],{},[153,98642,98644],{"className":155,"code":98643,"language":157,"meta":158,"style":158},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[71,98645,98646,98651,98673],{"__ignoreMap":158},[162,98647,98648],{"class":164,"line":165},[162,98649,98650],{"class":361},"#一维\n",[162,98652,98653,98655,98657,98659,98661,98663,98665,98667,98669,98671],{"class":164,"line":197},[162,98654,96179],{"class":168},[162,98656,208],{"class":207},[162,98658,3670],{"class":168},[162,98660,3762],{"class":207},[162,98662,3670],{"class":168},[162,98664,34577],{"class":671},[162,98666,173],{"class":172},[162,98668,604],{"class":168},[162,98670,1006],{"class":207},[162,98672,586],{"class":168},[162,98674,98675],{"class":164,"line":228},[162,98676,98677],{"class":361},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,98679,98532],{},[19,98681,98682],{},[4602,98683],{"alt":158,"src":98684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,98686,98571],{},[19,98688,98689],{},[4602,98690],{"alt":158,"src":98691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[3284,98693,98695],{"id":98694},"_222-rand语句","2.2.2 rand语句",[19,98697,98698],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[153,98700,98702],{"className":155,"code":98701,"language":157,"meta":158,"style":158},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[71,98703,98704,98717,98722],{"__ignoreMap":158},[162,98705,98706,98709,98711,98713,98715],{"class":164,"line":165},[162,98707,98708],{"class":168},"np.random.rand(",[162,98710,3608],{"class":207},[162,98712,3670],{"class":168},[162,98714,1006],{"class":207},[162,98716,434],{"class":168},[162,98718,98719],{"class":164,"line":197},[162,98720,98721],{"class":361},"#第一个参数100：行数，表示有100个样本\n",[162,98723,98724],{"class":164,"line":228},[162,98725,98726],{"class":361},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,98728,98730],{"id":98729},"_23-arange创建数组","2.3 arange()创建数组",[3284,98732,98734],{"id":98733},"_231-函数语句","2.3.1 函数语句",[153,98736,98738],{"className":155,"code":98737,"language":157,"meta":158,"style":158},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[71,98739,98740,98754,98759,98764,98769,98774,98779,98784],{"__ignoreMap":158},[162,98741,98742,98745,98747,98749,98752],{"class":164,"line":165},[162,98743,98744],{"class":168},"numpy.arange([start,] stop[, step], ",[162,98746,96565],{"class":671},[162,98748,173],{"class":172},[162,98750,98751],{"class":207},"None",[162,98753,434],{"class":168},[162,98755,98756],{"class":164,"line":197},[162,98757,98758],{"class":361},"#参数\n",[162,98760,98761],{"class":164,"line":228},[162,98762,98763],{"class":179},"\"\"\"\n",[162,98765,98766],{"class":164,"line":252},[162,98767,98768],{"class":179},"start:起始值，可选，默认从 0 开始。\n",[162,98770,98771],{"class":164,"line":328},[162,98772,98773],{"class":179},"stop:结束值（不包含该值）。\n",[162,98775,98776],{"class":164,"line":466},[162,98777,98778],{"class":179},"step:步长，可选，默认是 1。可以为浮点数。\n",[162,98780,98781],{"class":164,"line":471},[162,98782,98783],{"class":179},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[162,98785,98786],{"class":164,"line":687},[162,98787,98763],{"class":179},[3284,98789,98791],{"id":98790},"_232-实例","2.3.2 实例",[153,98793,98795],{"className":155,"code":98794,"language":157,"meta":158,"style":158},"#创建一维数组\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",[71,98796,98797,98801,98825,98830,98835,98839,98862,98866,98870,98875,98880],{"__ignoreMap":158},[162,98798,98799],{"class":164,"line":165},[162,98800,96170],{"class":361},[162,98802,98803,98805,98807,98809,98811,98813,98815,98817,98819,98821,98823],{"class":164,"line":197},[162,98804,96067],{"class":168},[162,98806,208],{"class":207},[162,98808,3670],{"class":168},[162,98810,4008],{"class":207},[162,98812,3670],{"class":168},[162,98814,208],{"class":207},[162,98816,3670],{"class":168},[162,98818,96565],{"class":671},[162,98820,173],{"class":172},[162,98822,3319],{"class":207},[162,98824,434],{"class":168},[162,98826,98827],{"class":164,"line":228},[162,98828,98829],{"class":361},"#输出结果：\n",[162,98831,98832],{"class":164,"line":252},[162,98833,98834],{"class":361},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[162,98836,98837],{"class":164,"line":328},[162,98838,97012],{"class":361},[162,98840,98841,98844,98846,98848,98850,98853,98855,98857,98859],{"class":164,"line":466},[162,98842,98843],{"class":168},"np.array([np.arange(",[162,98845,208],{"class":207},[162,98847,3670],{"class":168},[162,98849,223],{"class":207},[162,98851,98852],{"class":168},"),np.arange(",[162,98854,223],{"class":207},[162,98856,3670],{"class":168},[162,98858,3661],{"class":207},[162,98860,98861],{"class":168},")])\n",[162,98863,98864],{"class":164,"line":471},[162,98865,96629],{"class":361},[162,98867,98868],{"class":164,"line":687},[162,98869,98763],{"class":179},[162,98871,98872],{"class":164,"line":692},[162,98873,98874],{"class":179},"array([[1, 2, 3],\n",[162,98876,98877],{"class":164,"line":698},[162,98878,98879],{"class":179},"       [4, 5, 6]])\n",[162,98881,98882],{"class":164,"line":2955},[162,98883,98763],{"class":179},[14,98885,98887],{"id":98886},"_24-生态分布","2.4 生态分布",[3284,98889,98891],{"id":98890},"_241-标准正态分布","2.4.1 标准正态分布",[19,98893,98894],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,98896,98897],{},[4602,98898],{"alt":158,"src":98899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[3284,98901,98903],{"id":98902},"_242-常规正态分布","2.4.2 常规正态分布",[153,98905,98907],{"className":155,"code":98906,"language":157,"meta":158,"style":158},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[71,98908,98909,98914,98919,98924],{"__ignoreMap":158},[162,98910,98911],{"class":164,"line":165},[162,98912,98913],{"class":168},"random.normal(loc,scale,size)也可以生成正态分布\n",[162,98915,98916],{"class":164,"line":197},[162,98917,98918],{"class":361},"#loc:期望\n",[162,98920,98921],{"class":164,"line":228},[162,98922,98923],{"class":361},"#scale:方差\n",[162,98925,98926],{"class":164,"line":252},[162,98927,98928],{"class":361},"#size:用于确定是几维的数列\n",[19,98930,98931],{},[4602,98932],{"alt":158,"src":98933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,98935,98937],{"id":98936},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,98939,98940],{},"ndim:秩，维度个数",[19,98942,98943],{},"size:数组元素的个数",[19,98945,98946],{},"shape:数组的形状",[19,98948,98949],{},"dtype:数组元素的类型",[19,98951,98952],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,98954,98955],{},"他们都是属性，通过数组.属性的形式来确定",[19,98957,98958],{},"如果需要输出多个可以通过以下方式：",[153,98960,98962],{"className":155,"code":98961,"language":157,"meta":158,"style":158},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[71,98963,98964],{"__ignoreMap":158},[162,98965,98966,98968],{"class":164,"line":165},[162,98967,306],{"class":207},[162,98969,98970],{"class":168},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,98972,98974],{"id":98973},"_26-其他方式创建数组","2.6 其他方式创建数组",[3284,98976,98978],{"id":98977},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,98980,98981],{},"①创建一维数组",[153,98983,98985],{"className":155,"code":98984,"language":157,"meta":158,"style":158},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[71,98986,98987,98996,99000,99005,99010],{"__ignoreMap":158},[162,98988,98989,98992,98994],{"class":164,"line":165},[162,98990,98991],{"class":168},"np.zeros(",[162,98993,1006],{"class":207},[162,98995,434],{"class":168},[162,98997,98998],{"class":164,"line":197},[162,98999,98763],{"class":179},[162,99001,99002],{"class":164,"line":228},[162,99003,99004],{"class":179},"输出结果：\n",[162,99006,99007],{"class":164,"line":252},[162,99008,99009],{"class":179},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[162,99011,99012],{"class":164,"line":328},[162,99013,98763],{"class":179},[19,99015,99016],{},"上方代码等价于：",[153,99018,99020],{"className":155,"code":99019,"language":157,"meta":158,"style":158},"np.zeros(shape=(10))#创建10个元素的0数组\n",[71,99021,99022],{"__ignoreMap":158},[162,99023,99024,99026,99029,99031,99033,99035,99037],{"class":164,"line":165},[162,99025,98991],{"class":168},[162,99027,99028],{"class":671},"shape",[162,99030,173],{"class":172},[162,99032,604],{"class":168},[162,99034,1006],{"class":207},[162,99036,85836],{"class":168},[162,99038,99039],{"class":361},"#创建10个元素的0数组\n",[19,99041,99042],{},"也可以指定类型",[153,99044,99046],{"className":155,"code":99045,"language":157,"meta":158,"style":158},"#指定类型\nnp.zeros(5,dtype=int)\n",[71,99047,99048,99053],{"__ignoreMap":158},[162,99049,99050],{"class":164,"line":165},[162,99051,99052],{"class":361},"#指定类型\n",[162,99054,99055,99057,99059,99061,99063,99065,99067],{"class":164,"line":197},[162,99056,98991],{"class":168},[162,99058,637],{"class":207},[162,99060,3670],{"class":168},[162,99062,96565],{"class":671},[162,99064,173],{"class":172},[162,99066,3319],{"class":207},[162,99068,434],{"class":168},[19,99070,99071],{},"②创建二维数组",[153,99073,99075],{"className":155,"code":99074,"language":157,"meta":158,"style":158},"np.zeros((3,4),dtype=int)\n",[71,99076,99077],{"__ignoreMap":158},[162,99078,99079,99082,99084,99086,99088,99090,99092,99094,99096],{"class":164,"line":165},[162,99080,99081],{"class":168},"np.zeros((",[162,99083,218],{"class":207},[162,99085,3670],{"class":168},[162,99087,223],{"class":207},[162,99089,45331],{"class":168},[162,99091,96565],{"class":671},[162,99093,173],{"class":172},[162,99095,3319],{"class":207},[162,99097,434],{"class":168},[19,99099,99100],{},"③创建三维数组",[153,99102,99104],{"className":155,"code":99103,"language":157,"meta":158,"style":158},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[71,99105,99106,99111],{"__ignoreMap":158},[162,99107,99108],{"class":164,"line":165},[162,99109,99110],{"class":361},"#创建三维数组\n",[162,99112,99113,99115,99117,99119,99121,99123,99125,99127,99129,99131,99133],{"class":164,"line":197},[162,99114,99081],{"class":168},[162,99116,218],{"class":207},[162,99118,3670],{"class":168},[162,99120,223],{"class":207},[162,99122,3670],{"class":168},[162,99124,637],{"class":207},[162,99126,45331],{"class":168},[162,99128,96565],{"class":671},[162,99130,173],{"class":172},[162,99132,3319],{"class":207},[162,99134,434],{"class":168},[19,99136,99137],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[153,99139,99141],{"className":155,"code":99140,"language":157,"meta":158,"style":158},"#使用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",[71,99142,99143,99148,99163,99168,99173,99195],{"__ignoreMap":158},[162,99144,99145],{"class":164,"line":165},[162,99146,99147],{"class":361},"#使用zeros_like将创建的一维数组变成全0的数组\n",[162,99149,99150,99152,99154,99156,99158,99160],{"class":164,"line":197},[162,99151,3538],{"class":168},[162,99153,173],{"class":172},[162,99155,96067],{"class":168},[162,99157,223],{"class":207},[162,99159,3720],{"class":168},[162,99161,99162],{"class":361},"#这个得到的结果：一维数组0，1，2，3\n",[162,99164,99165],{"class":164,"line":228},[162,99166,99167],{"class":168},"np.zeros_like(a)\n",[162,99169,99170],{"class":164,"line":252},[162,99171,99172],{"class":361},"#使用zeros_like将创建的二维数组变成全0的数组\n",[162,99174,99175,99177,99179,99181,99183,99185,99187,99189,99191,99193],{"class":164,"line":328},[162,99176,96371],{"class":168},[162,99178,173],{"class":172},[162,99180,98492],{"class":168},[162,99182,34577],{"class":671},[162,99184,173],{"class":172},[162,99186,604],{"class":168},[162,99188,223],{"class":207},[162,99190,3670],{"class":168},[162,99192,637],{"class":207},[162,99194,586],{"class":168},[162,99196,99197],{"class":164,"line":466},[162,99198,99199],{"class":168},"np.zeros_like(aa)\n",[3284,99201,99203],{"id":99202},"_262-ones创建数组","2.6.2 ones()创建数组",[19,99205,99206],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[3284,99208,99210],{"id":99209},"_263-empty创建数组","2.6.3 empty()创建数组",[19,99212,99213],{},"①empty()用法",[153,99215,99217],{"className":155,"code":99216,"language":157,"meta":158,"style":158},"numpy.empty(shape,dtype=float,order='c')\n",[71,99218,99219],{"__ignoreMap":158},[162,99220,99221,99224,99226,99228,99230,99232,99234,99236,99238],{"class":164,"line":165},[162,99222,99223],{"class":168},"numpy.empty(shape,",[162,99225,96565],{"class":671},[162,99227,173],{"class":172},[162,99229,3354],{"class":207},[162,99231,3670],{"class":168},[162,99233,98362],{"class":671},[162,99235,173],{"class":172},[162,99237,79093],{"class":179},[162,99239,434],{"class":168},[19,99241,99242],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,99244,99245],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,99247,99248],{},[4602,99249],{"alt":158,"src":99250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,99252,99253],{},"②empty()用法",[153,99255,99257],{"className":155,"code":99256,"language":157,"meta":158,"style":158},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[71,99258,99259,99280,99292,99313,99318],{"__ignoreMap":158},[162,99260,99261,99263,99265,99268,99270,99272,99274,99276,99278],{"class":164,"line":165},[162,99262,4126],{"class":168},[162,99264,173],{"class":172},[162,99266,99267],{"class":168},"np.empty(",[162,99269,1006],{"class":207},[162,99271,3670],{"class":168},[162,99273,96565],{"class":671},[162,99275,173],{"class":172},[162,99277,3319],{"class":207},[162,99279,434],{"class":168},[162,99281,99282,99284,99286,99288,99290],{"class":164,"line":197},[162,99283,4101],{"class":168},[162,99285,173],{"class":172},[162,99287,96067],{"class":168},[162,99289,637],{"class":207},[162,99291,434],{"class":168},[162,99293,99294,99297,99299,99302,99304,99306,99309,99311],{"class":164,"line":228},[162,99295,99296],{"class":168},"np.add(",[162,99298,213],{"class":207},[162,99300,99301],{"class":168},",x,",[162,99303,96119],{"class":671},[162,99305,173],{"class":172},[162,99307,99308],{"class":168},"y[:",[162,99310,637],{"class":207},[162,99312,315],{"class":168},[162,99314,99315],{"class":164,"line":252},[162,99316,99317],{"class":361},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[162,99319,99320],{"class":164,"line":328},[162,99321,99322],{"class":168},"y\n",[19,99324,14610],{},[19,99326,99327],{},[4602,99328],{"alt":158,"src":99329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[153,99331,99333],{"className":155,"code":99332,"language":157,"meta":158,"style":158},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[71,99334,99335,99351,99371,99386],{"__ignoreMap":158},[162,99336,99337,99339,99341,99343,99345,99347,99349],{"class":164,"line":165},[162,99338,4101],{"class":168},[162,99340,173],{"class":172},[162,99342,96067],{"class":168},[162,99344,208],{"class":207},[162,99346,3670],{"class":168},[162,99348,1314],{"class":207},[162,99350,434],{"class":168},[162,99352,99353,99355,99357,99359,99361,99363,99365,99367,99369],{"class":164,"line":197},[162,99354,4126],{"class":168},[162,99356,173],{"class":172},[162,99358,99267],{"class":168},[162,99360,637],{"class":207},[162,99362,3670],{"class":168},[162,99364,96565],{"class":671},[162,99366,173],{"class":172},[162,99368,3319],{"class":207},[162,99370,434],{"class":168},[162,99372,99373,99376,99378,99380,99382,99384],{"class":164,"line":228},[162,99374,99375],{"class":168},"np.add(x,",[162,99377,213],{"class":207},[162,99379,3670],{"class":168},[162,99381,96119],{"class":671},[162,99383,173],{"class":172},[162,99385,96514],{"class":168},[162,99387,99388],{"class":164,"line":252},[162,99389,99390],{"class":361},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,99392,99393],{},"③empty_like()",[19,99395,99396],{},[3453,99397,99398,99399,99404],{},"创建一个",[3453,99400,99401],{},[3453,99402,99403],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,99406,99407,99410],{},[71,99408,99409],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,99412,99413],{},[4602,99414],{"alt":158,"src":99415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[3284,99417,99419],{"id":99418},"_264-用法","2.6.4 ？？用法",[19,99421,99422],{},"当想查看一个函数的参数时，可以通过？？来实现",[153,99424,99426],{"className":155,"code":99425,"language":157,"meta":158,"style":158},"np.full??\n",[71,99427,99428],{"__ignoreMap":158},[162,99429,99430,99433],{"class":164,"line":165},[162,99431,99432],{"class":168},"np.full",[162,99434,99435],{"class":80468},"??\n",[3284,99437,99439],{"id":99438},"_265-full创建数组","2.6.5 full()创建数组",[153,99441,99443],{"className":155,"code":99442,"language":157,"meta":158,"style":158},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[71,99444,99445,99450],{"__ignoreMap":158},[162,99446,99447],{"class":164,"line":165},[162,99448,99449],{"class":168},"full(shape,fill_value)\n",[162,99451,99452],{"class":164,"line":197},[162,99453,99454],{"class":168},"创建全为某个指定值的数组\n",[19,99456,97595],{},[153,99458,99460],{"className":155,"code":99459,"language":157,"meta":158,"style":158},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[71,99461,99462,99467],{"__ignoreMap":158},[162,99463,99464],{"class":164,"line":165},[162,99465,99466],{"class":361},"#创建一个一维数组,以20进行填充\n",[162,99468,99469,99472,99474,99476,99478],{"class":164,"line":197},[162,99470,99471],{"class":168},"np.full(",[162,99473,1006],{"class":207},[162,99475,3670],{"class":168},[162,99477,1011],{"class":207},[162,99479,434],{"class":168},[19,99481,96356],{},[153,99483,99485],{"className":155,"code":99484,"language":157,"meta":158,"style":158},"#创建二维数组\nnp.full((3,5),11)\n",[71,99486,99487,99491],{"__ignoreMap":158},[162,99488,99489],{"class":164,"line":165},[162,99490,97012],{"class":361},[162,99492,99493,99496,99498,99500,99502,99504,99506],{"class":164,"line":197},[162,99494,99495],{"class":168},"np.full((",[162,99497,218],{"class":207},[162,99499,3670],{"class":168},[162,99501,637],{"class":207},[162,99503,45331],{"class":168},[162,99505,3762],{"class":207},[162,99507,434],{"class":168},[19,99509,99510],{},"③full_like用法",[19,99512,99513],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,99515,99516],{},"这里是指定填充而已",[153,99518,99520],{"className":155,"code":99519,"language":157,"meta":158,"style":158},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[71,99521,99522,99527,99551,99556],{"__ignoreMap":158},[162,99523,99524],{"class":164,"line":165},[162,99525,99526],{"class":361},"#创建一个指定形状数组\n",[162,99528,99529,99531,99533,99535,99537,99539,99541,99543,99545,99547,99549],{"class":164,"line":197},[162,99530,3538],{"class":168},[162,99532,173],{"class":172},[162,99534,96067],{"class":168},[162,99536,208],{"class":207},[162,99538,3670],{"class":168},[162,99540,3621],{"class":207},[162,99542,96072],{"class":168},[162,99544,223],{"class":207},[162,99546,3670],{"class":168},[162,99548,3711],{"class":207},[162,99550,434],{"class":168},[162,99552,99553],{"class":164,"line":228},[162,99554,99555],{"class":361},"#进行指定填充\n",[162,99557,99558,99561,99563],{"class":164,"line":252},[162,99559,99560],{"class":168},"np.full_like(a,",[162,99562,1006],{"class":207},[162,99564,434],{"class":168},[19,99566,14610],{},[19,99568,99569],{},[4602,99570],{"alt":158,"src":99571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[3284,99573,99575],{"id":99574},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[25089,99577,99579],{"id":99578},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[153,99581,99583],{"className":155,"code":99582,"language":157,"meta":158,"style":158},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[71,99584,99585,99602],{"__ignoreMap":158},[162,99586,99587,99590,99592,99594,99596,99598,99600],{"class":164,"line":165},[162,99588,99589],{"class":168},"np.eye(",[162,99591,223],{"class":207},[162,99593,3670],{"class":168},[162,99595,96565],{"class":671},[162,99597,173],{"class":172},[162,99599,3319],{"class":207},[162,99601,434],{"class":168},[162,99603,99604],{"class":164,"line":197},[162,99605,99606],{"class":361},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[25089,99608,99610],{"id":99609},"_2662-法2identity","2.6.6.2 法2：identity()",[153,99612,99614],{"className":155,"code":99613,"language":157,"meta":158,"style":158},"#identity()\nnp.identity(5,dtype=int)\n",[71,99615,99616,99621],{"__ignoreMap":158},[162,99617,99618],{"class":164,"line":165},[162,99619,99620],{"class":361},"#identity()\n",[162,99622,99623,99626,99628,99630,99632,99634,99636],{"class":164,"line":197},[162,99624,99625],{"class":168},"np.identity(",[162,99627,637],{"class":207},[162,99629,3670],{"class":168},[162,99631,96565],{"class":671},[162,99633,173],{"class":172},[162,99635,3319],{"class":207},[162,99637,434],{"class":168},[19,99639,99640],{},"两个函数是有区别的",[19,99642,99643],{},[4602,99644],{"alt":158,"src":99645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,99647,99648],{},[4602,99649],{"alt":158,"src":99650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[153,99652,99654],{"className":155,"code":99653,"language":157,"meta":158,"style":158},"# 创建一个 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",[71,99655,99656,99661,99673,99678,99683,99688,99693,99697,99702,99722,99726,99731,99736],{"__ignoreMap":158},[162,99657,99658],{"class":164,"line":165},[162,99659,99660],{"class":361},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[162,99662,99663,99665,99667,99669,99671],{"class":164,"line":197},[162,99664,99589],{"class":168},[162,99666,218],{"class":207},[162,99668,183],{"class":168},[162,99670,223],{"class":207},[162,99672,434],{"class":168},[162,99674,99675],{"class":164,"line":228},[162,99676,99677],{"class":361},"# 输出:\n",[162,99679,99680],{"class":164,"line":252},[162,99681,99682],{"class":361},"# [[1. 0. 0. 0.]\n",[162,99684,99685],{"class":164,"line":328},[162,99686,99687],{"class":361},"#  [0. 1. 0. 0.]\n",[162,99689,99690],{"class":164,"line":466},[162,99691,99692],{"class":361},"#  [0. 0. 1. 0.]]\n",[162,99694,99695],{"class":164,"line":471},[162,99696,301],{"emptyLinePlaceholder":300},[162,99698,99699],{"class":164,"line":687},[162,99700,99701],{"class":361},"# 对角线向上偏移1\n",[162,99703,99704,99706,99708,99710,99712,99714,99716,99718,99720],{"class":164,"line":692},[162,99705,99589],{"class":168},[162,99707,218],{"class":207},[162,99709,183],{"class":168},[162,99711,223],{"class":207},[162,99713,183],{"class":168},[162,99715,3783],{"class":671},[162,99717,173],{"class":172},[162,99719,208],{"class":207},[162,99721,434],{"class":168},[162,99723,99724],{"class":164,"line":698},[162,99725,99677],{"class":361},[162,99727,99728],{"class":164,"line":2955},[162,99729,99730],{"class":361},"# [[0. 1. 0. 0.]\n",[162,99732,99733],{"class":164,"line":2960},[162,99734,99735],{"class":361},"#  [0. 0. 1. 0.]\n",[162,99737,99738],{"class":164,"line":2971},[162,99739,99740],{"class":361},"#  [0. 0. 0. 1.]]\n",[3284,99742,99744],{"id":99743},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[153,99746,99748],{"className":155,"code":99747,"language":157,"meta":158,"style":158},"#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",[71,99749,99750,99755,99759,99764,99769,99774,99779,99784,99789,99794,99799],{"__ignoreMap":158},[162,99751,99752],{"class":164,"line":165},[162,99753,99754],{"class":361},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[162,99756,99757],{"class":164,"line":197},[162,99758,98763],{"class":179},[162,99760,99761],{"class":164,"line":228},[162,99762,99763],{"class":179},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[162,99765,99766],{"class":164,"line":252},[162,99767,99768],{"class":179},"参数介绍：\n",[162,99770,99771],{"class":164,"line":328},[162,99772,99773],{"class":179},"start：序列的起始值\n",[162,99775,99776],{"class":164,"line":466},[162,99777,99778],{"class":179},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[162,99780,99781],{"class":164,"line":471},[162,99782,99783],{"class":179},"num：要生长的等步长的样本数量，默认为50\n",[162,99785,99786],{"class":164,"line":687},[162,99787,99788],{"class":179},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[162,99790,99791],{"class":164,"line":692},[162,99792,99793],{"class":179},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[162,99795,99796],{"class":164,"line":698},[162,99797,99798],{"class":179},"dtype：ndarry的数据类型\n",[162,99800,99801],{"class":164,"line":2955},[162,99802,98763],{"class":179},[19,99804,99805],{},[4602,99806],{"alt":158,"src":99807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,99809,99810],{},"这里num=是可以省略的",[19,99812,99813],{},"也就是下方两行代码结果是一模一样的",[153,99815,99817],{"className":155,"code":99816,"language":157,"meta":158,"style":158},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[71,99818,99819,99836],{"__ignoreMap":158},[162,99820,99821,99824,99826,99828,99830,99832,99834],{"class":164,"line":165},[162,99822,99823],{"class":168},"np.linspace(",[162,99825,208],{"class":207},[162,99827,3670],{"class":168},[162,99829,637],{"class":207},[162,99831,3670],{"class":168},[162,99833,637],{"class":207},[162,99835,434],{"class":168},[162,99837,99838,99840,99842,99844,99846,99848,99850,99852,99854],{"class":164,"line":197},[162,99839,99823],{"class":168},[162,99841,208],{"class":207},[162,99843,3670],{"class":168},[162,99845,637],{"class":207},[162,99847,3670],{"class":168},[162,99849,4794],{"class":671},[162,99851,173],{"class":172},[162,99853,637],{"class":207},[162,99855,434],{"class":168},[3284,99857,99859],{"id":99858},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[153,99861,99863],{"className":155,"code":99862,"language":157,"meta":158,"style":158},"#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",[71,99864,99865,99870,99874,99879,99884,99889,99894,99898,99903,99908,99912],{"__ignoreMap":158},[162,99866,99867],{"class":164,"line":165},[162,99868,99869],{"class":361},"#logspace函数用于创建一个等比数列，格式如下：\n",[162,99871,99872],{"class":164,"line":197},[162,99873,98763],{"class":179},[162,99875,99876],{"class":164,"line":228},[162,99877,99878],{"class":179},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[162,99880,99881],{"class":164,"line":252},[162,99882,99883],{"class":179},"参数为：\n",[162,99885,99886],{"class":164,"line":328},[162,99887,99888],{"class":179},"start:序列的起始位置为：base**start\n",[162,99890,99891],{"class":164,"line":466},[162,99892,99893],{"class":179},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[162,99895,99896],{"class":164,"line":471},[162,99897,99783],{"class":179},[162,99899,99900],{"class":164,"line":687},[162,99901,99902],{"class":179},"endpoint：是否包含 stop 这个值，默认是 True\n",[162,99904,99905],{"class":164,"line":692},[162,99906,99907],{"class":179},"base：对数的底数，默认是 10（常见对数）\n",[162,99909,99910],{"class":164,"line":698},[162,99911,99798],{"class":179},[162,99913,99914],{"class":164,"line":2955},[162,99915,98763],{"class":179},[19,99917,99918],{},[4602,99919],{"alt":158,"src":99920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,99922,99923],{},"logspace()函数中的num参数也是可以不写num=的",[19,99925,99926],{},"endpoint是不可以省略的",[3219,99928,99929],{},"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":158,"searchDepth":197,"depth":197,"links":99931},[99932,99936,99941,99945,99949,99950],{"id":98321,"depth":197,"text":98322,"children":99933},[99934,99935],{"id":98325,"depth":228,"text":98326},{"id":98398,"depth":228,"text":98399},{"id":98430,"depth":197,"text":98431,"children":99937},[99938,99939,99940],{"id":98434,"depth":228,"text":98435},{"id":98616,"depth":228,"text":98617},{"id":98694,"depth":228,"text":98695},{"id":98729,"depth":197,"text":98730,"children":99942},[99943,99944],{"id":98733,"depth":228,"text":98734},{"id":98790,"depth":228,"text":98791},{"id":98886,"depth":197,"text":98887,"children":99946},[99947,99948],{"id":98890,"depth":228,"text":98891},{"id":98902,"depth":228,"text":98903},{"id":98936,"depth":197,"text":98937},{"id":98973,"depth":197,"text":98974,"children":99951},[99952,99953,99954,99955,99956,99957,99958,99959],{"id":98977,"depth":228,"text":98978},{"id":99202,"depth":228,"text":99203},{"id":99209,"depth":228,"text":99210},{"id":99418,"depth":228,"text":99419},{"id":99438,"depth":228,"text":99439},{"id":99574,"depth":228,"text":99575},{"id":99743,"depth":228,"text":99744},{"id":99858,"depth":228,"text":99859},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":98313,"description":3241},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":99966,"title":99967,"body":99968,"description":3241,"extension":3242,"meta":100061,"navigation":300,"path":100062,"seo":100063,"stem":100064,"__hash__":100065},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":99969,"toc":100059},[99970,99973,99976,99979,99982,99985,99988,99991,99994,99997,100000,100003,100005,100008,100011,100016,100019,100022,100056],[10,99971,99967],{"id":99972},"_20魔法命令mprun",[19,99974,99975],{},"逐行分析数据内存的使用情况",[19,99977,99978],{},"语法格式：",[19,99980,99981],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,99983,99984],{},"分析结果列如下：",[19,99986,99987],{},"Line行号",[19,99989,99990],{},"Mem usage内存使用大小",[19,99992,99993],{},"increment内存增量",[19,99995,99996],{},"Line content代码内容",[19,99998,99999],{},"补充说明：",[19,100001,100002],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,100004,98268],{},[19,100006,100007],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,100009,100010],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,100012,100013],{},[4602,100014],{"alt":158,"src":100015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,100017,100018],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,100020,100021],{},"这时候需要重新加载模块",[153,100023,100025],{"className":155,"code":100024,"language":157,"meta":158,"style":158},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[71,100026,100027,100032,100039,100044],{"__ignoreMap":158},[162,100028,100029],{"class":164,"line":165},[162,100030,100031],{"class":361},"#重新加载模块\n",[162,100033,100034,100036],{"class":164,"line":197},[162,100035,33478],{"class":172},[162,100037,100038],{"class":168}," importlib\n",[162,100040,100041],{"class":164,"line":228},[162,100042,100043],{"class":168},"importlib.reload(mprun_test)\n",[162,100045,100046,100048,100051,100053],{"class":164,"line":252},[162,100047,2708],{"class":172},[162,100049,100050],{"class":168},"mprun ",[162,100052,353],{"class":172},[162,100054,100055],{"class":168},"f mprun_test.fun_test mprun_test.fun_test()\n",[3219,100057,100058],{},"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":158,"searchDepth":197,"depth":197,"links":100060},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":99967,"description":3241},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":100067,"title":100068,"body":100069,"description":3241,"extension":3242,"meta":100086,"navigation":300,"path":100087,"seo":100088,"stem":100089,"__hash__":100090},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":100070,"toc":100084},[100071,100074,100079],[10,100072,100068],{"id":100073},"_3一维数组的索引和切片",[19,100075,100076],{},[4602,100077],{"alt":158,"src":100078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,100080,100081],{},[4602,100082],{"alt":158,"src":100083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":158,"searchDepth":197,"depth":197,"links":100085},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":100068,"description":3241},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":100092,"title":100093,"body":100094,"description":3241,"extension":3242,"meta":100576,"navigation":300,"path":100577,"seo":100578,"stem":100579,"__hash__":100580},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":100095,"toc":100574},[100096,100099,100102,100107,100140,100143,100181,100184,100218,100221,100326,100329,100365,100368,100469,100472,100523,100526,100568,100571],[10,100097,100093],{"id":100098},"_4二维数组的索引与切片",[19,100100,100101],{},"①获取指定单个元素",[19,100103,100104],{},[4602,100105],{"alt":158,"src":100106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[153,100108,100110],{"className":155,"code":100109,"language":157,"meta":158,"style":158},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[71,100111,100112,100117,100122,100127],{"__ignoreMap":158},[162,100113,100114],{"class":164,"line":165},[162,100115,100116],{"class":361},"#获取元素9\n",[162,100118,100119],{"class":164,"line":197},[162,100120,100121],{"class":361},"#先获取所在行，再获取所在列\n",[162,100123,100124],{"class":164,"line":228},[162,100125,100126],{"class":361},"#数组[行索引号，列索引号]\n",[162,100128,100129,100132,100134,100136,100138],{"class":164,"line":252},[162,100130,100131],{"class":168},"a[",[162,100133,208],{"class":207},[162,100135,3670],{"class":168},[162,100137,213],{"class":207},[162,100139,194],{"class":168},[19,100141,100142],{},"②获取整行元素",[153,100144,100146],{"className":155,"code":100145,"language":157,"meta":158,"style":158},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[71,100147,100148,100153,100158,100166,100171],{"__ignoreMap":158},[162,100149,100150],{"class":164,"line":165},[162,100151,100152],{"class":361},"#获取整行 数组[行索引号]\n",[162,100154,100155],{"class":164,"line":197},[162,100156,100157],{"class":361},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[162,100159,100160,100162,100164],{"class":164,"line":228},[162,100161,100131],{"class":168},[162,100163,213],{"class":207},[162,100165,194],{"class":168},[162,100167,100168],{"class":164,"line":252},[162,100169,100170],{"class":361},"#也可以负索引获取一行\n",[162,100172,100173,100175,100177,100179],{"class":164,"line":328},[162,100174,100131],{"class":168},[162,100176,353],{"class":172},[162,100178,208],{"class":207},[162,100180,194],{"class":168},[19,100182,100183],{},"③获取整列元素",[153,100185,100187],{"className":155,"code":100186,"language":157,"meta":158,"style":158},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[71,100188,100189,100194,100203,100208],{"__ignoreMap":158},[162,100190,100191],{"class":164,"line":165},[162,100192,100193],{"class":361},"#获取整列 数组名[:,列索引]\n",[162,100195,100196,100199,100201],{"class":164,"line":197},[162,100197,100198],{"class":168},"a[:,",[162,100200,213],{"class":207},[162,100202,194],{"class":168},[162,100204,100205],{"class":164,"line":228},[162,100206,100207],{"class":361},"#也可以负索引获取一列\n",[162,100209,100210,100212,100214,100216],{"class":164,"line":252},[162,100211,100198],{"class":168},[162,100213,353],{"class":172},[162,100215,208],{"class":207},[162,100217,194],{"class":168},[19,100219,100220],{},"④部分行部分列的元素",[153,100222,100224],{"className":155,"code":100223,"language":157,"meta":158,"style":158},"#部分行部分列 数组名[行切片，列切片]\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",[71,100225,100226,100231,100241,100245,100249,100254,100259,100263,100275,100279,100283,100288,100293,100298,100303,100307,100312],{"__ignoreMap":158},[162,100227,100228],{"class":164,"line":165},[162,100229,100230],{"class":361},"#部分行部分列 数组名[行切片，列切片]\n",[162,100232,100233,100236,100238],{"class":164,"line":197},[162,100234,100235],{"class":168},"a[:",[162,100237,213],{"class":207},[162,100239,100240],{"class":168},",:]\n",[162,100242,100243],{"class":164,"line":228},[162,100244,96629],{"class":361},[162,100246,100247],{"class":164,"line":252},[162,100248,96993],{"class":179},[162,100250,100251],{"class":164,"line":328},[162,100252,100253],{"class":179},"array([[ 1,  2,  3,  4,  5,  6],\n",[162,100255,100256],{"class":164,"line":466},[162,100257,100258],{"class":179},"       [ 7,  8,  9, 10, 11, 12]])\n",[162,100260,100261],{"class":164,"line":471},[162,100262,96993],{"class":179},[162,100264,100265,100267,100269,100271,100273],{"class":164,"line":687},[162,100266,100198],{"class":168},[162,100268,208],{"class":207},[162,100270,1332],{"class":168},[162,100272,223],{"class":207},[162,100274,194],{"class":168},[162,100276,100277],{"class":164,"line":692},[162,100278,96629],{"class":361},[162,100280,100281],{"class":164,"line":698},[162,100282,96993],{"class":179},[162,100284,100285],{"class":164,"line":2955},[162,100286,100287],{"class":179},"array([[ 2,  3,  4],\n",[162,100289,100290],{"class":164,"line":2960},[162,100291,100292],{"class":179},"       [ 8,  9, 10],\n",[162,100294,100295],{"class":164,"line":2971},[162,100296,100297],{"class":179},"       [14, 15, 16],\n",[162,100299,100300],{"class":164,"line":2984},[162,100301,100302],{"class":179},"       [20, 21, 22]])\n",[162,100304,100305],{"class":164,"line":2989},[162,100306,96993],{"class":179},[162,100308,100309],{"class":164,"line":3011},[162,100310,100311],{"class":361},"#对列行同时进行切片，使用了step参数\n",[162,100313,100314,100317,100319,100322,100324],{"class":164,"line":3022},[162,100315,100316],{"class":168},"a[::",[162,100318,213],{"class":207},[162,100320,100321],{"class":168},",::",[162,100323,213],{"class":207},[162,100325,194],{"class":168},[19,100327,100328],{},"⑤同时获取两个元素",[153,100330,100332],{"className":155,"code":100331,"language":157,"meta":158,"style":158},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[71,100333,100334,100339,100344],{"__ignoreMap":158},[162,100335,100336],{"class":164,"line":165},[162,100337,100338],{"class":361},"#同时获取第三行第二列，第四行第一列\n",[162,100340,100341],{"class":164,"line":197},[162,100342,100343],{"class":361},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[162,100345,100346,100349,100351,100353,100355,100357,100359,100361,100363],{"class":164,"line":228},[162,100347,100348],{"class":168},"a[(",[162,100350,213],{"class":207},[162,100352,3670],{"class":168},[162,100354,218],{"class":207},[162,100356,45322],{"class":168},[162,100358,208],{"class":207},[162,100360,3670],{"class":168},[162,100362,312],{"class":207},[162,100364,2658],{"class":168},[19,100366,100367],{},"⑥切片，对行进行反向获取",[153,100369,100371],{"className":155,"code":100370,"language":157,"meta":158,"style":158},"#切片 对所有行进行反向获取\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",[71,100372,100373,100378,100388,100392,100396,100401,100406,100411,100416,100420,100425,100441,100445,100450,100455,100460,100465],{"__ignoreMap":158},[162,100374,100375],{"class":164,"line":165},[162,100376,100377],{"class":361},"#切片 对所有行进行反向获取\n",[162,100379,100380,100382,100384,100386],{"class":164,"line":197},[162,100381,100316],{"class":168},[162,100383,353],{"class":172},[162,100385,208],{"class":207},[162,100387,194],{"class":168},[162,100389,100390],{"class":164,"line":228},[162,100391,96629],{"class":361},[162,100393,100394],{"class":164,"line":252},[162,100395,96993],{"class":179},[162,100397,100398],{"class":164,"line":328},[162,100399,100400],{"class":179},"array([[19, 20, 21, 22, 23, 24],\n",[162,100402,100403],{"class":164,"line":466},[162,100404,100405],{"class":179},"       [13, 14, 15, 16, 17, 18],\n",[162,100407,100408],{"class":164,"line":471},[162,100409,100410],{"class":179},"       [ 7,  8,  9, 10, 11, 12],\n",[162,100412,100413],{"class":164,"line":687},[162,100414,100415],{"class":179},"       [ 1,  2,  3,  4,  5,  6]])\n",[162,100417,100418],{"class":164,"line":692},[162,100419,96993],{"class":179},[162,100421,100422],{"class":164,"line":698},[162,100423,100424],{"class":361},"#对行列都进行反向切片获取\n",[162,100426,100427,100429,100431,100433,100435,100437,100439],{"class":164,"line":2955},[162,100428,100316],{"class":168},[162,100430,353],{"class":172},[162,100432,208],{"class":207},[162,100434,100321],{"class":168},[162,100436,353],{"class":172},[162,100438,208],{"class":207},[162,100440,194],{"class":168},[162,100442,100443],{"class":164,"line":2960},[162,100444,96993],{"class":179},[162,100446,100447],{"class":164,"line":2971},[162,100448,100449],{"class":179},"array([[24, 23, 22, 21, 20, 19],\n",[162,100451,100452],{"class":164,"line":2984},[162,100453,100454],{"class":179},"       [18, 17, 16, 15, 14, 13],\n",[162,100456,100457],{"class":164,"line":2989},[162,100458,100459],{"class":179},"       [12, 11, 10,  9,  8,  7],\n",[162,100461,100462],{"class":164,"line":3011},[162,100463,100464],{"class":179},"       [ 6,  5,  4,  3,  2,  1]])\n",[162,100466,100467],{"class":164,"line":3022},[162,100468,96993],{"class":179},[19,100470,100471],{},"⑦修改元素",[153,100473,100475],{"className":155,"code":100474,"language":157,"meta":158,"style":158},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[71,100476,100477,100482,100500,100505],{"__ignoreMap":158},[162,100478,100479],{"class":164,"line":165},[162,100480,100481],{"class":361},"#获取前两行和前两列\n",[162,100483,100484,100487,100489,100491,100493,100496,100498],{"class":164,"line":197},[162,100485,100486],{"class":168},"sub_a",[162,100488,173],{"class":172},[162,100490,100235],{"class":168},[162,100492,213],{"class":207},[162,100494,100495],{"class":168},",:",[162,100497,213],{"class":207},[162,100499,194],{"class":168},[162,100501,100502],{"class":164,"line":228},[162,100503,100504],{"class":361},"#修改sub_a第一个元素的值\n",[162,100506,100507,100510,100512,100514,100516,100518,100520],{"class":164,"line":252},[162,100508,100509],{"class":168},"sub_a[",[162,100511,312],{"class":207},[162,100513,3670],{"class":168},[162,100515,312],{"class":207},[162,100517,3120],{"class":168},[162,100519,173],{"class":172},[162,100521,100522],{"class":207},"100\n",[19,100524,100525],{},"⑧数组复制copy()",[153,100527,100529],{"className":155,"code":100528,"language":157,"meta":158,"style":158},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[71,100530,100531,100536,100546,100551],{"__ignoreMap":158},[162,100532,100533],{"class":164,"line":165},[162,100534,100535],{"class":361},"#数组复制\n",[162,100537,100538,100541,100543],{"class":164,"line":197},[162,100539,100540],{"class":168},"copy_a",[162,100542,173],{"class":172},[162,100544,100545],{"class":168},"np.copy(sub_a)\n",[162,100547,100548],{"class":164,"line":228},[162,100549,100550],{"class":361},"#修改copy_a后不影响原数组\n",[162,100552,100553,100556,100558,100560,100562,100564,100566],{"class":164,"line":252},[162,100554,100555],{"class":168},"copy_a[",[162,100557,312],{"class":207},[162,100559,3670],{"class":168},[162,100561,312],{"class":207},[162,100563,3120],{"class":168},[162,100565,173],{"class":172},[162,100567,100522],{"class":207},[19,100569,100570],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[3219,100572,100573],{},"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":158,"searchDepth":197,"depth":197,"links":100575},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":100093,"description":3241},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":100582,"title":100583,"body":100584,"description":3241,"extension":3242,"meta":101076,"navigation":300,"path":101077,"seo":101078,"stem":101079,"__hash__":101080},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":100585,"toc":101068},[100586,100589,100593,100596,100599,100652,100655,100680,100683,100702,100722,100725,100741,100745,100791,100795,100837,100841,100844,100847,100850,100853,100856,100918,100978,100982,100985,101042,101046,101051,101060,101065],[10,100587,100583],{"id":100588},"_5改变数组的维度",[14,100590,100592],{"id":100591},"_51-使用reshape","5.1 使用reshape()",[19,100594,100595],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,100597,100598],{},"①一维数组转换为二维数组",[153,100600,100602],{"className":155,"code":100601,"language":157,"meta":158,"style":158},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[71,100603,100604,100620,100625,100630,100635],{"__ignoreMap":158},[162,100605,100606,100608,100610,100612,100614,100616,100618],{"class":164,"line":165},[162,100607,3538],{"class":168},[162,100609,173],{"class":172},[162,100611,96067],{"class":168},[162,100613,208],{"class":207},[162,100615,3670],{"class":168},[162,100617,3813],{"class":207},[162,100619,434],{"class":168},[162,100621,100622],{"class":164,"line":197},[162,100623,100624],{"class":361},"#将一维数组进行转换\n",[162,100626,100627],{"class":164,"line":228},[162,100628,100629],{"class":361},"#注意点：元素个数不可以变\n",[162,100631,100632],{"class":164,"line":252},[162,100633,100634],{"class":361},"#转换维度要保持一致，不一致就异常！！！\n",[162,100636,100637,100639,100641,100644,100646,100648,100650],{"class":164,"line":328},[162,100638,96371],{"class":168},[162,100640,173],{"class":172},[162,100642,100643],{"class":168},"a.reshape(",[162,100645,213],{"class":207},[162,100647,3670],{"class":168},[162,100649,1314],{"class":207},[162,100651,434],{"class":168},[19,100653,100654],{},"②一维数组转换为三维数组",[153,100656,100658],{"className":155,"code":100657,"language":157,"meta":158,"style":158},"aaa=a.reshape(2,3,2)\n",[71,100659,100660],{"__ignoreMap":158},[162,100661,100662,100664,100666,100668,100670,100672,100674,100676,100678],{"class":164,"line":165},[162,100663,98586],{"class":168},[162,100665,173],{"class":172},[162,100667,100643],{"class":168},[162,100669,213],{"class":207},[162,100671,3670],{"class":168},[162,100673,218],{"class":207},[162,100675,3670],{"class":168},[162,100677,213],{"class":207},[162,100679,434],{"class":168},[19,100681,100682],{},"③二维数组转化为一维数组",[153,100684,100686],{"className":155,"code":100685,"language":157,"meta":158,"style":158},"#知道元素个数：\naa.reshape(12)\n",[71,100687,100688,100693],{"__ignoreMap":158},[162,100689,100690],{"class":164,"line":165},[162,100691,100692],{"class":361},"#知道元素个数：\n",[162,100694,100695,100698,100700],{"class":164,"line":197},[162,100696,100697],{"class":168},"aa.reshape(",[162,100699,3788],{"class":207},[162,100701,434],{"class":168},[153,100703,100705],{"className":155,"code":100704,"language":157,"meta":158,"style":158},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[71,100706,100707,100712],{"__ignoreMap":158},[162,100708,100709],{"class":164,"line":165},[162,100710,100711],{"class":361},"#不知道元素个数，参数传递-1\n",[162,100713,100714,100716,100718,100720],{"class":164,"line":197},[162,100715,100697],{"class":168},[162,100717,353],{"class":172},[162,100719,208],{"class":207},[162,100721,434],{"class":168},[19,100723,100724],{},"④三维数组转换为一维数组",[153,100726,100728],{"className":155,"code":100727,"language":157,"meta":158,"style":158},"aaa.reshape(-1)\n",[71,100729,100730],{"__ignoreMap":158},[162,100731,100732,100735,100737,100739],{"class":164,"line":165},[162,100733,100734],{"class":168},"aaa.reshape(",[162,100736,353],{"class":172},[162,100738,208],{"class":207},[162,100740,434],{"class":168},[14,100742,100744],{"id":100743},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[153,100746,100748],{"className":155,"code":100747,"language":157,"meta":158,"style":158},"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",[71,100749,100750,100777,100782,100786],{"__ignoreMap":158},[162,100751,100752,100754,100756,100758,100760,100762,100764,100766,100768,100770,100772,100774],{"class":164,"line":165},[162,100753,96371],{"class":168},[162,100755,173],{"class":172},[162,100757,96067],{"class":168},[162,100759,208],{"class":207},[162,100761,3670],{"class":168},[162,100763,3813],{"class":207},[162,100765,96072],{"class":168},[162,100767,213],{"class":207},[162,100769,3670],{"class":168},[162,100771,1314],{"class":207},[162,100773,3720],{"class":168},[162,100775,100776],{"class":361},"#转换为2行6列的数组\n",[162,100778,100779],{"class":164,"line":197},[162,100780,100781],{"class":168},"aa.revel()\n",[162,100783,100784],{"class":164,"line":228},[162,100785,96629],{"class":361},[162,100787,100788],{"class":164,"line":252},[162,100789,100790],{"class":361},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,100792,100794],{"id":100793},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[153,100796,100798],{"className":155,"code":100797,"language":157,"meta":158,"style":158},"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",[71,100799,100800,100824,100829,100833],{"__ignoreMap":158},[162,100801,100802,100804,100806,100808,100810,100812,100814,100816,100818,100820,100822],{"class":164,"line":165},[162,100803,96371],{"class":168},[162,100805,173],{"class":172},[162,100807,96067],{"class":168},[162,100809,208],{"class":207},[162,100811,3670],{"class":168},[162,100813,3813],{"class":207},[162,100815,96072],{"class":168},[162,100817,213],{"class":207},[162,100819,3670],{"class":168},[162,100821,1314],{"class":207},[162,100823,434],{"class":168},[162,100825,100826],{"class":164,"line":197},[162,100827,100828],{"class":168},"aa.flatten()\n",[162,100830,100831],{"class":164,"line":228},[162,100832,96629],{"class":361},[162,100834,100835],{"class":164,"line":252},[162,100836,100790],{"class":361},[14,100838,100840],{"id":100839},"_54-使用resize","5.4 使用resize()",[19,100842,100843],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,100845,100846],{},"通过resize方法可以改变数组的维度",[19,100848,100849],{},"#resize修改数组维度",[19,100851,100852],{},"#以元组的形式指定形状",[19,100854,100855],{},"#改变的是原数组",[153,100857,100859],{"className":155,"code":100858,"language":157,"meta":158,"style":158},"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",[71,100860,100861,100877,100897,100910,100914],{"__ignoreMap":158},[162,100862,100863,100865,100867,100869,100871,100873,100875],{"class":164,"line":165},[162,100864,3538],{"class":168},[162,100866,173],{"class":172},[162,100868,96067],{"class":168},[162,100870,208],{"class":207},[162,100872,3670],{"class":168},[162,100874,3813],{"class":207},[162,100876,434],{"class":168},[162,100878,100879,100882,100884,100886,100888,100890,100892,100894],{"class":164,"line":197},[162,100880,100881],{"class":168},"a.shape",[162,100883,173],{"class":172},[162,100885,604],{"class":168},[162,100887,213],{"class":207},[162,100889,3670],{"class":168},[162,100891,1314],{"class":207},[162,100893,3720],{"class":168},[162,100895,100896],{"class":361},"#改变了原数组\n",[162,100898,100899,100901,100903,100906,100908],{"class":164,"line":228},[162,100900,3538],{"class":168},[162,100902,173],{"class":172},[162,100904,100905],{"class":168},"resize((",[162,100907,3788],{"class":207},[162,100909,586],{"class":168},[162,100911,100912],{"class":164,"line":252},[162,100913,96629],{"class":361},[162,100915,100916],{"class":164,"line":328},[162,100917,100790],{"class":361},[153,100919,100921],{"className":155,"code":100920,"language":157,"meta":158,"style":158},"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",[71,100922,100923,100936,100940,100944,100949,100954,100959,100964,100969,100974],{"__ignoreMap":158},[162,100924,100925,100928,100930,100932,100934],{"class":164,"line":165},[162,100926,100927],{"class":168},"a.resize((",[162,100929,1314],{"class":207},[162,100931,3670],{"class":168},[162,100933,213],{"class":207},[162,100935,586],{"class":168},[162,100937,100938],{"class":164,"line":197},[162,100939,96629],{"class":361},[162,100941,100942],{"class":164,"line":228},[162,100943,96993],{"class":179},[162,100945,100946],{"class":164,"line":252},[162,100947,100948],{"class":179},"array([[ 1,  2],\n",[162,100950,100951],{"class":164,"line":328},[162,100952,100953],{"class":179},"       [ 3,  4],\n",[162,100955,100956],{"class":164,"line":466},[162,100957,100958],{"class":179},"       [ 5,  6],\n",[162,100960,100961],{"class":164,"line":471},[162,100962,100963],{"class":179},"       [ 7,  8],\n",[162,100965,100966],{"class":164,"line":687},[162,100967,100968],{"class":179},"       [ 9, 10],\n",[162,100970,100971],{"class":164,"line":692},[162,100972,100973],{"class":179},"       [11, 12]])\n",[162,100975,100976],{"class":164,"line":698},[162,100977,96993],{"class":179},[14,100979,100981],{"id":100980},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,100983,100984],{},"改变了原数组",[153,100986,100988],{"className":155,"code":100987,"language":157,"meta":158,"style":158},"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",[71,100989,100990,101006,101022,101026,101030,101034,101038],{"__ignoreMap":158},[162,100991,100992,100994,100996,100998,101000,101002,101004],{"class":164,"line":165},[162,100993,3538],{"class":168},[162,100995,173],{"class":172},[162,100997,96067],{"class":168},[162,100999,208],{"class":207},[162,101001,3670],{"class":168},[162,101003,3813],{"class":207},[162,101005,434],{"class":168},[162,101007,101008,101010,101012,101014,101016,101018,101020],{"class":164,"line":197},[162,101009,100881],{"class":168},[162,101011,173],{"class":172},[162,101013,604],{"class":168},[162,101015,213],{"class":207},[162,101017,3670],{"class":168},[162,101019,1314],{"class":207},[162,101021,434],{"class":168},[162,101023,101024],{"class":164,"line":228},[162,101025,96629],{"class":361},[162,101027,101028],{"class":164,"line":252},[162,101029,96993],{"class":179},[162,101031,101032],{"class":164,"line":328},[162,101033,100253],{"class":179},[162,101035,101036],{"class":164,"line":466},[162,101037,100258],{"class":179},[162,101039,101040],{"class":164,"line":471},[162,101041,96993],{"class":179},[14,101043,101045],{"id":101044},"_56-重要比较","5.6 重要比较：",[19,101047,101048],{},[4602,101049],{"alt":158,"src":101050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,101052,101053,101054,101056,101057,101059],{},"口诀：NumPy 函数要么用 ",[71,101055,99028],{},"，要么用 ",[71,101058,34577],{},"，创建结构用 shape，造数据用 size",[19,101061,101062],{},[4602,101063],{"alt":158,"src":101064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[3219,101066,101067],{},"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":158,"searchDepth":197,"depth":197,"links":101069},[101070,101071,101072,101073,101074,101075],{"id":100591,"depth":197,"text":100592},{"id":100743,"depth":197,"text":100744},{"id":100793,"depth":197,"text":100794},{"id":100839,"depth":197,"text":100840},{"id":100980,"depth":197,"text":100981},{"id":101044,"depth":197,"text":101045},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":100583,"description":3241},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":101082,"title":101083,"body":101084,"description":3241,"extension":3242,"meta":102156,"navigation":300,"path":102157,"seo":102158,"stem":102159,"__hash__":102160},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":101085,"toc":102150},[101086,101089,101093,101096,101099,101102,101167,101170,101210,101213,101295,101298,101303,101325,101327,101332,101337,101340,101343,101498,101501,101703,101707,101710,101713,101781,101783,101788,101791,101794,101874,101878,101881,101883,101956,101958,101963,101965,102045,102049,102052,102055,102058,102061,102064,102067,102147],[10,101087,101083],{"id":101088},"_6数组的拼接",[14,101090,101092],{"id":101091},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,101094,101095],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,101097,101098],{},"函数内部传两个数列构成的数列或者元组",[19,101100,101101],{},"①一维数组的拼接",[153,101103,101105],{"className":155,"code":101104,"language":157,"meta":158,"style":158},"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",[71,101106,101107,101127,101147,101152,101157,101162],{"__ignoreMap":158},[162,101108,101109,101111,101113,101115,101117,101119,101121,101123,101125],{"class":164,"line":165},[162,101110,3538],{"class":168},[162,101112,173],{"class":172},[162,101114,96089],{"class":168},[162,101116,208],{"class":207},[162,101118,3670],{"class":168},[162,101120,213],{"class":207},[162,101122,3670],{"class":168},[162,101124,218],{"class":207},[162,101126,315],{"class":168},[162,101128,101129,101131,101133,101135,101137,101139,101141,101143,101145],{"class":164,"line":197},[162,101130,3561],{"class":168},[162,101132,173],{"class":172},[162,101134,96089],{"class":168},[162,101136,223],{"class":207},[162,101138,3670],{"class":168},[162,101140,637],{"class":207},[162,101142,3670],{"class":168},[162,101144,1314],{"class":207},[162,101146,315],{"class":168},[162,101148,101149],{"class":164,"line":228},[162,101150,101151],{"class":361},"#调用concatenate进行数组拼接\n",[162,101153,101154],{"class":164,"line":252},[162,101155,101156],{"class":168},"np.concatenate((a,b))\n",[162,101158,101159],{"class":164,"line":328},[162,101160,101161],{"class":361},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[162,101163,101164],{"class":164,"line":466},[162,101165,101166],{"class":361},"#np.concatenate([a,b])\n",[19,101168,101169],{},"②一维多个数组拼接",[153,101171,101173],{"className":155,"code":101172,"language":157,"meta":158,"style":158},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[71,101174,101175,101180,101200,101205],{"__ignoreMap":158},[162,101176,101177],{"class":164,"line":165},[162,101178,101179],{"class":361},"#也可以多个数组进行拼接\n",[162,101181,101182,101184,101186,101188,101190,101192,101194,101196,101198],{"class":164,"line":197},[162,101183,3586],{"class":168},[162,101185,173],{"class":172},[162,101187,96089],{"class":168},[162,101189,1006],{"class":207},[162,101191,3670],{"class":168},[162,101193,3762],{"class":207},[162,101195,3670],{"class":168},[162,101197,3813],{"class":207},[162,101199,315],{"class":168},[162,101201,101202],{"class":164,"line":228},[162,101203,101204],{"class":168},"c\n",[162,101206,101207],{"class":164,"line":252},[162,101208,101209],{"class":168},"np.concatenate((a,b,c))\n",[19,101211,101212],{},"③二维数组拼接",[153,101214,101216],{"className":155,"code":101215,"language":157,"meta":158,"style":158},"#二维数组使用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",[71,101217,101218,101223,101247,101272,101277,101282],{"__ignoreMap":158},[162,101219,101220],{"class":164,"line":165},[162,101221,101222],{"class":361},"#二维数组使用concatenate进行拼接\n",[162,101224,101225,101227,101229,101231,101233,101235,101237,101239,101241,101243,101245],{"class":164,"line":197},[162,101226,96371],{"class":168},[162,101228,173],{"class":172},[162,101230,96067],{"class":168},[162,101232,208],{"class":207},[162,101234,3670],{"class":168},[162,101236,3813],{"class":207},[162,101238,96072],{"class":168},[162,101240,218],{"class":207},[162,101242,3670],{"class":168},[162,101244,223],{"class":207},[162,101246,434],{"class":168},[162,101248,101249,101252,101254,101256,101258,101260,101262,101264,101266,101268,101270],{"class":164,"line":228},[162,101250,101251],{"class":168},"bb",[162,101253,173],{"class":172},[162,101255,96067],{"class":168},[162,101257,2698],{"class":207},[162,101259,3670],{"class":168},[162,101261,3928],{"class":207},[162,101263,96072],{"class":168},[162,101265,218],{"class":207},[162,101267,3670],{"class":168},[162,101269,223],{"class":207},[162,101271,434],{"class":168},[162,101273,101274],{"class":164,"line":252},[162,101275,101276],{"class":361},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[162,101278,101279],{"class":164,"line":328},[162,101280,101281],{"class":361},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[162,101283,101284,101287,101289,101291,101293],{"class":164,"line":466},[162,101285,101286],{"class":168},"np.concatenate((aa,bb),",[162,101288,50587],{"class":671},[162,101290,173],{"class":172},[162,101292,312],{"class":207},[162,101294,434],{"class":168},[19,101296,101297],{},"结果：",[19,101299,101300],{},[4602,101301],{"alt":158,"src":101302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[153,101304,101306],{"className":155,"code":101305,"language":157,"meta":158,"style":158},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[71,101307,101308,101313],{"__ignoreMap":158},[162,101309,101310],{"class":164,"line":165},[162,101311,101312],{"class":361},"#指定axis为1进行拼接\n",[162,101314,101315,101317,101319,101321,101323],{"class":164,"line":197},[162,101316,101286],{"class":168},[162,101318,50587],{"class":671},[162,101320,173],{"class":172},[162,101322,208],{"class":207},[162,101324,434],{"class":168},[19,101326,101297],{},[19,101328,101329],{},[4602,101330],{"alt":158,"src":101331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,101333,101334],{},[3453,101335,101336],{},"二维数组总结：0竖着方向，1横着方向",[19,101338,101339],{},"④三维数组拼接",[19,101341,101342],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[153,101344,101346],{"className":155,"code":101345,"language":157,"meta":158,"style":158},"#两个三行六列\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",[71,101347,101348,101353,101381,101411,101416,101433,101438,101443,101448,101465,101470,101475,101480,101493],{"__ignoreMap":158},[162,101349,101350],{"class":164,"line":165},[162,101351,101352],{"class":361},"#两个三行六列\n",[162,101354,101355,101357,101359,101361,101363,101365,101367,101369,101371,101373,101375,101377,101379],{"class":164,"line":197},[162,101356,98586],{"class":168},[162,101358,173],{"class":172},[162,101360,96067],{"class":168},[162,101362,208],{"class":207},[162,101364,3670],{"class":168},[162,101366,3621],{"class":207},[162,101368,96072],{"class":168},[162,101370,213],{"class":207},[162,101372,3670],{"class":168},[162,101374,218],{"class":207},[162,101376,3670],{"class":168},[162,101378,1314],{"class":207},[162,101380,434],{"class":168},[162,101382,101383,101386,101388,101390,101392,101394,101397,101399,101401,101403,101405,101407,101409],{"class":164,"line":228},[162,101384,101385],{"class":168},"bbb",[162,101387,173],{"class":172},[162,101389,96067],{"class":168},[162,101391,2698],{"class":207},[162,101393,3670],{"class":168},[162,101395,101396],{"class":207},"137",[162,101398,96072],{"class":168},[162,101400,213],{"class":207},[162,101402,3670],{"class":168},[162,101404,218],{"class":207},[162,101406,3670],{"class":168},[162,101408,1314],{"class":207},[162,101410,434],{"class":168},[162,101412,101413],{"class":164,"line":252},[162,101414,101415],{"class":361},"#axis=0\n",[162,101417,101418,101420,101422,101425,101427,101429,101431],{"class":164,"line":328},[162,101419,3979],{"class":168},[162,101421,173],{"class":172},[162,101423,101424],{"class":168},"np.concatenate((aaa,bbb),",[162,101426,50587],{"class":671},[162,101428,173],{"class":172},[162,101430,312],{"class":207},[162,101432,434],{"class":168},[162,101434,101435],{"class":164,"line":466},[162,101436,101437],{"class":168},"s.shape\n",[162,101439,101440],{"class":164,"line":471},[162,101441,101442],{"class":361},"#输出：(4,3,6)\n",[162,101444,101445],{"class":164,"line":687},[162,101446,101447],{"class":361},"#axis=1\n",[162,101449,101450,101453,101455,101457,101459,101461,101463],{"class":164,"line":692},[162,101451,101452],{"class":168},"ss",[162,101454,173],{"class":172},[162,101456,101424],{"class":168},[162,101458,50587],{"class":671},[162,101460,173],{"class":172},[162,101462,208],{"class":207},[162,101464,434],{"class":168},[162,101466,101467],{"class":164,"line":698},[162,101468,101469],{"class":168},"ss.shape\n",[162,101471,101472],{"class":164,"line":2955},[162,101473,101474],{"class":361},"#输出：(2,6,6)\n",[162,101476,101477],{"class":164,"line":2960},[162,101478,101479],{"class":361},"#axis=2\n",[162,101481,101482,101484,101486,101488,101490],{"class":164,"line":2971},[162,101483,101424],{"class":168},[162,101485,50587],{"class":671},[162,101487,173],{"class":172},[162,101489,213],{"class":207},[162,101491,101492],{"class":168},").shape\n",[162,101494,101495],{"class":164,"line":2984},[162,101496,101497],{"class":361},"#输出：（2，3，12）\n",[19,101499,101500],{},"⑤四维数组拼接",[153,101502,101504],{"className":155,"code":101503,"language":157,"meta":158,"style":158},"#两个三行六列\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",[71,101505,101506,101510,101538,101566,101591,101617,101621,101634,101639,101643,101655,101660,101664,101676,101681,101686,101698],{"__ignoreMap":158},[162,101507,101508],{"class":164,"line":165},[162,101509,101352],{"class":361},[162,101511,101512,101514,101516,101518,101520,101522,101524,101526,101528,101530,101532,101534,101536],{"class":164,"line":197},[162,101513,98586],{"class":168},[162,101515,173],{"class":172},[162,101517,96067],{"class":168},[162,101519,208],{"class":207},[162,101521,3670],{"class":168},[162,101523,3621],{"class":207},[162,101525,96072],{"class":168},[162,101527,213],{"class":207},[162,101529,3670],{"class":168},[162,101531,218],{"class":207},[162,101533,3670],{"class":168},[162,101535,1314],{"class":207},[162,101537,434],{"class":168},[162,101539,101540,101542,101544,101546,101548,101550,101552,101554,101556,101558,101560,101562,101564],{"class":164,"line":228},[162,101541,101385],{"class":168},[162,101543,173],{"class":172},[162,101545,96067],{"class":168},[162,101547,2698],{"class":207},[162,101549,3670],{"class":168},[162,101551,101396],{"class":207},[162,101553,96072],{"class":168},[162,101555,213],{"class":207},[162,101557,3670],{"class":168},[162,101559,218],{"class":207},[162,101561,3670],{"class":168},[162,101563,1314],{"class":207},[162,101565,434],{"class":168},[162,101567,101568,101571,101573,101575,101577,101579,101581,101583,101585,101587,101589],{"class":164,"line":252},[162,101569,101570],{"class":168},"aaaa",[162,101572,173],{"class":172},[162,101574,100734],{"class":168},[162,101576,213],{"class":207},[162,101578,3670],{"class":168},[162,101580,218],{"class":207},[162,101582,3670],{"class":168},[162,101584,218],{"class":207},[162,101586,3670],{"class":168},[162,101588,213],{"class":207},[162,101590,434],{"class":168},[162,101592,101593,101596,101598,101601,101603,101605,101607,101609,101611,101613,101615],{"class":164,"line":328},[162,101594,101595],{"class":168},"bbbb",[162,101597,173],{"class":172},[162,101599,101600],{"class":168},"bbb.reshape(",[162,101602,213],{"class":207},[162,101604,3670],{"class":168},[162,101606,218],{"class":207},[162,101608,3670],{"class":168},[162,101610,218],{"class":207},[162,101612,3670],{"class":168},[162,101614,213],{"class":207},[162,101616,434],{"class":168},[162,101618,101619],{"class":164,"line":466},[162,101620,101415],{"class":361},[162,101622,101623,101626,101628,101630,101632],{"class":164,"line":471},[162,101624,101625],{"class":168},"np.concatenate((aaaa,bbbb),",[162,101627,50587],{"class":671},[162,101629,173],{"class":172},[162,101631,312],{"class":207},[162,101633,101492],{"class":168},[162,101635,101636],{"class":164,"line":687},[162,101637,101638],{"class":361},"#结果：（4，3，3，2）\n",[162,101640,101641],{"class":164,"line":692},[162,101642,101447],{"class":361},[162,101644,101645,101647,101649,101651,101653],{"class":164,"line":698},[162,101646,101625],{"class":168},[162,101648,50587],{"class":671},[162,101650,173],{"class":172},[162,101652,208],{"class":207},[162,101654,101492],{"class":168},[162,101656,101657],{"class":164,"line":2955},[162,101658,101659],{"class":361},"#结果：（2，6，3，2）\n",[162,101661,101662],{"class":164,"line":2960},[162,101663,101479],{"class":361},[162,101665,101666,101668,101670,101672,101674],{"class":164,"line":2971},[162,101667,101625],{"class":168},[162,101669,50587],{"class":671},[162,101671,173],{"class":172},[162,101673,213],{"class":207},[162,101675,101492],{"class":168},[162,101677,101678],{"class":164,"line":2984},[162,101679,101680],{"class":361},"#结果：（2，3，6，2）\n",[162,101682,101683],{"class":164,"line":2989},[162,101684,101685],{"class":361},"#axis=3\n",[162,101687,101688,101690,101692,101694,101696],{"class":164,"line":3011},[162,101689,101625],{"class":168},[162,101691,50587],{"class":671},[162,101693,173],{"class":172},[162,101695,218],{"class":207},[162,101697,101492],{"class":168},[162,101699,101700],{"class":164,"line":3022},[162,101701,101702],{"class":361},"#结果：（2，3，3，4）\n",[14,101704,101706],{"id":101705},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,101708,101709],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,101711,101712],{},"①二维数组",[153,101714,101716],{"className":155,"code":101715,"language":157,"meta":158,"style":158},"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",[71,101717,101718,101742,101766,101771,101776],{"__ignoreMap":158},[162,101719,101720,101722,101724,101726,101728,101730,101732,101734,101736,101738,101740],{"class":164,"line":165},[162,101721,96371],{"class":168},[162,101723,173],{"class":172},[162,101725,96067],{"class":168},[162,101727,208],{"class":207},[162,101729,3670],{"class":168},[162,101731,3813],{"class":207},[162,101733,96072],{"class":168},[162,101735,218],{"class":207},[162,101737,3670],{"class":168},[162,101739,223],{"class":207},[162,101741,434],{"class":168},[162,101743,101744,101746,101748,101750,101752,101754,101756,101758,101760,101762,101764],{"class":164,"line":197},[162,101745,101251],{"class":168},[162,101747,173],{"class":172},[162,101749,96067],{"class":168},[162,101751,2698],{"class":207},[162,101753,3670],{"class":168},[162,101755,3928],{"class":207},[162,101757,96072],{"class":168},[162,101759,218],{"class":207},[162,101761,3670],{"class":168},[162,101763,223],{"class":207},[162,101765,434],{"class":168},[162,101767,101768],{"class":164,"line":228},[162,101769,101770],{"class":168},"np.hstack((aa,bb))\n",[162,101772,101773],{"class":164,"line":252},[162,101774,101775],{"class":361},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[162,101777,101778],{"class":164,"line":328},[162,101779,101780],{"class":361},"#np.hstack([aa,bb])\n",[19,101782,101297],{},[19,101784,101785],{},[4602,101786],{"alt":158,"src":101787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,101789,101790],{},"等效于concatenate()函数中axis=1时的情况",[19,101792,101793],{},"②三维数组",[153,101795,101797],{"className":155,"code":101796,"language":157,"meta":158,"style":158},"#两个三行六列\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",[71,101798,101799,101803,101831,101859,101864,101869],{"__ignoreMap":158},[162,101800,101801],{"class":164,"line":165},[162,101802,101352],{"class":361},[162,101804,101805,101807,101809,101811,101813,101815,101817,101819,101821,101823,101825,101827,101829],{"class":164,"line":197},[162,101806,98586],{"class":168},[162,101808,173],{"class":172},[162,101810,96067],{"class":168},[162,101812,208],{"class":207},[162,101814,3670],{"class":168},[162,101816,3621],{"class":207},[162,101818,96072],{"class":168},[162,101820,213],{"class":207},[162,101822,3670],{"class":168},[162,101824,218],{"class":207},[162,101826,3670],{"class":168},[162,101828,1314],{"class":207},[162,101830,434],{"class":168},[162,101832,101833,101835,101837,101839,101841,101843,101845,101847,101849,101851,101853,101855,101857],{"class":164,"line":228},[162,101834,101385],{"class":168},[162,101836,173],{"class":172},[162,101838,96067],{"class":168},[162,101840,2698],{"class":207},[162,101842,3670],{"class":168},[162,101844,101396],{"class":207},[162,101846,96072],{"class":168},[162,101848,213],{"class":207},[162,101850,3670],{"class":168},[162,101852,218],{"class":207},[162,101854,3670],{"class":168},[162,101856,1314],{"class":207},[162,101858,434],{"class":168},[162,101860,101861],{"class":164,"line":252},[162,101862,101863],{"class":361},"#使用hstack\n",[162,101865,101866],{"class":164,"line":328},[162,101867,101868],{"class":168},"np.hstack((aaa,bbb)).shape\n",[162,101870,101871],{"class":164,"line":466},[162,101872,101873],{"class":361},"#输出：（2，6，6）\n",[14,101875,101877],{"id":101876},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,101879,101880],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,101882,101712],{},[153,101884,101886],{"className":155,"code":101885,"language":157,"meta":158,"style":158},"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",[71,101887,101888,101912,101936,101941,101946,101951],{"__ignoreMap":158},[162,101889,101890,101892,101894,101896,101898,101900,101902,101904,101906,101908,101910],{"class":164,"line":165},[162,101891,96371],{"class":168},[162,101893,173],{"class":172},[162,101895,96067],{"class":168},[162,101897,208],{"class":207},[162,101899,3670],{"class":168},[162,101901,3813],{"class":207},[162,101903,96072],{"class":168},[162,101905,218],{"class":207},[162,101907,3670],{"class":168},[162,101909,223],{"class":207},[162,101911,434],{"class":168},[162,101913,101914,101916,101918,101920,101922,101924,101926,101928,101930,101932,101934],{"class":164,"line":197},[162,101915,101251],{"class":168},[162,101917,173],{"class":172},[162,101919,96067],{"class":168},[162,101921,2698],{"class":207},[162,101923,3670],{"class":168},[162,101925,3928],{"class":207},[162,101927,96072],{"class":168},[162,101929,218],{"class":207},[162,101931,3670],{"class":168},[162,101933,223],{"class":207},[162,101935,434],{"class":168},[162,101937,101938],{"class":164,"line":228},[162,101939,101940],{"class":361},"#vstack 垂直方向进行堆叠\n",[162,101942,101943],{"class":164,"line":252},[162,101944,101945],{"class":168},"np.vstack((aa,bb))\n",[162,101947,101948],{"class":164,"line":328},[162,101949,101950],{"class":361},"#与hstack传的参数类似，等价于：\n",[162,101952,101953],{"class":164,"line":466},[162,101954,101955],{"class":168},"np.vstack([aa,bb])\n",[19,101957,101297],{},[19,101959,101960],{},[4602,101961],{"alt":158,"src":101962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,101964,101793],{},[153,101966,101968],{"className":155,"code":101967,"language":157,"meta":158,"style":158},"#两个三行六列\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",[71,101969,101970,101974,102002,102030,102035,102040],{"__ignoreMap":158},[162,101971,101972],{"class":164,"line":165},[162,101973,101352],{"class":361},[162,101975,101976,101978,101980,101982,101984,101986,101988,101990,101992,101994,101996,101998,102000],{"class":164,"line":197},[162,101977,98586],{"class":168},[162,101979,173],{"class":172},[162,101981,96067],{"class":168},[162,101983,208],{"class":207},[162,101985,3670],{"class":168},[162,101987,3621],{"class":207},[162,101989,96072],{"class":168},[162,101991,213],{"class":207},[162,101993,3670],{"class":168},[162,101995,218],{"class":207},[162,101997,3670],{"class":168},[162,101999,1314],{"class":207},[162,102001,434],{"class":168},[162,102003,102004,102006,102008,102010,102012,102014,102016,102018,102020,102022,102024,102026,102028],{"class":164,"line":228},[162,102005,101385],{"class":168},[162,102007,173],{"class":172},[162,102009,96067],{"class":168},[162,102011,2698],{"class":207},[162,102013,3670],{"class":168},[162,102015,101396],{"class":207},[162,102017,96072],{"class":168},[162,102019,213],{"class":207},[162,102021,3670],{"class":168},[162,102023,218],{"class":207},[162,102025,3670],{"class":168},[162,102027,1314],{"class":207},[162,102029,434],{"class":168},[162,102031,102032],{"class":164,"line":252},[162,102033,102034],{"class":361},"#使用vstack\n",[162,102036,102037],{"class":164,"line":328},[162,102038,102039],{"class":168},"np.vstack((aaa,bbb)).shape\n",[162,102041,102042],{"class":164,"line":466},[162,102043,102044],{"class":361},"#输出：（4，3，6）\n",[14,102046,102048],{"id":102047},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,102050,102051],{},"该方法是三维数组特有的方法",[19,102053,102054],{},"也就是说",[19,102056,102057],{},"一维数组拼接方法用：concatenate()",[19,102059,102060],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,102062,102063],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,102065,102066],{},"四维数组及多维数组只能用concatenate进行拼接",[153,102068,102070],{"className":155,"code":102069,"language":157,"meta":158,"style":158},"#两个三行六列\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",[71,102071,102072,102076,102104,102132,102137,102142],{"__ignoreMap":158},[162,102073,102074],{"class":164,"line":165},[162,102075,101352],{"class":361},[162,102077,102078,102080,102082,102084,102086,102088,102090,102092,102094,102096,102098,102100,102102],{"class":164,"line":197},[162,102079,98586],{"class":168},[162,102081,173],{"class":172},[162,102083,96067],{"class":168},[162,102085,208],{"class":207},[162,102087,3670],{"class":168},[162,102089,3621],{"class":207},[162,102091,96072],{"class":168},[162,102093,213],{"class":207},[162,102095,3670],{"class":168},[162,102097,218],{"class":207},[162,102099,3670],{"class":168},[162,102101,1314],{"class":207},[162,102103,434],{"class":168},[162,102105,102106,102108,102110,102112,102114,102116,102118,102120,102122,102124,102126,102128,102130],{"class":164,"line":228},[162,102107,101385],{"class":168},[162,102109,173],{"class":172},[162,102111,96067],{"class":168},[162,102113,2698],{"class":207},[162,102115,3670],{"class":168},[162,102117,101396],{"class":207},[162,102119,96072],{"class":168},[162,102121,213],{"class":207},[162,102123,3670],{"class":168},[162,102125,218],{"class":207},[162,102127,3670],{"class":168},[162,102129,1314],{"class":207},[162,102131,434],{"class":168},[162,102133,102134],{"class":164,"line":252},[162,102135,102136],{"class":361},"#使用dstack\n",[162,102138,102139],{"class":164,"line":328},[162,102140,102141],{"class":168},"np.dstack((aaa,bbb)).shape\n",[162,102143,102144],{"class":164,"line":466},[162,102145,102146],{"class":361},"#结果：（2，3，12）\n",[3219,102148,102149],{},"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":158,"searchDepth":197,"depth":197,"links":102151},[102152,102153,102154,102155],{"id":101091,"depth":197,"text":101092},{"id":101705,"depth":197,"text":101706},{"id":101876,"depth":197,"text":101877},{"id":102047,"depth":197,"text":102048},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":101083,"description":3241},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":102162,"title":102163,"body":102164,"description":3241,"extension":3242,"meta":102439,"navigation":300,"path":102440,"seo":102441,"stem":102442,"__hash__":102443},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":102165,"toc":102437},[102166,102169,102172,102266,102269,102272,102275,102278,102281,102284,102287,102290,102434],[10,102167,102163],{"id":102168},"_7数组转置",[19,102170,102171],{},"使用transpose()函数",[153,102173,102175],{"className":155,"code":102174,"language":157,"meta":158,"style":158},"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",[71,102176,102177,102187,102211,102216,102221,102226,102231,102239,102243,102247,102252,102257,102262],{"__ignoreMap":158},[162,102178,102179,102181,102183,102185],{"class":164,"line":165},[162,102180,33478],{"class":172},[162,102182,34463],{"class":168},[162,102184,34466],{"class":172},[162,102186,34469],{"class":168},[162,102188,102189,102191,102193,102195,102197,102199,102201,102203,102205,102207,102209],{"class":164,"line":197},[162,102190,3538],{"class":168},[162,102192,173],{"class":172},[162,102194,34796],{"class":168},[162,102196,208],{"class":207},[162,102198,3670],{"class":168},[162,102200,3813],{"class":207},[162,102202,96072],{"class":168},[162,102204,223],{"class":207},[162,102206,3670],{"class":168},[162,102208,218],{"class":207},[162,102210,434],{"class":168},[162,102212,102213],{"class":164,"line":228},[162,102214,102215],{"class":361},"#二维数组转置\n",[162,102217,102218],{"class":164,"line":252},[162,102219,102220],{"class":361},"#调用transpose()函数\n",[162,102222,102223],{"class":164,"line":328},[162,102224,102225],{"class":168},"a.transpose()\n",[162,102227,102228],{"class":164,"line":466},[162,102229,102230],{"class":361},"#对于二维数组也可以采用.T来实现\n",[162,102232,102233,102236],{"class":164,"line":471},[162,102234,102235],{"class":168},"a.T",[162,102237,102238],{"class":361},"#与上述代码一样\n",[162,102240,102241],{"class":164,"line":687},[162,102242,96629],{"class":361},[162,102244,102245],{"class":164,"line":692},[162,102246,96993],{"class":179},[162,102248,102249],{"class":164,"line":698},[162,102250,102251],{"class":179},"array([[ 1,  4,  7, 10],\n",[162,102253,102254],{"class":164,"line":2955},[162,102255,102256],{"class":179},"       [ 2,  5,  8, 11],\n",[162,102258,102259],{"class":164,"line":2960},[162,102260,102261],{"class":179},"       [ 3,  6,  9, 12]])\n",[162,102263,102264],{"class":164,"line":2971},[162,102265,96993],{"class":179},[19,102267,102268],{},"也可以使用np.transpose()的形式",[19,102270,102271],{},"#多维数组进行转置 np.transpose()",[19,102273,102274],{},"#对二维数组也可以使用np.transpose()进行转置",[19,102276,102277],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,102279,102280],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,102282,102283],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,102285,102286],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,102288,102289],{},"四维及以上的数组也是一样的道理",[153,102291,102293],{"className":155,"code":102292,"language":157,"meta":158,"style":158},"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",[71,102294,102295,102323,102328,102333,102338,102356,102361,102393,102398,102403,102408,102429],{"__ignoreMap":158},[162,102296,102297,102299,102301,102303,102305,102307,102309,102311,102313,102315,102317,102319,102321],{"class":164,"line":165},[162,102298,4101],{"class":168},[162,102300,173],{"class":172},[162,102302,96067],{"class":168},[162,102304,208],{"class":207},[162,102306,3670],{"class":168},[162,102308,3621],{"class":207},[162,102310,96072],{"class":168},[162,102312,218],{"class":207},[162,102314,3670],{"class":168},[162,102316,1314],{"class":207},[162,102318,3670],{"class":168},[162,102320,213],{"class":207},[162,102322,434],{"class":168},[162,102324,102325],{"class":164,"line":197},[162,102326,102327],{"class":168},"x.shape\n",[162,102329,102330],{"class":164,"line":228},[162,102331,102332],{"class":361},"#结果：（3,6,2）\n",[162,102334,102335],{"class":164,"line":252},[162,102336,102337],{"class":361},"#使用np.transpose()进行转置 变为(2,6,3)\n",[162,102339,102340,102343,102345,102347,102349,102351,102353],{"class":164,"line":328},[162,102341,102342],{"class":168},"np.transpose(x,(",[162,102344,213],{"class":207},[162,102346,3670],{"class":168},[162,102348,208],{"class":207},[162,102350,3670],{"class":168},[162,102352,312],{"class":207},[162,102354,102355],{"class":168},")).shape\n",[162,102357,102358],{"class":164,"line":466},[162,102359,102360],{"class":361},"#结果：(2,6,3)\n",[162,102362,102363,102365,102367,102369,102371,102373,102375,102377,102379,102381,102383,102385,102387,102389,102391],{"class":164,"line":471},[162,102364,101570],{"class":168},[162,102366,173],{"class":172},[162,102368,96067],{"class":168},[162,102370,208],{"class":207},[162,102372,3670],{"class":168},[162,102374,3621],{"class":207},[162,102376,96072],{"class":168},[162,102378,218],{"class":207},[162,102380,3670],{"class":168},[162,102382,213],{"class":207},[162,102384,3670],{"class":168},[162,102386,208],{"class":207},[162,102388,3670],{"class":168},[162,102390,1314],{"class":207},[162,102392,434],{"class":168},[162,102394,102395],{"class":164,"line":687},[162,102396,102397],{"class":168},"aaaa.shape\n",[162,102399,102400],{"class":164,"line":692},[162,102401,102402],{"class":361},"#结果：（3，2，1，6）\n",[162,102404,102405],{"class":164,"line":698},[162,102406,102407],{"class":361},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[162,102409,102410,102413,102415,102417,102419,102421,102423,102425,102427],{"class":164,"line":2955},[162,102411,102412],{"class":168},"np.transpose(aaaa,(",[162,102414,208],{"class":207},[162,102416,3670],{"class":168},[162,102418,213],{"class":207},[162,102420,3670],{"class":168},[162,102422,312],{"class":207},[162,102424,3670],{"class":168},[162,102426,218],{"class":207},[162,102428,102355],{"class":168},[162,102430,102431],{"class":164,"line":2960},[162,102432,102433],{"class":361},"#结果：(2,1,3,6)\n",[3219,102435,102436],{},"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":158,"searchDepth":197,"depth":197,"links":102438},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":102163,"description":3241},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":102445,"title":102446,"body":102447,"description":3241,"extension":3242,"meta":103181,"navigation":300,"path":103182,"seo":103183,"stem":103184,"__hash__":103185},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":102448,"toc":103179},[102449,102452,102455,102458,102461,102464,102467,102470,102473,102582,102585,102588,103176],[10,102450,102446],{"id":102451},"_8数组分割",[19,102453,102454],{},"split分割",[19,102456,102457],{},"numpy.split(ary,indics_or_sections,axis)",[19,102459,102460],{},"解释：",[19,102462,102463],{},"ary:被分割的数组",[19,102465,102466],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,102468,102469],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,102471,102472],{},"①一维数组的分割",[153,102474,102476],{"className":155,"code":102475,"language":157,"meta":158,"style":158},"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",[71,102477,102478,102494,102499,102508,102512,102517,102525,102529,102534,102539,102552,102556,102561,102573,102577],{"__ignoreMap":158},[162,102479,102480,102482,102484,102486,102488,102490,102492],{"class":164,"line":165},[162,102481,3538],{"class":168},[162,102483,173],{"class":172},[162,102485,96067],{"class":168},[162,102487,208],{"class":207},[162,102489,3670],{"class":168},[162,102491,3711],{"class":207},[162,102493,434],{"class":168},[162,102495,102496],{"class":164,"line":197},[162,102497,102498],{"class":361},"#如果传入整数，必须能够平分，否则会报错\n",[162,102500,102501,102504,102506],{"class":164,"line":228},[162,102502,102503],{"class":168},"np.split(a,",[162,102505,213],{"class":207},[162,102507,434],{"class":168},[162,102509,102510],{"class":164,"line":252},[162,102511,96629],{"class":361},[162,102513,102514],{"class":164,"line":328},[162,102515,102516],{"class":361},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[162,102518,102519,102521,102523],{"class":164,"line":466},[162,102520,102503],{"class":168},[162,102522,223],{"class":207},[162,102524,434],{"class":168},[162,102526,102527],{"class":164,"line":471},[162,102528,96629],{"class":361},[162,102530,102531],{"class":164,"line":687},[162,102532,102533],{"class":361},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[162,102535,102536],{"class":164,"line":692},[162,102537,102538],{"class":361},"#传入数组\n",[162,102540,102541,102544,102546,102548,102550],{"class":164,"line":698},[162,102542,102543],{"class":168},"np.split(a,[",[162,102545,218],{"class":207},[162,102547,3670],{"class":168},[162,102549,637],{"class":207},[162,102551,315],{"class":168},[162,102553,102554],{"class":164,"line":2955},[162,102555,96629],{"class":361},[162,102557,102558],{"class":164,"line":2960},[162,102559,102560],{"class":361},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[162,102562,102563,102565,102567,102569,102571],{"class":164,"line":2971},[162,102564,102543],{"class":168},[162,102566,637],{"class":207},[162,102568,3670],{"class":168},[162,102570,3661],{"class":207},[162,102572,315],{"class":168},[162,102574,102575],{"class":164,"line":2984},[162,102576,96629],{"class":361},[162,102578,102579],{"class":164,"line":2989},[162,102580,102581],{"class":361},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,102583,102584],{},"②二维数组的分割",[19,102586,102587],{},"使用split()",[153,102589,102591],{"className":155,"code":102590,"language":157,"meta":158,"style":158},"#二维数组分割\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",[71,102592,102593,102598,102622,102627,102636,102640,102644,102649,102654,102659,102664,102669,102674,102679,102683,102696,102700,102704,102708,102712,102716,102721,102726,102731,102735,102740,102756,102760,102764,102769,102774,102779,102784,102789,102794,102799,102804,102809,102814,102819,102824,102829,102834,102839,102844,102849,102854,102858,102862,102882,102886,102890,102895,102900,102905,102910,102915,102920,102925,102930,102935,102940,102945,102950,102955,102960,102965,102970,102975,102980,102984,102989,102998,103002,103006,103010,103014,103018,103022,103026,103030,103034,103043,103047,103051,103055,103059,103063,103067,103071,103075,103079,103083,103087,103091,103095,103099,103103,103107,103111,103115,103119,103123,103127,103140,103144,103148,103152,103156,103160,103164,103168,103172],{"__ignoreMap":158},[162,102594,102595],{"class":164,"line":165},[162,102596,102597],{"class":361},"#二维数组分割\n",[162,102599,102600,102602,102604,102606,102608,102610,102612,102614,102616,102618,102620],{"class":164,"line":197},[162,102601,96371],{"class":168},[162,102603,173],{"class":172},[162,102605,96067],{"class":168},[162,102607,208],{"class":207},[162,102609,3670],{"class":168},[162,102611,3621],{"class":207},[162,102613,96072],{"class":168},[162,102615,1314],{"class":207},[162,102617,3670],{"class":168},[162,102619,1314],{"class":207},[162,102621,434],{"class":168},[162,102623,102624],{"class":164,"line":228},[162,102625,102626],{"class":361},"#默认axis=0  传入整数平均分,按行来的\n",[162,102628,102629,102632,102634],{"class":164,"line":252},[162,102630,102631],{"class":168},"np.split(aa,",[162,102633,218],{"class":207},[162,102635,434],{"class":168},[162,102637,102638],{"class":164,"line":328},[162,102639,98829],{"class":361},[162,102641,102642],{"class":164,"line":466},[162,102643,96993],{"class":179},[162,102645,102646],{"class":164,"line":471},[162,102647,102648],{"class":179},"[array([[ 1,  2,  3,  4,  5,  6],\n",[162,102650,102651],{"class":164,"line":687},[162,102652,102653],{"class":179},"        [ 7,  8,  9, 10, 11, 12]]),\n",[162,102655,102656],{"class":164,"line":692},[162,102657,102658],{"class":179}," array([[13, 14, 15, 16, 17, 18],\n",[162,102660,102661],{"class":164,"line":698},[162,102662,102663],{"class":179},"        [19, 20, 21, 22, 23, 24]]),\n",[162,102665,102666],{"class":164,"line":2955},[162,102667,102668],{"class":179}," array([[25, 26, 27, 28, 29, 30],\n",[162,102670,102671],{"class":164,"line":2960},[162,102672,102673],{"class":179},"        [31, 32, 33, 34, 35, 36]])]\n",[162,102675,102676],{"class":164,"line":2971},[162,102677,102678],{"class":179}," '''\n",[162,102680,102681],{"class":164,"line":2984},[162,102682,102538],{"class":361},[162,102684,102685,102688,102690,102692,102694],{"class":164,"line":2989},[162,102686,102687],{"class":168},"np.split(aa,[",[162,102689,213],{"class":207},[162,102691,3670],{"class":168},[162,102693,637],{"class":207},[162,102695,315],{"class":168},[162,102697,102698],{"class":164,"line":3011},[162,102699,98829],{"class":361},[162,102701,102702],{"class":164,"line":3022},[162,102703,96993],{"class":179},[162,102705,102706],{"class":164,"line":3027},[162,102707,102648],{"class":179},[162,102709,102710],{"class":164,"line":3046},[162,102711,102653],{"class":179},[162,102713,102714],{"class":164,"line":3052},[162,102715,102658],{"class":179},[162,102717,102718],{"class":164,"line":3057},[162,102719,102720],{"class":179},"        [19, 20, 21, 22, 23, 24],\n",[162,102722,102723],{"class":164,"line":3072},[162,102724,102725],{"class":179},"        [25, 26, 27, 28, 29, 30]]),\n",[162,102727,102728],{"class":164,"line":3077},[162,102729,102730],{"class":179}," array([[31, 32, 33, 34, 35, 36]])]\n",[162,102732,102733],{"class":164,"line":3100},[162,102734,96993],{"class":179},[162,102736,102737],{"class":164,"line":3140},[162,102738,102739],{"class":361},"#axis=1 按照列来分\n",[162,102741,102742,102744,102746,102748,102750,102752,102754],{"class":164,"line":4878},[162,102743,102631],{"class":168},[162,102745,218],{"class":207},[162,102747,3670],{"class":168},[162,102749,50587],{"class":671},[162,102751,173],{"class":172},[162,102753,208],{"class":207},[162,102755,434],{"class":168},[162,102757,102758],{"class":164,"line":4883},[162,102759,98829],{"class":361},[162,102761,102762],{"class":164,"line":4897},[162,102763,96993],{"class":179},[162,102765,102766],{"class":164,"line":4902},[162,102767,102768],{"class":179},"[array([[ 1,  2],\n",[162,102770,102771],{"class":164,"line":5694},[162,102772,102773],{"class":179},"        [ 7,  8],\n",[162,102775,102776],{"class":164,"line":5708},[162,102777,102778],{"class":179},"        [13, 14],\n",[162,102780,102781],{"class":164,"line":5716},[162,102782,102783],{"class":179},"        [19, 20],\n",[162,102785,102786],{"class":164,"line":5721},[162,102787,102788],{"class":179},"        [25, 26],\n",[162,102790,102791],{"class":164,"line":5727},[162,102792,102793],{"class":179},"        [31, 32]]),\n",[162,102795,102796],{"class":164,"line":5733},[162,102797,102798],{"class":179}," array([[ 3,  4],\n",[162,102800,102801],{"class":164,"line":5738},[162,102802,102803],{"class":179},"        [ 9, 10],\n",[162,102805,102806],{"class":164,"line":11052},[162,102807,102808],{"class":179},"        [15, 16],\n",[162,102810,102811],{"class":164,"line":11076},[162,102812,102813],{"class":179},"        [21, 22],\n",[162,102815,102816],{"class":164,"line":11081},[162,102817,102818],{"class":179},"        [27, 28],\n",[162,102820,102821],{"class":164,"line":11087},[162,102822,102823],{"class":179},"        [33, 34]]),\n",[162,102825,102826],{"class":164,"line":11114},[162,102827,102828],{"class":179}," array([[ 5,  6],\n",[162,102830,102831],{"class":164,"line":11119},[162,102832,102833],{"class":179},"        [11, 12],\n",[162,102835,102836],{"class":164,"line":11125},[162,102837,102838],{"class":179},"        [17, 18],\n",[162,102840,102841],{"class":164,"line":11137},[162,102842,102843],{"class":179},"        [23, 24],\n",[162,102845,102846],{"class":164,"line":11149},[162,102847,102848],{"class":179},"        [29, 30],\n",[162,102850,102851],{"class":164,"line":11161},[162,102852,102853],{"class":179},"        [35, 36]])]\n",[162,102855,102856],{"class":164,"line":12816},[162,102857,102678],{"class":179},[162,102859,102860],{"class":164,"line":12841},[162,102861,102538],{"class":361},[162,102863,102864,102866,102868,102870,102872,102874,102876,102878,102880],{"class":164,"line":12864},[162,102865,102687],{"class":168},[162,102867,208],{"class":207},[162,102869,3670],{"class":168},[162,102871,213],{"class":207},[162,102873,44684],{"class":168},[162,102875,50587],{"class":671},[162,102877,173],{"class":172},[162,102879,208],{"class":207},[162,102881,434],{"class":168},[162,102883,102884],{"class":164,"line":12888},[162,102885,96629],{"class":361},[162,102887,102888],{"class":164,"line":12893},[162,102889,96993],{"class":179},[162,102891,102892],{"class":164,"line":12898},[162,102893,102894],{"class":179},"[array([[ 1],\n",[162,102896,102897],{"class":164,"line":12903},[162,102898,102899],{"class":179},"        [ 7],\n",[162,102901,102902],{"class":164,"line":12912},[162,102903,102904],{"class":179},"        [13],\n",[162,102906,102907],{"class":164,"line":12917},[162,102908,102909],{"class":179},"        [19],\n",[162,102911,102912],{"class":164,"line":12923},[162,102913,102914],{"class":179},"        [25],\n",[162,102916,102917],{"class":164,"line":12944},[162,102918,102919],{"class":179},"        [31]]),\n",[162,102921,102922],{"class":164,"line":12950},[162,102923,102924],{"class":179}," array([[ 2],\n",[162,102926,102927],{"class":164,"line":12964},[162,102928,102929],{"class":179},"        [ 8],\n",[162,102931,102932],{"class":164,"line":12970},[162,102933,102934],{"class":179},"        [14],\n",[162,102936,102937],{"class":164,"line":12997},[162,102938,102939],{"class":179},"        [20],\n",[162,102941,102942],{"class":164,"line":13006},[162,102943,102944],{"class":179},"        [26],\n",[162,102946,102947],{"class":164,"line":13012},[162,102948,102949],{"class":179},"        [32]]),\n",[162,102951,102952],{"class":164,"line":13020},[162,102953,102954],{"class":179}," array([[ 3,  4,  5,  6],\n",[162,102956,102957],{"class":164,"line":13025},[162,102958,102959],{"class":179},"        [ 9, 10, 11, 12],\n",[162,102961,102962],{"class":164,"line":19695},[162,102963,102964],{"class":179},"        [15, 16, 17, 18],\n",[162,102966,102967],{"class":164,"line":19701},[162,102968,102969],{"class":179},"        [21, 22, 23, 24],\n",[162,102971,102972],{"class":164,"line":19724},[162,102973,102974],{"class":179},"        [27, 28, 29, 30],\n",[162,102976,102977],{"class":164,"line":19730},[162,102978,102979],{"class":179},"        [33, 34, 35, 36]])]\n",[162,102981,102982],{"class":164,"line":19753},[162,102983,96993],{"class":179},[162,102985,102986],{"class":164,"line":19767},[162,102987,102988],{"class":361},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[162,102990,102991,102994,102996],{"class":164,"line":19787},[162,102992,102993],{"class":168},"np.vsplit(aa,",[162,102995,218],{"class":207},[162,102997,434],{"class":168},[162,102999,103000],{"class":164,"line":19793},[162,103001,96629],{"class":361},[162,103003,103004],{"class":164,"line":19804},[162,103005,96993],{"class":179},[162,103007,103008],{"class":164,"line":19827},[162,103009,102648],{"class":179},[162,103011,103012],{"class":164,"line":19849},[162,103013,102653],{"class":179},[162,103015,103016],{"class":164,"line":19854},[162,103017,102658],{"class":179},[162,103019,103020],{"class":164,"line":19860},[162,103021,102663],{"class":179},[162,103023,103024],{"class":164,"line":19874},[162,103025,102668],{"class":179},[162,103027,103028],{"class":164,"line":19887},[162,103029,102673],{"class":179},[162,103031,103032],{"class":164,"line":19892},[162,103033,96993],{"class":179},[162,103035,103036,103039,103041],{"class":164,"line":19906},[162,103037,103038],{"class":168},"np.hsplit(aa,",[162,103040,218],{"class":207},[162,103042,434],{"class":168},[162,103044,103045],{"class":164,"line":19911},[162,103046,96629],{"class":361},[162,103048,103049],{"class":164,"line":19917},[162,103050,96993],{"class":179},[162,103052,103053],{"class":164,"line":19922},[162,103054,102768],{"class":179},[162,103056,103057],{"class":164,"line":19936},[162,103058,102773],{"class":179},[162,103060,103061],{"class":164,"line":19941},[162,103062,102778],{"class":179},[162,103064,103065],{"class":164,"line":19946},[162,103066,102783],{"class":179},[162,103068,103069],{"class":164,"line":19960},[162,103070,102788],{"class":179},[162,103072,103073],{"class":164,"line":19972},[162,103074,102793],{"class":179},[162,103076,103077],{"class":164,"line":19977},[162,103078,102798],{"class":179},[162,103080,103081],{"class":164,"line":19990},[162,103082,102803],{"class":179},[162,103084,103085],{"class":164,"line":19995},[162,103086,102808],{"class":179},[162,103088,103089],{"class":164,"line":20000},[162,103090,102813],{"class":179},[162,103092,103093],{"class":164,"line":20005},[162,103094,102818],{"class":179},[162,103096,103097],{"class":164,"line":20018},[162,103098,102823],{"class":179},[162,103100,103101],{"class":164,"line":20023},[162,103102,102828],{"class":179},[162,103104,103105],{"class":164,"line":35709},[162,103106,102833],{"class":179},[162,103108,103109],{"class":164,"line":35715},[162,103110,102838],{"class":179},[162,103112,103113],{"class":164,"line":35721},[162,103114,102843],{"class":179},[162,103116,103117],{"class":164,"line":35727},[162,103118,102848],{"class":179},[162,103120,103121],{"class":164,"line":35733},[162,103122,102853],{"class":179},[162,103124,103125],{"class":164,"line":35744},[162,103126,96993],{"class":179},[162,103128,103129,103132,103134,103136,103138],{"class":164,"line":35750},[162,103130,103131],{"class":168},"np.vsplit(aa,[",[162,103133,213],{"class":207},[162,103135,3670],{"class":168},[162,103137,637],{"class":207},[162,103139,315],{"class":168},[162,103141,103142],{"class":164,"line":35770},[162,103143,96629],{"class":361},[162,103145,103146],{"class":164,"line":35776},[162,103147,96993],{"class":179},[162,103149,103150],{"class":164,"line":35787},[162,103151,102648],{"class":179},[162,103153,103154],{"class":164,"line":35793},[162,103155,102653],{"class":179},[162,103157,103158],{"class":164,"line":35799},[162,103159,102658],{"class":179},[162,103161,103162],{"class":164,"line":35805},[162,103163,102720],{"class":179},[162,103165,103166],{"class":164,"line":35811},[162,103167,102725],{"class":179},[162,103169,103170],{"class":164,"line":35817},[162,103171,102730],{"class":179},[162,103173,103174],{"class":164,"line":35823},[162,103175,102678],{"class":179},[3219,103177,103178],{},"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":158,"searchDepth":197,"depth":197,"links":103180},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":102446,"description":3241},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":103187,"title":103188,"body":103189,"description":3241,"extension":3242,"meta":103683,"navigation":300,"path":103684,"seo":103685,"stem":103686,"__hash__":103687},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":103190,"toc":103674},[103191,103194,103197,103222,103226,103285,103337,103341,103343,103379,103433,103435,103473,103544,103548,103553,103557,103560,103593,103596,103600,103603,103606,103609,103612,103617,103621,103624,103627,103630,103633,103638,103642,103647,103650,103671],[10,103192,103188],{"id":103193},"_9数学函数",[19,103195,103196],{},"补充回顾：python的列表推导式",[153,103198,103200],{"className":155,"code":103199,"language":157,"meta":158,"style":158},"[1\u002Fi for i in a]\n",[71,103201,103202],{"__ignoreMap":158},[162,103203,103204,103206,103208,103210,103213,103215,103217,103219],{"class":164,"line":165},[162,103205,4168],{"class":168},[162,103207,208],{"class":207},[162,103209,946],{"class":172},[162,103211,103212],{"class":168},"i ",[162,103214,808],{"class":172},[162,103216,2642],{"class":168},[162,103218,814],{"class":172},[162,103220,103221],{"class":168}," a]\n",[14,103223,103225],{"id":103224},"_91-求倒数","9.1 求倒数",[153,103227,103229],{"className":155,"code":103228,"language":157,"meta":158,"style":158},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[71,103230,103231,103236,103264,103276],{"__ignoreMap":158},[162,103232,103233],{"class":164,"line":165},[162,103234,103235],{"class":361},"#数组求倒数\n",[162,103237,103238,103240,103242,103244,103246,103248,103250,103252,103254,103256,103258,103260,103262],{"class":164,"line":197},[162,103239,3538],{"class":168},[162,103241,173],{"class":172},[162,103243,4168],{"class":168},[162,103245,208],{"class":207},[162,103247,3670],{"class":168},[162,103249,213],{"class":207},[162,103251,3670],{"class":168},[162,103253,218],{"class":207},[162,103255,3670],{"class":168},[162,103257,223],{"class":207},[162,103259,3670],{"class":168},[162,103261,637],{"class":207},[162,103263,194],{"class":168},[162,103265,103266,103268,103270,103273],{"class":164,"line":228},[162,103267,3561],{"class":168},[162,103269,173],{"class":172},[162,103271,103272],{"class":168},"np.array(a)",[162,103274,103275],{"class":361},"#将列表转换为数组\n",[162,103277,103278,103280,103282],{"class":164,"line":252},[162,103279,208],{"class":207},[162,103281,946],{"class":172},[162,103283,103284],{"class":168},"b\n",[153,103286,103288],{"className":155,"code":103287,"language":157,"meta":158,"style":158},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[71,103289,103290,103318,103327,103332],{"__ignoreMap":158},[162,103291,103292,103294,103296,103298,103300,103302,103304,103306,103308,103310,103312,103314,103316],{"class":164,"line":165},[162,103293,3538],{"class":168},[162,103295,173],{"class":172},[162,103297,4168],{"class":168},[162,103299,208],{"class":207},[162,103301,3670],{"class":168},[162,103303,213],{"class":207},[162,103305,3670],{"class":168},[162,103307,218],{"class":207},[162,103309,3670],{"class":168},[162,103311,223],{"class":207},[162,103313,3670],{"class":168},[162,103315,637],{"class":207},[162,103317,194],{"class":168},[162,103319,103320,103322,103324],{"class":164,"line":197},[162,103321,3561],{"class":168},[162,103323,173],{"class":172},[162,103325,103326],{"class":168},"np.array(a)\n",[162,103328,103329],{"class":164,"line":228},[162,103330,103331],{"class":361},"#调用numpy中的函数reciprocal()\n",[162,103333,103334],{"class":164,"line":252},[162,103335,103336],{"class":168},"np.reciprocal(b)\n",[14,103338,103340],{"id":103339},"_92-求平方","9.2 求平方",[19,103342,97595],{},[153,103344,103346],{"className":155,"code":103345,"language":157,"meta":158,"style":158},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[71,103347,103348,103353,103358,103374],{"__ignoreMap":158},[162,103349,103350],{"class":164,"line":165},[162,103351,103352],{"class":361},"#square()，求平方\n",[162,103354,103355],{"class":164,"line":197},[162,103356,103357],{"class":361},"#一维数组\n",[162,103359,103360,103362,103364,103366,103368,103370,103372],{"class":164,"line":228},[162,103361,3538],{"class":168},[162,103363,173],{"class":172},[162,103365,96067],{"class":168},[162,103367,208],{"class":207},[162,103369,3670],{"class":168},[162,103371,1006],{"class":207},[162,103373,434],{"class":168},[162,103375,103376],{"class":164,"line":252},[162,103377,103378],{"class":168},"np.square(a)\n",[153,103380,103382],{"className":155,"code":103381,"language":157,"meta":158,"style":158},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[71,103383,103384,103389,103394,103415],{"__ignoreMap":158},[162,103385,103386],{"class":164,"line":165},[162,103387,103388],{"class":361},"#或者通过循环遍历的形式来计算\n",[162,103390,103391],{"class":164,"line":197},[162,103392,103393],{"class":361},"#这是一个列表\n",[162,103395,103396,103399,103401,103403,103405,103407,103409,103412],{"class":164,"line":228},[162,103397,103398],{"class":168},"[i",[162,103400,3745],{"class":172},[162,103402,103212],{"class":168},[162,103404,808],{"class":172},[162,103406,2642],{"class":168},[162,103408,814],{"class":172},[162,103410,103411],{"class":168}," a]",[162,103413,103414],{"class":361},"#这个求完之后在数列当中\n",[162,103416,103417,103420,103422,103424,103426,103428,103430],{"class":164,"line":252},[162,103418,103419],{"class":168},"np.array([i",[162,103421,3745],{"class":172},[162,103423,103212],{"class":168},[162,103425,808],{"class":172},[162,103427,2642],{"class":168},[162,103429,814],{"class":172},[162,103431,103432],{"class":168}," a])\n",[19,103434,96356],{},[153,103436,103438],{"className":155,"code":103437,"language":157,"meta":158,"style":158},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[71,103439,103440,103444,103468],{"__ignoreMap":158},[162,103441,103442],{"class":164,"line":165},[162,103443,96366],{"class":361},[162,103445,103446,103448,103450,103452,103454,103456,103458,103460,103462,103464,103466],{"class":164,"line":197},[162,103447,96371],{"class":168},[162,103449,173],{"class":172},[162,103451,96067],{"class":168},[162,103453,208],{"class":207},[162,103455,3670],{"class":168},[162,103457,3813],{"class":207},[162,103459,96072],{"class":168},[162,103461,223],{"class":207},[162,103463,3670],{"class":168},[162,103465,218],{"class":207},[162,103467,434],{"class":168},[162,103469,103470],{"class":164,"line":228},[162,103471,103472],{"class":168},"np.square(aa)\n",[153,103474,103476],{"className":155,"code":103475,"language":157,"meta":158,"style":158},"#传统的方式\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",[71,103477,103478,103483,103492,103508,103524,103539],{"__ignoreMap":158},[162,103479,103480],{"class":164,"line":165},[162,103481,103482],{"class":361},"#传统的方式\n",[162,103484,103485,103487,103489],{"class":164,"line":197},[162,103486,101251],{"class":168},[162,103488,173],{"class":172},[162,103490,103491],{"class":168},"np.empty_like(aa)\n",[162,103493,103494,103496,103498,103500,103502,103504,103506],{"class":164,"line":228},[162,103495,808],{"class":172},[162,103497,2642],{"class":168},[162,103499,814],{"class":172},[162,103501,2647],{"class":207},[162,103503,604],{"class":168},[162,103505,223],{"class":207},[162,103507,33870],{"class":168},[162,103509,103510,103512,103514,103516,103518,103520,103522],{"class":164,"line":252},[162,103511,6315],{"class":172},[162,103513,12600],{"class":168},[162,103515,814],{"class":172},[162,103517,2647],{"class":207},[162,103519,604],{"class":168},[162,103521,218],{"class":207},[162,103523,33870],{"class":168},[162,103525,103526,103529,103531,103534,103536],{"class":164,"line":328},[162,103527,103528],{"class":168},"        bb[i,j]",[162,103530,173],{"class":172},[162,103532,103533],{"class":168},"aa[i,j]",[162,103535,3745],{"class":172},[162,103537,103538],{"class":168},"aa[i,j]\n",[162,103540,103541],{"class":164,"line":466},[162,103542,103543],{"class":168},"bb\n",[14,103545,103547],{"id":103546},"_93-求各元素的符号","9.3 求各元素的符号",[19,103549,103550],{},[4602,103551],{"alt":158,"src":103552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,103554,103556],{"id":103555},"_94-modf函数","9.4 modf函数",[19,103558,103559],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[153,103561,103563],{"className":155,"code":103562,"language":157,"meta":158,"style":158},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[71,103564,103565,103588],{"__ignoreMap":158},[162,103566,103567,103569,103571,103573,103575,103577,103579,103581,103583,103586],{"class":164,"line":165},[162,103568,3538],{"class":168},[162,103570,173],{"class":172},[162,103572,96067],{"class":168},[162,103574,353],{"class":172},[162,103576,1006],{"class":207},[162,103578,3670],{"class":168},[162,103580,1006],{"class":207},[162,103582,3670],{"class":168},[162,103584,103585],{"class":207},"0.3",[162,103587,434],{"class":168},[162,103589,103590],{"class":164,"line":197},[162,103591,103592],{"class":168},"np.modf(a)\n",[19,103594,103595],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,103597,103599],{"id":103598},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,103601,103602],{},"np.cell()",[19,103604,103605],{},"np.floor()",[19,103607,103608],{},"np.rint()",[19,103610,103611],{},"对各元素分别向上取整、向下取整、四舍五入",[19,103613,103614],{},[4602,103615],{"alt":158,"src":103616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,103618,103620],{"id":103619},"_96-around函数","9.6 around()函数",[19,103622,103623],{},"around()函数也可以实现对数的小数位数进行操作",[19,103625,103626],{},"其中的参数：",[19,103628,103629],{},"1.要传的数组",[19,103631,103632],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,103634,103635],{},[4602,103636],{"alt":158,"src":103637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,103639,103641],{"id":103640},"_97-三角函数","9.7 三角函数",[19,103643,103644],{},[4602,103645],{"alt":158,"src":103646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,103648,103649],{},"引入图像模块非常重要",[153,103651,103653],{"className":155,"code":103652,"language":157,"meta":158,"style":158},"from matplotlib import pyplot as plt\n",[71,103654,103655],{"__ignoreMap":158},[162,103656,103657,103659,103662,103664,103667,103669],{"class":164,"line":165},[162,103658,33821],{"class":172},[162,103660,103661],{"class":168}," matplotlib ",[162,103663,33478],{"class":172},[162,103665,103666],{"class":168}," pyplot ",[162,103668,34466],{"class":172},[162,103670,34520],{"class":168},[3219,103672,103673],{},"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":158,"searchDepth":197,"depth":197,"links":103675},[103676,103677,103678,103679,103680,103681,103682],{"id":103224,"depth":197,"text":103225},{"id":103339,"depth":197,"text":103340},{"id":103546,"depth":197,"text":103547},{"id":103555,"depth":197,"text":103556},{"id":103598,"depth":197,"text":103599},{"id":103619,"depth":197,"text":103620},{"id":103640,"depth":197,"text":103641},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":103188,"description":3241},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":103689,"title":103690,"body":103691,"description":3241,"extension":3242,"meta":103695,"navigation":300,"path":103696,"seo":103697,"stem":103698,"__hash__":103699},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":103692,"toc":103693},[],{"title":158,"searchDepth":197,"depth":197,"links":103694},[],{"category":53493},"\u002Fwiki\u002F2025-08-14-numpy",{"title":103690,"description":3241},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":103701,"title":103702,"body":103703,"description":158,"extension":3242,"meta":105710,"navigation":300,"path":105711,"seo":105712,"stem":105713,"__hash__":105714},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":103704,"toc":105686},[103705,103708,103712,103715,103718,103724,103727,103750,103753,103787,103790,103831,103835,103838,103931,103934,103978,103981,103998,104001,104015,104018,104021,104066,104069,104106,104110,104113,104119,104124,104144,104148,104151,104217,104220,104238,104242,104245,104274,104284,104290,104294,104297,104303,104314,104318,104321,104351,104354,104633,104636,104639,104650,104653,104656,104678,104685,104688,104706,104709,104712,104726,104734,104737,104763,104769,104772,104775,104785,104797,104817,104826,104846,104856,104880,104893,104907,104912,104953,104970,104995,105007,105027,105033,105078,105097,105114,105127,105143,105150,105162,105171,105206,105227,105252,105265,105289,105304,105329,105332,105353,105362,105365,105376,105380,105383,105389,105401,105408,105412,105415,105427,105430,105444,105447,105457,105467,105470,105510,105513,105517,105523,105526,105540,105544,105547,105580,105584,105587,105610,105618,105621,105627,105633,105636,105639,105667,105671,105674,105680,105683],[10,103706,103702],{"id":103707},"_1环境安装与第一个-mujoco-程序",[14,103709,103711],{"id":103710},"_1目标说明","1.目标说明",[19,103713,103714],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,103716,103717],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[153,103719,103722],{"className":103720,"code":103721,"language":8295,"meta":158},[8293],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[71,103723,103721],{"__ignoreMap":158},[19,103725,103726],{},"需要掌握:",[1452,103728,103729,103732,103735,103740,103745],{},[1455,103730,103731],{},"Fedora 44 下 MuJoCo 的系统依赖",[1455,103733,103734],{},"Python 虚拟环境创建",[1455,103736,103737],{},[71,103738,103739],{},"mujoco.MjModel",[1455,103741,103742],{},[71,103743,103744],{},"mujoco.MjData",[1455,103746,103747],{},[71,103748,103749],{},"mujoco.mj_step(model, data)",[19,103751,103752],{},"MuJoCo 中最重要的两个对象:",[26,103754,103755,103765],{},[29,103756,103757],{},[32,103758,103759,103762],{},[35,103760,103761],{"align":26827},"对象",[35,103763,103764],{"align":26827},"含义",[51,103766,103767,103777],{},[32,103768,103769,103774],{},[56,103770,103771],{"align":26827},[71,103772,103773],{},"MjModel",[56,103775,103776],{"align":26827},"模型结构，来自 XML，基本不随时间变化",[32,103778,103779,103784],{},[56,103780,103781],{"align":26827},[71,103782,103783],{},"MjData",[56,103785,103786],{"align":26827},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,103788,103789],{},"可以先用一个类比理解：",[26,103791,103792,103802],{},[29,103793,103794],{},[32,103795,103796,103799],{},[35,103797,103798],{"align":26827},"类比",[35,103800,103801],{"align":26827},"MuJoCo 对象",[51,103803,103804,103813,103822],{},[32,103805,103806,103809],{},[56,103807,103808],{"align":26827},"游戏地图和角色配置",[56,103810,103811],{"align":26827},[71,103812,103773],{},[32,103814,103815,103818],{},[56,103816,103817],{"align":26827},"游戏运行到当前帧的状态",[56,103819,103820],{"align":26827},[71,103821,103783],{},[32,103823,103824,103827],{},[56,103825,103826],{"align":26827},"前进一帧",[56,103828,103829],{"align":26827},[71,103830,103749],{},[14,103832,103834],{"id":103833},"_2环境与依赖安装","2.环境与依赖安装",[19,103836,103837],{},"Fedora 44 系统依赖:",[153,103839,103841],{"className":26913,"code":103840,"language":26915,"meta":158,"style":158},"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",[71,103842,103843,103855,103868,103881,103891,103901,103920],{"__ignoreMap":158},[162,103844,103845,103847,103849,103851,103853],{"class":164,"line":165},[162,103846,27668],{"class":5082},[162,103848,29405],{"class":179},[162,103850,26925],{"class":179},[162,103852,29490],{"class":207},[162,103854,27770],{"class":207},[162,103856,103857,103860,103863,103866],{"class":164,"line":197},[162,103858,103859],{"class":179},"  python3",[162,103861,103862],{"class":179}," python3-pip",[162,103864,103865],{"class":179}," python3-virtualenv",[162,103867,27770],{"class":207},[162,103869,103870,103873,103876,103879],{"class":164,"line":228},[162,103871,103872],{"class":179},"  mesa-libGL",[162,103874,103875],{"class":179}," mesa-libGLU",[162,103877,103878],{"class":179}," mesa-dri-drivers",[162,103880,27770],{"class":207},[162,103882,103883,103886,103889],{"class":164,"line":252},[162,103884,103885],{"class":179},"  libglvnd-glx",[162,103887,103888],{"class":179}," libglvnd-opengl",[162,103890,27770],{"class":207},[162,103892,103893,103896,103899],{"class":164,"line":328},[162,103894,103895],{"class":179},"  glfw",[162,103897,103898],{"class":179}," glfw-devel",[162,103900,27770],{"class":207},[162,103902,103903,103906,103909,103912,103915,103918],{"class":164,"line":466},[162,103904,103905],{"class":179},"  libX11",[162,103907,103908],{"class":179}," libXcursor",[162,103910,103911],{"class":179}," libXi",[162,103913,103914],{"class":179}," libXinerama",[162,103916,103917],{"class":179}," libXrandr",[162,103919,27770],{"class":207},[162,103921,103922,103925,103928],{"class":164,"line":471},[162,103923,103924],{"class":179},"  gcc",[162,103926,103927],{"class":179}," gcc-c++",[162,103929,103930],{"class":179}," make\n",[19,103932,103933],{},"创建 Python 环境:",[153,103935,103937],{"className":26913,"code":103936,"language":26915,"meta":158,"style":158},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[71,103938,103939,103953,103961],{"__ignoreMap":158},[162,103940,103941,103944,103947,103950],{"class":164,"line":165},[162,103942,103943],{"class":5082},"python3",[162,103945,103946],{"class":207}," -m",[162,103948,103949],{"class":179}," venv",[162,103951,103952],{"class":179}," .venv\n",[162,103954,103955,103958],{"class":164,"line":197},[162,103956,103957],{"class":207},"source",[162,103959,103960],{"class":179}," .venv\u002Fbin\u002Factivate\n",[162,103962,103963,103965,103967,103970,103972,103975],{"class":164,"line":228},[162,103964,157],{"class":5082},[162,103966,103946],{"class":207},[162,103968,103969],{"class":179}," pip",[162,103971,26925],{"class":179},[162,103973,103974],{"class":207}," --upgrade",[162,103976,103977],{"class":179}," pip\n",[19,103979,103980],{},"pip 安装:",[153,103982,103984],{"className":26913,"code":103983,"language":26915,"meta":158,"style":158},"pip install \"mujoco>=2.3\" numpy\n",[71,103985,103986],{"__ignoreMap":158},[162,103987,103988,103990,103992,103995],{"class":164,"line":165},[162,103989,26922],{"class":5082},[162,103991,26925],{"class":179},[162,103993,103994],{"class":179}," \"mujoco>=2.3\"",[162,103996,103997],{"class":179}," numpy\n",[19,103999,104000],{},"安装完成后，先做最小检查：",[153,104002,104004],{"className":26913,"code":104003,"language":26915,"meta":158,"style":158},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[71,104005,104006],{"__ignoreMap":158},[162,104007,104008,104010,104012],{"class":164,"line":165},[162,104009,157],{"class":5082},[162,104011,33446],{"class":207},[162,104013,104014],{"class":179}," \"import mujoco; print(mujoco.__version__)\"\n",[19,104016,104017],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,104019,104020],{},"conda 安装:",[153,104022,104024],{"className":26913,"code":104023,"language":26915,"meta":158,"style":158},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[71,104025,104026,104046,104056],{"__ignoreMap":158},[162,104027,104028,104030,104032,104034,104037,104040,104043],{"class":164,"line":165},[162,104029,33418],{"class":5082},[162,104031,32264],{"class":179},[162,104033,28207],{"class":207},[162,104035,104036],{"class":179}," mujoco-study",[162,104038,104039],{"class":179}," python=",[162,104041,104042],{"class":207},"3.10",[162,104044,104045],{"class":207}," -y\n",[162,104047,104048,104050,104053],{"class":164,"line":197},[162,104049,33418],{"class":5082},[162,104051,104052],{"class":179}," activate",[162,104054,104055],{"class":179}," mujoco-study\n",[162,104057,104058,104060,104062,104064],{"class":164,"line":228},[162,104059,26922],{"class":5082},[162,104061,26925],{"class":179},[162,104063,103994],{"class":179},[162,104065,103997],{"class":179},[19,104067,104068],{},"版本冲突说明:",[1452,104070,104071,104077,104087,104096],{},[1455,104072,104073,104074,3183],{},"不要安装 ",[71,104075,104076],{},"mujoco-py",[1455,104078,104079,104080,104082,104083,104086],{},"如果旧项目里同时安装了 ",[71,104081,104076],{}," 和 ",[71,104084,104085],{},"mujoco","，建议新建干净虚拟环境。",[1455,104088,104089,104092,104093,3183],{},[71,104090,104091],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[71,104094,104095],{},"~\u002F.mujoco\u002Fmujoco210",[1455,104097,104098,104099,85604,104102,104105],{},"离屏渲染可能涉及 OpenGL 后端，",[71,104100,104101],{},"MUJOCO_GL=egl",[71,104103,104104],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,104107,104109],{"id":104108},"_3核心概念解释","3.核心概念解释",[19,104111,104112],{},"MuJoCo 的基本执行流程:",[153,104114,104117],{"className":104115,"code":104116,"language":8295,"meta":158},[8293],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[71,104118,104116],{"__ignoreMap":158},[19,104120,104121,104123],{},[71,104122,103773],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,104125,104126,104128,104129,3513,104132,3513,104135,3513,104138,3513,104141,3183],{},[71,104127,103783],{}," 存放仿真运行时状态，例如 ",[71,104130,104131],{},"data.time",[71,104133,104134],{},"data.qpos",[71,104136,104137],{},"data.qvel",[71,104139,104140],{},"data.ctrl",[71,104142,104143],{},"data.xpos",[3284,104145,104147],{"id":104146},"xml-是什么","XML 是什么",[19,104149,104150],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[153,104152,104154],{"className":56137,"code":104153,"language":56139,"meta":158,"style":158},"\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",[71,104155,104156,104178,104209],{"__ignoreMap":158},[162,104157,104158,104160,104162,104164,104166,104168,104171,104173,104176],{"class":164,"line":165},[162,104159,4187],{"class":168},[162,104161,54872],{"class":54373},[162,104163,18013],{"class":5082},[162,104165,173],{"class":168},[162,104167,56561],{"class":179},[162,104169,104170],{"class":5082}," pos",[162,104172,173],{"class":168},[162,104174,104175],{"class":179},"\"0 0 1\"",[162,104177,54380],{"class":168},[162,104179,104180,104182,104185,104187,104189,104192,104194,104196,104198,104201,104203,104206],{"class":164,"line":197},[162,104181,55215],{"class":168},[162,104183,104184],{"class":54373},"geom",[162,104186,18013],{"class":5082},[162,104188,173],{"class":168},[162,104190,104191],{"class":179},"\"box_geom\"",[162,104193,56894],{"class":5082},[162,104195,173],{"class":168},[162,104197,56561],{"class":179},[162,104199,104200],{"class":5082}," size",[162,104202,173],{"class":168},[162,104204,104205],{"class":179},"\"0.1 0.1 0.1\"",[162,104207,104208],{"class":168},"\u002F>\n",[162,104210,104211,104213,104215],{"class":164,"line":228},[162,104212,54857],{"class":168},[162,104214,54872],{"class":54373},[162,104216,54380],{"class":168},[19,104218,104219],{},"这段意思是：",[1452,104221,104222,104228,104235],{},[1455,104223,104224,104225,104227],{},"创建一个叫 ",[71,104226,56784],{}," 的刚体。",[1455,104229,104230,104231,104234],{},"它初始放在 ",[71,104232,104233],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[1455,104236,104237],{},"它里面有一个盒子形状的几何体。",[3284,104239,104241],{"id":104240},"timestep-是什么","timestep 是什么",[19,104243,104244],{},"XML 里的：",[153,104246,104248],{"className":56137,"code":104247,"language":56139,"meta":158,"style":158},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[71,104249,104250],{"__ignoreMap":158},[162,104251,104252,104254,104256,104259,104261,104264,104267,104269,104272],{"class":164,"line":165},[162,104253,4187],{"class":168},[162,104255,72232],{"class":54373},[162,104257,104258],{"class":5082}," timestep",[162,104260,173],{"class":168},[162,104262,104263],{"class":179},"\"0.01\"",[162,104265,104266],{"class":5082}," gravity",[162,104268,173],{"class":168},[162,104270,104271],{"class":179},"\"0 0 -9.81\"",[162,104273,104208],{"class":168},[19,104275,104276,104277,104280,104281,104283],{},"表示每调用一次 ",[71,104278,104279],{},"mj_step","，仿真时间前进 ",[71,104282,42061],{}," 秒。循环 100 次，大约就是 1 秒：",[153,104285,104288],{"className":104286,"code":104287,"language":8295,"meta":158},[8293],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[71,104289,104287],{"__ignoreMap":158},[3284,104291,104293],{"id":104292},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,104295,104296],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[153,104298,104301],{"className":104299,"code":104300,"language":8295,"meta":158},[8293],"x y z qw qx qy qz\n",[71,104302,104300],{"__ignoreMap":158},[19,104304,104305,104306,104309,104310,104313],{},"表示一个自由刚体的位置和姿态。其中 ",[71,104307,104308],{},"x y z"," 是位置，",[71,104311,104312],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,104315,104317],{"id":104316},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,104319,104320],{},"新建文件:",[153,104322,104324],{"className":26913,"code":104323,"language":26915,"meta":158,"style":158},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[71,104325,104326,104336,104343],{"__ignoreMap":158},[162,104327,104328,104331,104333],{"class":164,"line":165},[162,104329,104330],{"class":5082},"mkdir",[162,104332,32304],{"class":207},[162,104334,104335],{"class":179}," mujoco_tutorial\n",[162,104337,104338,104341],{"class":164,"line":197},[162,104339,104340],{"class":207},"cd",[162,104342,104335],{"class":179},[162,104344,104345,104348],{"class":164,"line":228},[162,104346,104347],{"class":5082},"touch",[162,104349,104350],{"class":179}," ch1_first_sim.py\n",[19,104352,104353],{},"写入:",[153,104355,104357],{"className":155,"code":104356,"language":157,"meta":158,"style":158},"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",[71,104358,104359,104366,104370,104374,104384,104389,104394,104398,104403,104408,104412,104417,104422,104427,104432,104437,104442,104446,104450,104454,104467,104481,104491,104495,104507,104519,104531,104543,104555,104559,104576,104581,104585,104596,104607,104611,104615,104628],{"__ignoreMap":158},[162,104360,104361,104363],{"class":164,"line":165},[162,104362,33478],{"class":172},[162,104364,104365],{"class":168}," mujoco\n",[162,104367,104368],{"class":164,"line":197},[162,104369,301],{"emptyLinePlaceholder":300},[162,104371,104372],{"class":164,"line":228},[162,104373,301],{"emptyLinePlaceholder":300},[162,104375,104376,104379,104381],{"class":164,"line":252},[162,104377,104378],{"class":207},"XML",[162,104380,16659],{"class":172},[162,104382,104383],{"class":179}," \"\"\"\n",[162,104385,104386],{"class":164,"line":328},[162,104387,104388],{"class":179},"\u003Cmujoco model=\"first_sim\">\n",[162,104390,104391],{"class":164,"line":466},[162,104392,104393],{"class":179},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[162,104395,104396],{"class":164,"line":471},[162,104397,301],{"emptyLinePlaceholder":300},[162,104399,104400],{"class":164,"line":687},[162,104401,104402],{"class":179},"  \u003Cworldbody>\n",[162,104404,104405],{"class":164,"line":692},[162,104406,104407],{"class":179},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[162,104409,104410],{"class":164,"line":698},[162,104411,301],{"emptyLinePlaceholder":300},[162,104413,104414],{"class":164,"line":2955},[162,104415,104416],{"class":179},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[162,104418,104419],{"class":164,"line":2960},[162,104420,104421],{"class":179},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[162,104423,104424],{"class":164,"line":2971},[162,104425,104426],{"class":179},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[162,104428,104429],{"class":164,"line":2984},[162,104430,104431],{"class":179},"    \u003C\u002Fbody>\n",[162,104433,104434],{"class":164,"line":2989},[162,104435,104436],{"class":179},"  \u003C\u002Fworldbody>\n",[162,104438,104439],{"class":164,"line":3011},[162,104440,104441],{"class":179},"\u003C\u002Fmujoco>\n",[162,104443,104444],{"class":164,"line":3022},[162,104445,98763],{"class":179},[162,104447,104448],{"class":164,"line":3027},[162,104449,301],{"emptyLinePlaceholder":300},[162,104451,104452],{"class":164,"line":3046},[162,104453,301],{"emptyLinePlaceholder":300},[162,104455,104456,104458,104460,104463,104465],{"class":164,"line":3052},[162,104457,35026],{"class":172},[162,104459,5092],{"class":5082},[162,104461,104462],{"class":168},"() -> ",[162,104464,98751],{"class":207},[162,104466,2316],{"class":168},[162,104468,104469,104472,104474,104477,104479],{"class":164,"line":3057},[162,104470,104471],{"class":168},"    model ",[162,104473,173],{"class":172},[162,104475,104476],{"class":168}," mujoco.MjModel.from_xml_string(",[162,104478,104378],{"class":207},[162,104480,434],{"class":168},[162,104482,104483,104486,104488],{"class":164,"line":3072},[162,104484,104485],{"class":168},"    data ",[162,104487,173],{"class":172},[162,104489,104490],{"class":168}," mujoco.MjData(model)\n",[162,104492,104493],{"class":164,"line":3077},[162,104494,301],{"emptyLinePlaceholder":300},[162,104496,104497,104499,104501,104504],{"class":164,"line":3100},[162,104498,822],{"class":207},[162,104500,604],{"class":168},[162,104502,104503],{"class":179},"\"nq:\"",[162,104505,104506],{"class":168},", model.nq)\n",[162,104508,104509,104511,104513,104516],{"class":164,"line":3140},[162,104510,822],{"class":207},[162,104512,604],{"class":168},[162,104514,104515],{"class":179},"\"nv:\"",[162,104517,104518],{"class":168},", model.nv)\n",[162,104520,104521,104523,104525,104528],{"class":164,"line":4878},[162,104522,822],{"class":207},[162,104524,604],{"class":168},[162,104526,104527],{"class":179},"\"nu:\"",[162,104529,104530],{"class":168},", model.nu)\n",[162,104532,104533,104535,104537,104540],{"class":164,"line":4883},[162,104534,822],{"class":207},[162,104536,604],{"class":168},[162,104538,104539],{"class":179},"\"initial time:\"",[162,104541,104542],{"class":168},", data.time)\n",[162,104544,104545,104547,104549,104552],{"class":164,"line":4897},[162,104546,822],{"class":207},[162,104548,604],{"class":168},[162,104550,104551],{"class":179},"\"initial qpos:\"",[162,104553,104554],{"class":168},", data.qpos.copy())\n",[162,104556,104557],{"class":164,"line":4902},[162,104558,301],{"emptyLinePlaceholder":300},[162,104560,104561,104563,104566,104568,104570,104572,104574],{"class":164,"line":5694},[162,104562,6315],{"class":172},[162,104564,104565],{"class":168}," _ ",[162,104567,814],{"class":172},[162,104569,2647],{"class":207},[162,104571,604],{"class":168},[162,104573,3608],{"class":207},[162,104575,33870],{"class":168},[162,104577,104578],{"class":164,"line":5708},[162,104579,104580],{"class":168},"        mujoco.mj_step(model, data)\n",[162,104582,104583],{"class":164,"line":5716},[162,104584,301],{"emptyLinePlaceholder":300},[162,104586,104587,104589,104591,104594],{"class":164,"line":5721},[162,104588,822],{"class":207},[162,104590,604],{"class":168},[162,104592,104593],{"class":179},"\"final time:\"",[162,104595,104542],{"class":168},[162,104597,104598,104600,104602,104605],{"class":164,"line":5727},[162,104599,822],{"class":207},[162,104601,604],{"class":168},[162,104603,104604],{"class":179},"\"final qpos:\"",[162,104606,104554],{"class":168},[162,104608,104609],{"class":164,"line":5733},[162,104610,301],{"emptyLinePlaceholder":300},[162,104612,104613],{"class":164,"line":5738},[162,104614,301],{"emptyLinePlaceholder":300},[162,104616,104617,104619,104621,104623,104626],{"class":164,"line":11052},[162,104618,2703],{"class":172},[162,104620,34304],{"class":207},[162,104622,2714],{"class":172},[162,104624,104625],{"class":179}," \"__main__\"",[162,104627,2316],{"class":168},[162,104629,104630],{"class":164,"line":11076},[162,104631,104632],{"class":168},"    main()\n",[3284,104634,104635],{"id":104635},"代码逐段解释",[19,104637,104638],{},"导入库：",[153,104640,104642],{"className":155,"code":104641,"language":157,"meta":158,"style":158},"import mujoco\n",[71,104643,104644],{"__ignoreMap":158},[162,104645,104646,104648],{"class":164,"line":165},[162,104647,33478],{"class":172},[162,104649,104365],{"class":168},[19,104651,104652],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,104654,104655],{},"定义 XML：",[153,104657,104659],{"className":155,"code":104658,"language":157,"meta":158,"style":158},"XML = \"\"\"\n...\n\"\"\"\n",[71,104660,104661,104669,104674],{"__ignoreMap":158},[162,104662,104663,104665,104667],{"class":164,"line":165},[162,104664,104378],{"class":207},[162,104666,16659],{"class":172},[162,104668,104383],{"class":179},[162,104670,104671],{"class":164,"line":197},[162,104672,104673],{"class":179},"...\n",[162,104675,104676],{"class":164,"line":228},[162,104677,98763],{"class":179},[19,104679,104680,104681,104684],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[71,104682,104683],{},"freejoint"," 的方块。",[19,104686,104687],{},"编译模型：",[153,104689,104691],{"className":155,"code":104690,"language":157,"meta":158,"style":158},"model = mujoco.MjModel.from_xml_string(XML)\n",[71,104692,104693],{"__ignoreMap":158},[162,104694,104695,104698,104700,104702,104704],{"class":164,"line":165},[162,104696,104697],{"class":168},"model ",[162,104699,173],{"class":172},[162,104701,104476],{"class":168},[162,104703,104378],{"class":207},[162,104705,434],{"class":168},[19,104707,104708],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,104710,104711],{},"创建数据：",[153,104713,104715],{"className":155,"code":104714,"language":157,"meta":158,"style":158},"data = mujoco.MjData(model)\n",[71,104716,104717],{"__ignoreMap":158},[162,104718,104719,104722,104724],{"class":164,"line":165},[162,104720,104721],{"class":168},"data ",[162,104723,173],{"class":172},[162,104725,104490],{"class":168},[19,104727,104728,104730,104731,104733],{},[71,104729,36476],{}," 会保存仿真当前状态。刚创建时，时间是 ",[71,104732,312],{},"，方块还在初始位置。",[19,104735,104736],{},"推进仿真：",[153,104738,104740],{"className":155,"code":104739,"language":157,"meta":158,"style":158},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[71,104741,104742,104758],{"__ignoreMap":158},[162,104743,104744,104746,104748,104750,104752,104754,104756],{"class":164,"line":165},[162,104745,808],{"class":172},[162,104747,104565],{"class":168},[162,104749,814],{"class":172},[162,104751,2647],{"class":207},[162,104753,604],{"class":168},[162,104755,3608],{"class":207},[162,104757,33870],{"class":168},[162,104759,104760],{"class":164,"line":197},[162,104761,104762],{"class":168},"    mujoco.mj_step(model, data)\n",[19,104764,104765,104766,104768],{},"每次 ",[71,104767,104279],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[3284,104770,104771],{"id":104771},"代码逐行细讲",[19,104773,104774],{},"下面把完整代码按新手视角拆开讲。",[153,104776,104777],{"className":155,"code":104641,"language":157,"meta":158,"style":158},[71,104778,104779],{"__ignoreMap":158},[162,104780,104781,104783],{"class":164,"line":165},[162,104782,33478],{"class":172},[162,104784,104365],{"class":168},[19,104786,104787,104789,104790,3513,104792,3513,104794,3183],{},[71,104788,33478],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[71,104791,103739],{},[71,104793,103744],{},[71,104795,104796],{},"mujoco.mj_step",[153,104798,104799],{"className":155,"code":104658,"language":157,"meta":158,"style":158},[71,104800,104801,104809,104813],{"__ignoreMap":158},[162,104802,104803,104805,104807],{"class":164,"line":165},[162,104804,104378],{"class":207},[162,104806,16659],{"class":172},[162,104808,104383],{"class":179},[162,104810,104811],{"class":164,"line":197},[162,104812,104673],{"class":179},[162,104814,104815],{"class":164,"line":228},[162,104816,98763],{"class":179},[19,104818,104819,104821,104822,104825],{},[71,104820,104378],{}," 是一个变量名。右边的三引号 ",[71,104823,104824],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[153,104827,104828],{"className":56137,"code":104388,"language":56139,"meta":158,"style":158},[71,104829,104830],{"__ignoreMap":158},[162,104831,104832,104834,104836,104839,104841,104844],{"class":164,"line":165},[162,104833,4187],{"class":168},[162,104835,104085],{"class":54373},[162,104837,104838],{"class":5082}," model",[162,104840,173],{"class":168},[162,104842,104843],{"class":179},"\"first_sim\"",[162,104845,54380],{"class":168},[19,104847,104848,104849,104852,104853,3183],{},"这是 XML 的根标签。",[71,104850,104851],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[71,104854,104855],{},"first_sim",[153,104857,104858],{"className":56137,"code":104247,"language":56139,"meta":158,"style":158},[71,104859,104860],{"__ignoreMap":158},[162,104861,104862,104864,104866,104868,104870,104872,104874,104876,104878],{"class":164,"line":165},[162,104863,4187],{"class":168},[162,104865,72232],{"class":54373},[162,104867,104258],{"class":5082},[162,104869,173],{"class":168},[162,104871,104263],{"class":179},[162,104873,104266],{"class":5082},[162,104875,173],{"class":168},[162,104877,104271],{"class":179},[162,104879,104208],{"class":168},[19,104881,104882,104884,104885,104888,104889,104892],{},[71,104883,72232],{}," 用来设置仿真参数。",[71,104886,104887],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[71,104890,104891],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[153,104894,104896],{"className":56137,"code":104895,"language":56139,"meta":158,"style":158},"\u003Cworldbody>\n",[71,104897,104898],{"__ignoreMap":158},[162,104899,104900,104902,104905],{"class":164,"line":165},[162,104901,4187],{"class":168},[162,104903,104904],{"class":54373},"worldbody",[162,104906,54380],{"class":168},[19,104908,104909,104911],{},[71,104910,104904],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[153,104913,104915],{"className":56137,"code":104914,"language":56139,"meta":158,"style":158},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[71,104916,104917],{"__ignoreMap":158},[162,104918,104919,104921,104923,104925,104927,104930,104932,104934,104937,104939,104941,104944,104946,104948,104951],{"class":164,"line":165},[162,104920,4187],{"class":168},[162,104922,104184],{"class":54373},[162,104924,18013],{"class":5082},[162,104926,173],{"class":168},[162,104928,104929],{"class":179},"\"floor\"",[162,104931,56894],{"class":5082},[162,104933,173],{"class":168},[162,104935,104936],{"class":179},"\"plane\"",[162,104938,104200],{"class":5082},[162,104940,173],{"class":168},[162,104942,104943],{"class":179},"\"2 2 0.1\"",[162,104945,81832],{"class":5082},[162,104947,173],{"class":168},[162,104949,104950],{"class":179},"\"0.8 0.8 0.8 1\"",[162,104952,104208],{"class":168},[19,104954,104955,104956,104958,104959,104962,104963,104966,104967,104969],{},"这行创建地面。",[71,104957,104184],{}," 是几何体。",[71,104960,104961],{},"name=\"floor\""," 是名字。",[71,104964,104965],{},"type=\"plane\""," 表示平面。",[71,104968,58180],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[153,104971,104973],{"className":56137,"code":104972,"language":56139,"meta":158,"style":158},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[71,104974,104975],{"__ignoreMap":158},[162,104976,104977,104979,104981,104983,104985,104987,104989,104991,104993],{"class":164,"line":165},[162,104978,4187],{"class":168},[162,104980,54872],{"class":54373},[162,104982,18013],{"class":5082},[162,104984,173],{"class":168},[162,104986,56561],{"class":179},[162,104988,104170],{"class":5082},[162,104990,173],{"class":168},[162,104992,104175],{"class":179},[162,104994,54380],{"class":168},[19,104996,104997,104998,3183,105000,105003,105004,105006],{},"这行创建一个刚体，名字叫 ",[71,104999,56784],{},[71,105001,105002],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[71,105005,104233],{},"，也就是离地面 1 米高。",[153,105008,105010],{"className":56137,"code":105009,"language":56139,"meta":158,"style":158},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[71,105011,105012],{"__ignoreMap":158},[162,105013,105014,105016,105018,105020,105022,105025],{"class":164,"line":165},[162,105015,4187],{"class":168},[162,105017,104683],{"class":54373},[162,105019,18013],{"class":5082},[162,105021,173],{"class":168},[162,105023,105024],{"class":179},"\"box_free\"",[162,105026,104208],{"class":168},[19,105028,105029,105030,105032],{},"这行很重要。",[71,105031,104683],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[153,105034,105036],{"className":56137,"code":105035,"language":56139,"meta":158,"style":158},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[71,105037,105038],{"__ignoreMap":158},[162,105039,105040,105042,105044,105046,105048,105050,105052,105054,105056,105058,105060,105062,105065,105067,105069,105071,105073,105076],{"class":164,"line":165},[162,105041,4187],{"class":168},[162,105043,104184],{"class":54373},[162,105045,18013],{"class":5082},[162,105047,173],{"class":168},[162,105049,104191],{"class":179},[162,105051,56894],{"class":5082},[162,105053,173],{"class":168},[162,105055,56561],{"class":179},[162,105057,104200],{"class":5082},[162,105059,173],{"class":168},[162,105061,104205],{"class":179},[162,105063,105064],{"class":5082}," mass",[162,105066,173],{"class":168},[162,105068,6792],{"class":179},[162,105070,81832],{"class":5082},[162,105072,173],{"class":168},[162,105074,105075],{"class":179},"\"1 0 0 1\"",[162,105077,104208],{"class":168},[19,105079,105080,105081,105084,105085,105088,105089,105092,105093,105096],{},"这行给 box body 添加一个盒子形状。",[71,105082,105083],{},"type=\"box\""," 表示形状是盒子。",[71,105086,105087],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[71,105090,105091],{},"mass=\"1\""," 表示质量是 1。",[71,105094,105095],{},"rgba=\"1 0 0 1\""," 表示红色。",[153,105098,105100],{"className":155,"code":105099,"language":157,"meta":158,"style":158},"def main() -> None:\n",[71,105101,105102],{"__ignoreMap":158},[162,105103,105104,105106,105108,105110,105112],{"class":164,"line":165},[162,105105,35026],{"class":172},[162,105107,5092],{"class":5082},[162,105109,104462],{"class":168},[162,105111,98751],{"class":207},[162,105113,2316],{"class":168},[19,105115,105116,105118,105119,105122,105123,105126],{},[71,105117,35026],{}," 用来定义函数。这里定义了一个叫 ",[71,105120,105121],{},"main"," 的函数。",[71,105124,105125],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[153,105128,105129],{"className":155,"code":104690,"language":157,"meta":158,"style":158},[71,105130,105131],{"__ignoreMap":158},[162,105132,105133,105135,105137,105139,105141],{"class":164,"line":165},[162,105134,104697],{"class":168},[162,105136,173],{"class":172},[162,105138,104476],{"class":168},[162,105140,104378],{"class":207},[162,105142,434],{"class":168},[19,105144,105145,105146,105149],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[71,105147,105148],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[153,105151,105152],{"className":155,"code":104714,"language":157,"meta":158,"style":158},[71,105153,105154],{"__ignoreMap":158},[162,105155,105156,105158,105160],{"class":164,"line":165},[162,105157,104721],{"class":168},[162,105159,173],{"class":172},[162,105161,104490],{"class":168},[19,105163,105164,105165,105167,105168,105170],{},"这行创建仿真数据。",[71,105166,36476],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[71,105169,36476],{}," 都会变化。",[153,105172,105174],{"className":155,"code":105173,"language":157,"meta":158,"style":158},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[71,105175,105176,105186,105196],{"__ignoreMap":158},[162,105177,105178,105180,105182,105184],{"class":164,"line":165},[162,105179,306],{"class":207},[162,105181,604],{"class":168},[162,105183,104503],{"class":179},[162,105185,104506],{"class":168},[162,105187,105188,105190,105192,105194],{"class":164,"line":197},[162,105189,306],{"class":207},[162,105191,604],{"class":168},[162,105193,104515],{"class":179},[162,105195,104518],{"class":168},[162,105197,105198,105200,105202,105204],{"class":164,"line":228},[162,105199,306],{"class":207},[162,105201,604],{"class":168},[162,105203,104527],{"class":179},[162,105205,104530],{"class":168},[19,105207,105208,105210,105211,105214,105215,105218,105219,105222,105223,105226],{},[71,105209,306],{}," 用来输出信息。",[71,105212,105213],{},"model.nq"," 是位置变量数量，",[71,105216,105217],{},"model.nv"," 是速度变量数量，",[71,105220,105221],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[71,105224,105225],{},"nu"," 是 0。",[153,105228,105230],{"className":155,"code":105229,"language":157,"meta":158,"style":158},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[71,105231,105232,105242],{"__ignoreMap":158},[162,105233,105234,105236,105238,105240],{"class":164,"line":165},[162,105235,306],{"class":207},[162,105237,604],{"class":168},[162,105239,104539],{"class":179},[162,105241,104542],{"class":168},[162,105243,105244,105246,105248,105250],{"class":164,"line":197},[162,105245,306],{"class":207},[162,105247,604],{"class":168},[162,105249,104551],{"class":179},[162,105251,104554],{"class":168},[19,105253,105254,105255,105257,105258,105260,105261,105264],{},"这里打印初始时间和初始位置。",[71,105256,104131],{}," 一开始是 0。",[71,105259,104134],{}," 是位置数组。",[71,105262,105263],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[153,105266,105267],{"className":155,"code":104739,"language":157,"meta":158,"style":158},[71,105268,105269,105285],{"__ignoreMap":158},[162,105270,105271,105273,105275,105277,105279,105281,105283],{"class":164,"line":165},[162,105272,808],{"class":172},[162,105274,104565],{"class":168},[162,105276,814],{"class":172},[162,105278,2647],{"class":207},[162,105280,604],{"class":168},[162,105282,3608],{"class":207},[162,105284,33870],{"class":168},[162,105286,105287],{"class":164,"line":197},[162,105288,104762],{"class":168},[19,105290,105291,105293,105294,105297,105298,105300,105301,105303],{},[71,105292,808],{}," 是循环。",[71,105295,105296],{},"range(100)"," 表示循环 100 次。",[71,105299,4264],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[71,105302,104279],{},"，仿真就前进一步。",[153,105305,105307],{"className":155,"code":105306,"language":157,"meta":158,"style":158},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[71,105308,105309,105319],{"__ignoreMap":158},[162,105310,105311,105313,105315,105317],{"class":164,"line":165},[162,105312,306],{"class":207},[162,105314,604],{"class":168},[162,105316,104593],{"class":179},[162,105318,104542],{"class":168},[162,105320,105321,105323,105325,105327],{"class":164,"line":197},[162,105322,306],{"class":207},[162,105324,604],{"class":168},[162,105326,104604],{"class":179},[162,105328,104554],{"class":168},[19,105330,105331],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[153,105333,105335],{"className":155,"code":105334,"language":157,"meta":158,"style":158},"if __name__ == \"__main__\":\n    main()\n",[71,105336,105337,105349],{"__ignoreMap":158},[162,105338,105339,105341,105343,105345,105347],{"class":164,"line":165},[162,105340,2703],{"class":172},[162,105342,34304],{"class":207},[162,105344,2714],{"class":172},[162,105346,104625],{"class":179},[162,105348,2316],{"class":168},[162,105350,105351],{"class":164,"line":197},[162,105352,104632],{"class":168},[19,105354,105355,105356,105359,105360,3183],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[71,105357,105358],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[71,105361,105358],{},[19,105363,105364],{},"运行:",[153,105366,105368],{"className":26913,"code":105367,"language":26915,"meta":158,"style":158},"python ch1_first_sim.py\n",[71,105369,105370],{"__ignoreMap":158},[162,105371,105372,105374],{"class":164,"line":165},[162,105373,157],{"class":5082},[162,105375,104350],{"class":179},[14,105377,105379],{"id":105378},"_5运行结果说明","5.运行结果说明",[19,105381,105382],{},"你应该看到类似输出:",[153,105384,105387],{"className":105385,"code":105386,"language":8295,"meta":158},[8293],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[71,105388,105386],{"__ignoreMap":158},[19,105390,105391,105393,105394,105397,105398,3183],{},[71,105392,104683],{}," 有 7 个位置变量: ",[71,105395,105396],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[71,105399,105400],{},"vx vy vz wx wy wz",[19,105402,105403,105404,105407],{},"你还会看到 ",[71,105405,105406],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,105409,105411],{"id":105410},"_6验证步骤","6.验证步骤",[19,105413,105414],{},"确认版本:",[153,105416,105417],{"className":26913,"code":104003,"language":26915,"meta":158,"style":158},[71,105418,105419],{"__ignoreMap":158},[162,105420,105421,105423,105425],{"class":164,"line":165},[162,105422,157],{"class":5082},[162,105424,33446],{"class":207},[162,105426,104014],{"class":179},[19,105428,105429],{},"确认导入的是官方 bindings:",[153,105431,105433],{"className":26913,"code":105432,"language":26915,"meta":158,"style":158},"python -c \"import mujoco; print(mujoco)\"\n",[71,105434,105435],{"__ignoreMap":158},[162,105436,105437,105439,105441],{"class":164,"line":165},[162,105438,157],{"class":5082},[162,105440,33446],{"class":207},[162,105442,105443],{"class":179}," \"import mujoco; print(mujoco)\"\n",[19,105445,105446],{},"运行程序:",[153,105448,105449],{"className":26913,"code":105367,"language":26915,"meta":158,"style":158},[71,105450,105451],{"__ignoreMap":158},[162,105452,105453,105455],{"class":164,"line":165},[162,105454,157],{"class":5082},[162,105456,104350],{"class":179},[19,105458,105459,105460,105463,105464,3183],{},"检查 ",[71,105461,105462],{},"final time"," 是否约等于 ",[71,105465,105466],{},"1.0",[19,105468,105469],{},"再做几个小实验：",[1452,105471,105472,105482,105490,105503],{},[1455,105473,105474,105475,105477,105478,105481],{},"把 ",[71,105476,105002],{}," 改成 ",[71,105479,105480],{},"pos=\"0 0 2\"","，观察初始高度变化。",[1455,105483,105474,105484,105477,105486,105489],{},[71,105485,104891],{},[71,105487,105488],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[1455,105491,105474,105492,105477,105494,105497,105498,105500,105501,3183],{},[71,105493,104887],{},[71,105495,105496],{},"timestep=\"0.005\"","，观察 100 步后的 ",[71,105499,105462],{}," 是否变成约 ",[71,105502,38404],{},[1455,105504,105505,105506,105509],{},"删除 ",[71,105507,105508],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,105511,105512],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,105514,105516],{"id":105515},"_7常见错误与解决方案","7.常见错误与解决方案",[3284,105518,105520],{"id":105519},"modulenotfounderror-no-module-named-mujoco",[71,105521,105522],{},"ModuleNotFoundError: No module named 'mujoco'",[19,105524,105525],{},"解决:",[153,105527,105529],{"className":26913,"code":105528,"language":26915,"meta":158,"style":158},"pip install \"mujoco>=2.3\"\n",[71,105530,105531],{"__ignoreMap":158},[162,105532,105533,105535,105537],{"class":164,"line":165},[162,105534,26922],{"class":5082},[162,105536,26925],{"class":179},[162,105538,105539],{"class":179}," \"mujoco>=2.3\"\n",[3284,105541,105543],{"id":105542},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,105545,105546],{},"先安装系统依赖:",[153,105548,105550],{"className":26913,"code":105549,"language":26915,"meta":158,"style":158},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[71,105551,105552],{"__ignoreMap":158},[162,105553,105554,105556,105558,105560,105562,105565,105567,105570,105572,105575,105577],{"class":164,"line":165},[162,105555,27668],{"class":5082},[162,105557,29405],{"class":179},[162,105559,26925],{"class":179},[162,105561,29490],{"class":207},[162,105563,105564],{"class":179}," mesa-libGL",[162,105566,103878],{"class":179},[162,105568,105569],{"class":179}," glfw",[162,105571,103898],{"class":179},[162,105573,105574],{"class":179}," libX11",[162,105576,103911],{"class":179},[162,105578,105579],{"class":179}," libXrandr\n",[3284,105581,105583],{"id":105582},"xml-解析失败","XML 解析失败",[19,105585,105586],{},"检查:",[1452,105588,105589,105592,105595,105601],{},[1455,105590,105591],{},"标签是否闭合",[1455,105593,105594],{},"属性是否带引号",[1455,105596,105597,105598],{},"根节点是否是 ",[71,105599,105600],{},"\u003Cmujoco>",[1455,105602,105603,105605,105606,105609],{},[71,105604,54872],{}," 是否放在 ",[71,105607,105608],{},"\u003Cworldbody>"," 内部",[3284,105611,105613,105615,105616],{"id":105612},"final-time-不是严格等于-10",[71,105614,105462],{}," 不是严格等于 ",[71,105617,105466],{},[19,105619,105620],{},"这通常不是错误。浮点数计算可能得到：",[153,105622,105625],{"className":105623,"code":105624,"language":8295,"meta":158},[8293],"1.0000000000000007\n",[71,105626,105624],{"__ignoreMap":158},[19,105628,105629,105630,105632],{},"只要接近 ",[71,105631,105466],{}," 就正常。",[3284,105634,105635],{"id":105635},"方块没有掉下来",[19,105637,105638],{},"检查：",[1452,105640,105641,105647,105653,105658],{},[1455,105642,105643,105644],{},"方块 body 里是否有 ",[71,105645,105646],{},"\u003Cfreejoint\u002F>",[1455,105648,105649,105650],{},"重力是否是 ",[71,105651,105652],{},"0 0 -9.81",[1455,105654,105655,105656],{},"是否真的调用了 ",[71,105657,103749],{},[1455,105659,105660,105661,105663,105664],{},"你看的是否是 ",[71,105662,105406],{},"，不是 ",[71,105665,105666],{},"initial qpos",[14,105668,105670],{"id":105669},"_8本章小结","8.本章小结",[19,105672,105673],{},"本章你已经完成了 MuJoCo 的最小闭环：",[153,105675,105678],{"className":105676,"code":105677,"language":8295,"meta":158},[8293],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[71,105679,105677],{"__ignoreMap":158},[19,105681,105682],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[3219,105684,105685],{},"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":158,"searchDepth":197,"depth":197,"links":105687},[105688,105689,105690,105695,105699,105700,105701,105709],{"id":103710,"depth":197,"text":103711},{"id":103833,"depth":197,"text":103834},{"id":104108,"depth":197,"text":104109,"children":105691},[105692,105693,105694],{"id":104146,"depth":228,"text":104147},{"id":104240,"depth":228,"text":104241},{"id":104292,"depth":228,"text":104293},{"id":104316,"depth":197,"text":104317,"children":105696},[105697,105698],{"id":104635,"depth":228,"text":104635},{"id":104771,"depth":228,"text":104771},{"id":105378,"depth":197,"text":105379},{"id":105410,"depth":197,"text":105411},{"id":105515,"depth":197,"text":105516,"children":105702},[105703,105704,105705,105706,105708],{"id":105519,"depth":228,"text":105522},{"id":105542,"depth":228,"text":105543},{"id":105582,"depth":228,"text":105583},{"id":105612,"depth":228,"text":105707},"final time 不是严格等于 1.0",{"id":105635,"depth":228,"text":105635},{"id":105669,"depth":197,"text":105670},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":103702,"description":158},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":105716,"title":105717,"body":105718,"description":158,"extension":3242,"meta":107373,"navigation":300,"path":107374,"seo":107375,"stem":107376,"__hash__":107377},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":105719,"toc":107349},[105720,105723,105725,105728,105731,105748,105843,105846,105852,105854,105856,105880,105883,105897,105900,105941,105943,105956,105958,105961,106009,106021,106024,106027,106033,106046,106113,106116,106135,106138,106141,106147,106149,106158,106161,106165,106173,106255,106264,106268,106274,106288,106298,106300,106630,106633,106645,106647,106658,106660,106663,106681,106684,106687,106705,106716,106719,106734,106744,106746,106767,106784,106804,106810,106850,106866,106882,106888,106891,106915,106931,106936,106966,106983,107008,107011,107026,107035,107050,107059,107074,107081,107083,107093,107106,107113,107116,107155,107162,107164,107216,107218,107224,107227,107234,107241,107244,107246,107264,107267,107270,107304,107316,107318,107321,107343,107346],[10,105721,105717],{"id":105722},"_2xml-与-mjcf-物理建模基础",[14,105724,103711],{"id":103710},[19,105726,105727],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,105729,105730],{},"本章结束后，你应该能看懂一个简单模型里：",[1452,105732,105733,105736,105739,105742,105745],{},[1455,105734,105735],{},"地面在哪里。",[1455,105737,105738],{},"物体初始位置在哪里。",[1455,105740,105741],{},"几何体是什么形状。",[1455,105743,105744],{},"哪些 body 可以自由运动。",[1455,105746,105747],{},"如何用名字在 Python 里找到 XML 中的对象。",[26,105749,105750,105760],{},[29,105751,105752],{},[32,105753,105754,105757],{},[35,105755,105756],{"align":26827},"标签",[35,105758,105759],{"align":26827},"作用",[51,105761,105762,105771,105781,105790,105800,105810,105823,105833],{},[32,105763,105764,105768],{},[56,105765,105766],{"align":26827},[71,105767,105600],{},[56,105769,105770],{"align":26827},"根节点",[32,105772,105773,105778],{},[56,105774,105775],{"align":26827},[71,105776,105777],{},"\u003Coption>",[56,105779,105780],{"align":26827},"仿真参数",[32,105782,105783,105787],{},[56,105784,105785],{"align":26827},[71,105786,105608],{},[56,105788,105789],{"align":26827},"世界中的物体",[32,105791,105792,105797],{},[56,105793,105794],{"align":26827},[71,105795,105796],{},"\u003Cbody>",[56,105798,105799],{"align":26827},"刚体",[32,105801,105802,105807],{},[56,105803,105804],{"align":26827},[71,105805,105806],{},"\u003Cgeom>",[56,105808,105809],{"align":26827},"几何体、碰撞体、可视体",[32,105811,105812,105820],{},[56,105813,105814,28070,105817],{"align":26827},[71,105815,105816],{},"\u003Cjoint>",[71,105818,105819],{},"\u003Cfreejoint>",[56,105821,105822],{"align":26827},"关节",[32,105824,105825,105830],{},[56,105826,105827],{"align":26827},[71,105828,105829],{},"\u003Csite>",[56,105831,105832],{"align":26827},"标记点",[32,105834,105835,105840],{},[56,105836,105837],{"align":26827},[71,105838,105839],{},"\u003Cactuator>",[56,105841,105842],{"align":26827},"控制器",[19,105844,105845],{},"初学时可以先记住：",[153,105847,105850],{"className":105848,"code":105849,"language":8295,"meta":158},[8293],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[71,105851,105849],{"__ignoreMap":158},[14,105853,103834],{"id":103833},[19,105855,103837],{},[153,105857,105859],{"className":26913,"code":105858,"language":26915,"meta":158,"style":158},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[71,105860,105861],{"__ignoreMap":158},[162,105862,105863,105865,105867,105869,105871,105873,105875,105877],{"class":164,"line":165},[162,105864,27668],{"class":5082},[162,105866,29405],{"class":179},[162,105868,26925],{"class":179},[162,105870,29490],{"class":207},[162,105872,105564],{"class":179},[162,105874,103878],{"class":179},[162,105876,105569],{"class":179},[162,105878,105879],{"class":179}," glfw-devel\n",[19,105881,105882],{},"pip:",[153,105884,105885],{"className":26913,"code":103983,"language":26915,"meta":158,"style":158},[71,105886,105887],{"__ignoreMap":158},[162,105888,105889,105891,105893,105895],{"class":164,"line":165},[162,105890,26922],{"class":5082},[162,105892,26925],{"class":179},[162,105894,103994],{"class":179},[162,105896,103997],{"class":179},[19,105898,105899],{},"conda:",[153,105901,105903],{"className":26913,"code":105902,"language":26915,"meta":158,"style":158},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[71,105904,105905,105922,105931],{"__ignoreMap":158},[162,105906,105907,105909,105911,105913,105916,105918,105920],{"class":164,"line":165},[162,105908,33418],{"class":5082},[162,105910,32264],{"class":179},[162,105912,28207],{"class":207},[162,105914,105915],{"class":179}," mujoco-xml",[162,105917,104039],{"class":179},[162,105919,104042],{"class":207},[162,105921,104045],{"class":207},[162,105923,105924,105926,105928],{"class":164,"line":197},[162,105925,33418],{"class":5082},[162,105927,104052],{"class":179},[162,105929,105930],{"class":179}," mujoco-xml\n",[162,105932,105933,105935,105937,105939],{"class":164,"line":228},[162,105934,26922],{"class":5082},[162,105936,26925],{"class":179},[162,105938,103994],{"class":179},[162,105940,103997],{"class":179},[19,105942,104068],{},[1452,105944,105945,105948,105953],{},[1455,105946,105947],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[1455,105949,105950,105951,3183],{},"本章使用基础标签，适用于 ",[71,105952,104091],{},[1455,105954,105955],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,105957,104109],{"id":104108},[19,105959,105960],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[153,105962,105964],{"className":56137,"code":105963,"language":56139,"meta":158,"style":158},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[71,105965,105966,105980,105988,105993,106001],{"__ignoreMap":158},[162,105967,105968,105970,105972,105974,105976,105978],{"class":164,"line":165},[162,105969,4187],{"class":168},[162,105971,104085],{"class":54373},[162,105973,104838],{"class":5082},[162,105975,173],{"class":168},[162,105977,1778],{"class":179},[162,105979,54380],{"class":168},[162,105981,105982,105984,105986],{"class":164,"line":197},[162,105983,55215],{"class":168},[162,105985,104904],{"class":54373},[162,105987,54380],{"class":168},[162,105989,105990],{"class":164,"line":228},[162,105991,105992],{"class":168},"    ...\n",[162,105994,105995,105997,105999],{"class":164,"line":252},[162,105996,55487],{"class":168},[162,105998,104904],{"class":54373},[162,106000,54380],{"class":168},[162,106002,106003,106005,106007],{"class":164,"line":328},[162,106004,54857],{"class":168},[162,106006,104085],{"class":54373},[162,106008,54380],{"class":168},[19,106010,106011,106013,106014,106016,106017,106020],{},[71,106012,54872],{}," 表示刚体。",[71,106015,104184],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[71,106018,106019],{},"joint"," 表示刚体相对父刚体如何运动。",[3284,106022,106023],{"id":106023},"层级结构非常重要",[19,106025,106026],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[153,106028,106031],{"className":106029,"code":106030,"language":8295,"meta":158},[8293],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[71,106032,106030],{"__ignoreMap":158},[19,106034,106035,104082,106038,106041,106042,106045],{},[71,106036,106037],{},"red_box_geom",[71,106039,106040],{},"box_center"," 都属于 ",[71,106043,106044],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[153,106047,106049],{"className":56137,"code":106048,"language":56139,"meta":158,"style":158},"\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",[71,106050,106051,106071,106085,106105],{"__ignoreMap":158},[162,106052,106053,106055,106057,106059,106061,106063,106065,106067,106069],{"class":164,"line":165},[162,106054,4187],{"class":168},[162,106056,54872],{"class":54373},[162,106058,18013],{"class":5082},[162,106060,173],{"class":168},[162,106062,56561],{"class":179},[162,106064,104170],{"class":5082},[162,106066,173],{"class":168},[162,106068,104175],{"class":179},[162,106070,54380],{"class":168},[162,106072,106073,106075,106077,106079,106081,106083],{"class":164,"line":197},[162,106074,55215],{"class":168},[162,106076,104683],{"class":54373},[162,106078,18013],{"class":5082},[162,106080,173],{"class":168},[162,106082,105024],{"class":179},[162,106084,104208],{"class":168},[162,106086,106087,106089,106091,106093,106095,106097,106099,106101,106103],{"class":164,"line":228},[162,106088,55215],{"class":168},[162,106090,104184],{"class":54373},[162,106092,56894],{"class":5082},[162,106094,173],{"class":168},[162,106096,56561],{"class":179},[162,106098,104200],{"class":5082},[162,106100,173],{"class":168},[162,106102,104205],{"class":179},[162,106104,104208],{"class":168},[162,106106,106107,106109,106111],{"class":164,"line":252},[162,106108,54857],{"class":168},[162,106110,54872],{"class":54373},[162,106112,54380],{"class":168},[19,106114,106115],{},"含义:",[1452,106117,106118,106124,106129,106132],{},[1455,106119,106120,106121,106123],{},"创建名为 ",[71,106122,56784],{}," 的刚体",[1455,106125,106126,106127],{},"初始位置在世界坐标 ",[71,106128,104233],{},[1455,106130,106131],{},"它有一个自由关节",[1455,106133,106134],{},"它有一个盒子几何体",[3284,106136,106137],{"id":106137},"坐标怎么理解",[19,106139,106140],{},"MuJoCo 默认使用三维坐标：",[153,106142,106145],{"className":106143,"code":106144,"language":8295,"meta":158},[8293],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[71,106146,106144],{"__ignoreMap":158},[19,106148,17727],{},[153,106150,106152],{"className":56137,"code":106151,"language":56139,"meta":158,"style":158},"pos=\"0 0 1\"\n",[71,106153,106154],{"__ignoreMap":158},[162,106155,106156],{"class":164,"line":165},[162,106157,106151],{"class":168},[19,106159,106160],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[3284,106162,106164],{"id":106163},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,106166,106167,106168,85595,106170,106172],{},"不同 ",[71,106169,1083],{},[71,106171,34577],{}," 含义不同：",[26,106174,106175,106190],{},[29,106176,106177],{},[32,106178,106179,106183,106188],{},[35,106180,106181],{"align":26827},[71,106182,1083],{},[35,106184,106185,106187],{"align":26827},[71,106186,34577],{}," 示例",[35,106189,103764],{"align":26827},[51,106191,106192,106206,106221,106240],{},[32,106193,106194,106198,106203],{},[56,106195,106196],{"align":26827},[71,106197,56784],{},[56,106199,106200],{"align":26827},[71,106201,106202],{},"size=\"0.1 0.2 0.3\"",[56,106204,106205],{"align":26827},"x\u002Fy\u002Fz 半边长，不是完整长度",[32,106207,106208,106213,106218],{},[56,106209,106210],{"align":26827},[71,106211,106212],{},"sphere",[56,106214,106215],{"align":26827},[71,106216,106217],{},"size=\"0.1\"",[56,106219,106220],{"align":26827},"球半径",[32,106222,106223,106228,106233],{},[56,106224,106225],{"align":26827},[71,106226,106227],{},"capsule",[56,106229,106230],{"align":26827},[71,106231,106232],{},"size=\"0.03\"",[56,106234,106235,106236,106239],{"align":26827},"胶囊半径，长度常用 ",[71,106237,106238],{},"fromto"," 指定",[32,106241,106242,106247,106252],{},[56,106243,106244],{"align":26827},[71,106245,106246],{},"plane",[56,106248,106249],{"align":26827},[71,106250,106251],{},"size=\"3 3 0.1\"",[56,106253,106254],{"align":26827},"可视平面大小，通常当地面",[19,106256,106257,106258,106260,106261,106263],{},"最容易踩坑的是 box：",[71,106259,105087],{}," 表示边长大约是 ",[71,106262,35116],{},"，因为 MuJoCo 用的是半边长。",[3284,106265,106267],{"id":106266},"site-是什么","site 是什么",[19,106269,106270,106273],{},[71,106271,106272],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[1452,106275,106276,106279,106282,106285],{},[1455,106277,106278],{},"标记机械臂末端。",[1455,106280,106281],{},"标记目标位置。",[1455,106283,106284],{},"放传感器或相机参考点。",[1455,106286,106287],{},"在 Python 中读取某个关键点的世界坐标。",[19,106289,106290,106291,104082,106294,106297],{},"在后面的 Reacher 任务中，",[71,106292,106293],{},"tip",[71,106295,106296],{},"target"," 就会用 site 表示。",[14,106299,104317],{"id":104316},[153,106301,106303],{"className":155,"code":106302,"language":157,"meta":158,"style":158},"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",[71,106304,106305,106311,106321,106325,106329,106337,106342,106346,106350,106354,106359,106363,106368,106373,106378,106383,106387,106391,106395,106399,106403,106407,106419,106431,106439,106443,106458,106473,106477,106490,106505,106518,106531,106535,106551,106555,106559,106570,106582,106594,106606,106610,106614,106626],{"__ignoreMap":158},[162,106306,106307,106309],{"class":164,"line":165},[162,106308,33478],{"class":172},[162,106310,104365],{"class":168},[162,106312,106313,106315,106317,106319],{"class":164,"line":197},[162,106314,33478],{"class":172},[162,106316,34463],{"class":168},[162,106318,34466],{"class":172},[162,106320,34469],{"class":168},[162,106322,106323],{"class":164,"line":228},[162,106324,301],{"emptyLinePlaceholder":300},[162,106326,106327],{"class":164,"line":252},[162,106328,301],{"emptyLinePlaceholder":300},[162,106330,106331,106333,106335],{"class":164,"line":328},[162,106332,104378],{"class":207},[162,106334,16659],{"class":172},[162,106336,104383],{"class":179},[162,106338,106339],{"class":164,"line":466},[162,106340,106341],{"class":179},"\u003Cmujoco model=\"xml_basic\">\n",[162,106343,106344],{"class":164,"line":471},[162,106345,104393],{"class":179},[162,106347,106348],{"class":164,"line":687},[162,106349,301],{"emptyLinePlaceholder":300},[162,106351,106352],{"class":164,"line":692},[162,106353,104402],{"class":179},[162,106355,106356],{"class":164,"line":698},[162,106357,106358],{"class":179},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[162,106360,106361],{"class":164,"line":2955},[162,106362,301],{"emptyLinePlaceholder":300},[162,106364,106365],{"class":164,"line":2960},[162,106366,106367],{"class":179},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[162,106369,106370],{"class":164,"line":2971},[162,106371,106372],{"class":179},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[162,106374,106375],{"class":164,"line":2984},[162,106376,106377],{"class":179},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[162,106379,106380],{"class":164,"line":2989},[162,106381,106382],{"class":179},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[162,106384,106385],{"class":164,"line":3011},[162,106386,104431],{"class":179},[162,106388,106389],{"class":164,"line":3022},[162,106390,104436],{"class":179},[162,106392,106393],{"class":164,"line":3027},[162,106394,104441],{"class":179},[162,106396,106397],{"class":164,"line":3046},[162,106398,98763],{"class":179},[162,106400,106401],{"class":164,"line":3052},[162,106402,301],{"emptyLinePlaceholder":300},[162,106404,106405],{"class":164,"line":3057},[162,106406,301],{"emptyLinePlaceholder":300},[162,106408,106409,106411,106413,106415,106417],{"class":164,"line":3072},[162,106410,35026],{"class":172},[162,106412,5092],{"class":5082},[162,106414,104462],{"class":168},[162,106416,98751],{"class":207},[162,106418,2316],{"class":168},[162,106420,106421,106423,106425,106427,106429],{"class":164,"line":3077},[162,106422,104471],{"class":168},[162,106424,173],{"class":172},[162,106426,104476],{"class":168},[162,106428,104378],{"class":207},[162,106430,434],{"class":168},[162,106432,106433,106435,106437],{"class":164,"line":3100},[162,106434,104485],{"class":168},[162,106436,173],{"class":172},[162,106438,104490],{"class":168},[162,106440,106441],{"class":164,"line":3140},[162,106442,301],{"emptyLinePlaceholder":300},[162,106444,106445,106448,106450,106453,106456],{"class":164,"line":4878},[162,106446,106447],{"class":168},"    box_body_id ",[162,106449,173],{"class":172},[162,106451,106452],{"class":168}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[162,106454,106455],{"class":179},"\"red_box\"",[162,106457,434],{"class":168},[162,106459,106460,106463,106465,106468,106471],{"class":164,"line":4883},[162,106461,106462],{"class":168},"    site_id ",[162,106464,173],{"class":172},[162,106466,106467],{"class":168}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[162,106469,106470],{"class":179},"\"box_center\"",[162,106472,434],{"class":168},[162,106474,106475],{"class":164,"line":4897},[162,106476,301],{"emptyLinePlaceholder":300},[162,106478,106479,106481,106484,106486,106488],{"class":164,"line":4902},[162,106480,2283],{"class":172},[162,106482,106483],{"class":168}," box_body_id ",[162,106485,4187],{"class":172},[162,106487,2717],{"class":207},[162,106489,2316],{"class":168},[162,106491,106492,106495,106498,106500,106503],{"class":164,"line":5694},[162,106493,106494],{"class":172},"        raise",[162,106496,106497],{"class":207}," RuntimeError",[162,106499,604],{"class":168},[162,106501,106502],{"class":179},"\"body red_box not found\"",[162,106504,434],{"class":168},[162,106506,106507,106509,106512,106514,106516],{"class":164,"line":5708},[162,106508,2283],{"class":172},[162,106510,106511],{"class":168}," site_id ",[162,106513,4187],{"class":172},[162,106515,2717],{"class":207},[162,106517,2316],{"class":168},[162,106519,106520,106522,106524,106526,106529],{"class":164,"line":5716},[162,106521,106494],{"class":172},[162,106523,106497],{"class":207},[162,106525,604],{"class":168},[162,106527,106528],{"class":179},"\"site box_center not found\"",[162,106530,434],{"class":168},[162,106532,106533],{"class":164,"line":5721},[162,106534,301],{"emptyLinePlaceholder":300},[162,106536,106537,106539,106541,106543,106545,106547,106549],{"class":164,"line":5727},[162,106538,6315],{"class":172},[162,106540,104565],{"class":168},[162,106542,814],{"class":172},[162,106544,2647],{"class":207},[162,106546,604],{"class":168},[162,106548,4845],{"class":207},[162,106550,33870],{"class":168},[162,106552,106553],{"class":164,"line":5733},[162,106554,104580],{"class":168},[162,106556,106557],{"class":164,"line":5738},[162,106558,301],{"emptyLinePlaceholder":300},[162,106560,106561,106563,106565,106568],{"class":164,"line":11052},[162,106562,822],{"class":207},[162,106564,604],{"class":168},[162,106566,106567],{"class":179},"\"simulation time:\"",[162,106569,104542],{"class":168},[162,106571,106572,106574,106576,106579],{"class":164,"line":11076},[162,106573,822],{"class":207},[162,106575,604],{"class":168},[162,106577,106578],{"class":179},"\"box body position:\"",[162,106580,106581],{"class":168},", data.xpos[box_body_id].copy())\n",[162,106583,106584,106586,106588,106591],{"class":164,"line":11081},[162,106585,822],{"class":207},[162,106587,604],{"class":168},[162,106589,106590],{"class":179},"\"site position:\"",[162,106592,106593],{"class":168},", data.site_xpos[site_id].copy())\n",[162,106595,106596,106598,106600,106603],{"class":164,"line":11087},[162,106597,822],{"class":207},[162,106599,604],{"class":168},[162,106601,106602],{"class":179},"\"box qpos:\"",[162,106604,106605],{"class":168},", np.array(data.qpos))\n",[162,106607,106608],{"class":164,"line":11114},[162,106609,301],{"emptyLinePlaceholder":300},[162,106611,106612],{"class":164,"line":11119},[162,106613,301],{"emptyLinePlaceholder":300},[162,106615,106616,106618,106620,106622,106624],{"class":164,"line":11125},[162,106617,2703],{"class":172},[162,106619,34304],{"class":207},[162,106621,2714],{"class":172},[162,106623,104625],{"class":179},[162,106625,2316],{"class":168},[162,106627,106628],{"class":164,"line":11137},[162,106629,104632],{"class":168},[19,106631,106632],{},"保存为：",[153,106634,106636],{"className":26913,"code":106635,"language":26915,"meta":158,"style":158},"touch ch2_xml_basic.py\n",[71,106637,106638],{"__ignoreMap":158},[162,106639,106640,106642],{"class":164,"line":165},[162,106641,104347],{"class":5082},[162,106643,106644],{"class":179}," ch2_xml_basic.py\n",[19,106646,105364],{},[153,106648,106650],{"className":26913,"code":106649,"language":26915,"meta":158,"style":158},"python ch2_xml_basic.py\n",[71,106651,106652],{"__ignoreMap":158},[162,106653,106654,106656],{"class":164,"line":165},[162,106655,157],{"class":5082},[162,106657,106644],{"class":179},[3284,106659,104635],{"id":104635},[19,106661,106662],{},"用名字查找 body：",[153,106664,106666],{"className":155,"code":106665,"language":157,"meta":158,"style":158},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[71,106667,106668],{"__ignoreMap":158},[162,106669,106670,106673,106675,106677,106679],{"class":164,"line":165},[162,106671,106672],{"class":168},"box_body_id ",[162,106674,173],{"class":172},[162,106676,106452],{"class":168},[162,106678,106455],{"class":179},[162,106680,434],{"class":168},[19,106682,106683],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,106685,106686],{},"用名字查找 site：",[153,106688,106690],{"className":155,"code":106689,"language":157,"meta":158,"style":158},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[71,106691,106692],{"__ignoreMap":158},[162,106693,106694,106697,106699,106701,106703],{"class":164,"line":165},[162,106695,106696],{"class":168},"site_id ",[162,106698,173],{"class":172},[162,106700,106467],{"class":168},[162,106702,106470],{"class":179},[162,106704,434],{"class":168},[19,106706,106707,106708,106711,106712,106715],{},"注意第二个参数是对象类型。查 body 就用 ",[71,106709,106710],{},"mjOBJ_BODY","，查 site 就用 ",[71,106713,106714],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,106717,106718],{},"读取世界坐标：",[153,106720,106722],{"className":155,"code":106721,"language":157,"meta":158,"style":158},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[71,106723,106724,106729],{"__ignoreMap":158},[162,106725,106726],{"class":164,"line":165},[162,106727,106728],{"class":168},"data.xpos[box_body_id]\n",[162,106730,106731],{"class":164,"line":197},[162,106732,106733],{"class":168},"data.site_xpos[site_id]\n",[19,106735,106736,106739,106740,106743],{},[71,106737,106738],{},"xpos"," 是 body 的世界坐标，",[71,106741,106742],{},"site_xpos"," 是 site 的世界坐标。",[3284,106745,104771],{"id":104771},[153,106747,106749],{"className":155,"code":106748,"language":157,"meta":158,"style":158},"import mujoco\nimport numpy as np\n",[71,106750,106751,106757],{"__ignoreMap":158},[162,106752,106753,106755],{"class":164,"line":165},[162,106754,33478],{"class":172},[162,106756,104365],{"class":168},[162,106758,106759,106761,106763,106765],{"class":164,"line":197},[162,106760,33478],{"class":172},[162,106762,34463],{"class":168},[162,106764,34466],{"class":172},[162,106766,34469],{"class":168},[19,106768,106769,106770,106773,106774,106777,106778,3513,106781,3183],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[71,106771,106772],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[71,106775,106776],{},"as np"," 是习惯写法，后面就可以写 ",[71,106779,106780],{},"np.array(...)",[71,106782,106783],{},"np.round(...)",[153,106785,106786],{"className":155,"code":104658,"language":157,"meta":158,"style":158},[71,106787,106788,106796,106800],{"__ignoreMap":158},[162,106789,106790,106792,106794],{"class":164,"line":165},[162,106791,104378],{"class":207},[162,106793,16659],{"class":172},[162,106795,104383],{"class":179},[162,106797,106798],{"class":164,"line":197},[162,106799,104673],{"class":179},[162,106801,106802],{"class":164,"line":228},[162,106803,98763],{"class":179},[19,106805,106806,106807,3183],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[71,106808,106809],{},"mujoco.MjModel.from_xml_string(XML)",[153,106811,106813],{"className":56137,"code":106812,"language":56139,"meta":158,"style":158},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[71,106814,106815],{"__ignoreMap":158},[162,106816,106817,106819,106821,106823,106825,106827,106829,106831,106834,106836,106838,106841,106843,106845,106848],{"class":164,"line":165},[162,106818,4187],{"class":168},[162,106820,106272],{"class":54373},[162,106822,18013],{"class":5082},[162,106824,173],{"class":168},[162,106826,106470],{"class":179},[162,106828,104170],{"class":5082},[162,106830,173],{"class":168},[162,106832,106833],{"class":179},"\"0 0 0\"",[162,106835,104200],{"class":5082},[162,106837,173],{"class":168},[162,106839,106840],{"class":179},"\"0.03\"",[162,106842,81832],{"class":5082},[162,106844,173],{"class":168},[162,106846,106847],{"class":179},"\"0 1 0 1\"",[162,106849,104208],{"class":168},[19,106851,106852,106854,106855,106858,106859,106861,106862,106865],{},[71,106853,106272],{}," 是标记点。",[71,106856,106857],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[71,106860,106232],{}," 表示显示出来的小球大小。",[71,106863,106864],{},"rgba=\"0 1 0 1\""," 表示绿色。",[153,106867,106868],{"className":155,"code":106665,"language":157,"meta":158,"style":158},[71,106869,106870],{"__ignoreMap":158},[162,106871,106872,106874,106876,106878,106880],{"class":164,"line":165},[162,106873,106672],{"class":168},[162,106875,173],{"class":172},[162,106877,106452],{"class":168},[162,106879,106455],{"class":179},[162,106881,434],{"class":168},[19,106883,106884,106885,106887],{},"这行的作用是：根据名字 ",[71,106886,106455],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,106889,106890],{},"拆开看：",[1452,106892,106893,106899,106904,106910],{},[1455,106894,106895,106898],{},[71,106896,106897],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[1455,106900,106901,106903],{},[71,106902,105148],{}," 是被查询的模型。",[1455,106905,106906,106909],{},[71,106907,106908],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[1455,106911,106912,106914],{},[71,106913,106455],{}," 是 XML 里写的名字。",[153,106916,106917],{"className":155,"code":106689,"language":157,"meta":158,"style":158},[71,106918,106919],{"__ignoreMap":158},[162,106920,106921,106923,106925,106927,106929],{"class":164,"line":165},[162,106922,106696],{"class":168},[162,106924,173],{"class":172},[162,106926,106467],{"class":168},[162,106928,106470],{"class":179},[162,106930,434],{"class":168},[19,106932,106933,106934,3183],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[71,106935,106470],{},[153,106937,106939],{"className":155,"code":106938,"language":157,"meta":158,"style":158},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[71,106940,106941,106953],{"__ignoreMap":158},[162,106942,106943,106945,106947,106949,106951],{"class":164,"line":165},[162,106944,2703],{"class":172},[162,106946,106483],{"class":168},[162,106948,4187],{"class":172},[162,106950,2717],{"class":207},[162,106952,2316],{"class":168},[162,106954,106955,106958,106960,106962,106964],{"class":164,"line":197},[162,106956,106957],{"class":172},"    raise",[162,106959,106497],{"class":207},[162,106961,604],{"class":168},[162,106963,106502],{"class":179},[162,106965,434],{"class":168},[19,106967,106968,106970,106971,106974,106975,106978,106979,106982],{},[71,106969,2703],{}," 是条件判断。",[71,106972,106973],{},"mj_name2id"," 找不到对象时会返回 ",[71,106976,106977],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[71,106980,106981],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[153,106984,106986],{"className":155,"code":106985,"language":157,"meta":158,"style":158},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[71,106987,106988,107004],{"__ignoreMap":158},[162,106989,106990,106992,106994,106996,106998,107000,107002],{"class":164,"line":165},[162,106991,808],{"class":172},[162,106993,104565],{"class":168},[162,106995,814],{"class":172},[162,106997,2647],{"class":207},[162,106999,604],{"class":168},[162,107001,4845],{"class":207},[162,107003,33870],{"class":168},[162,107005,107006],{"class":164,"line":197},[162,107007,104762],{"class":168},[19,107009,107010],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[153,107012,107014],{"className":155,"code":107013,"language":157,"meta":158,"style":158},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[71,107015,107016],{"__ignoreMap":158},[162,107017,107018,107020,107022,107024],{"class":164,"line":165},[162,107019,306],{"class":207},[162,107021,604],{"class":168},[162,107023,106578],{"class":179},[162,107025,106581],{"class":168},[19,107027,107028,107030,107031,107034],{},[71,107029,104143],{}," 保存所有 body 的世界坐标。",[71,107032,107033],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[153,107036,107038],{"className":155,"code":107037,"language":157,"meta":158,"style":158},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[71,107039,107040],{"__ignoreMap":158},[162,107041,107042,107044,107046,107048],{"class":164,"line":165},[162,107043,306],{"class":207},[162,107045,604],{"class":168},[162,107047,106590],{"class":179},[162,107049,106593],{"class":168},[19,107051,107052,107055,107056,107058],{},[71,107053,107054],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[71,107057,106040],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[153,107060,107062],{"className":155,"code":107061,"language":157,"meta":158,"style":158},"print(\"box qpos:\", np.array(data.qpos))\n",[71,107063,107064],{"__ignoreMap":158},[162,107065,107066,107068,107070,107072],{"class":164,"line":165},[162,107067,306],{"class":207},[162,107069,604],{"class":168},[162,107071,106602],{"class":179},[162,107073,106605],{"class":168},[19,107075,107076,107077,107080],{},"这里打印广义位置数组。",[71,107078,107079],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,107082,105379],{"id":105378},[19,107084,107085,107086,107089,107090,3183],{},"程序会输出 ",[71,107087,107088],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[71,107091,107092],{},"qpos",[19,107094,107095,107097,107098,107101,107102,107105],{},[71,107096,107033],{}," 是 body 的世界坐标位置。",[71,107099,107100],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[71,107103,107104],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,107107,85287,107108,85595,107110,107112],{},[71,107109,106040],{},[71,107111,106857],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,107114,107115],{},"如果你把 site 改成：",[153,107117,107119],{"className":56137,"code":107118,"language":56139,"meta":158,"style":158},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[71,107120,107121],{"__ignoreMap":158},[162,107122,107123,107125,107127,107129,107131,107134,107136,107138,107141,107143,107145,107147,107149,107151,107153],{"class":164,"line":165},[162,107124,4187],{"class":168},[162,107126,106272],{"class":54373},[162,107128,18013],{"class":5082},[162,107130,173],{"class":168},[162,107132,107133],{"class":179},"\"box_top\"",[162,107135,104170],{"class":5082},[162,107137,173],{"class":168},[162,107139,107140],{"class":179},"\"0 0 0.15\"",[162,107142,104200],{"class":5082},[162,107144,173],{"class":168},[162,107146,106840],{"class":179},[162,107148,81832],{"class":5082},[162,107150,173],{"class":168},[162,107152,106847],{"class":179},[162,107154,104208],{"class":168},[19,107156,107157,107158,107161],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[71,107159,107160],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,107163,105411],{"id":105410},[1452,107165,107166,107175,107178,107185,107191,107202],{},[1455,107167,105474,107168,107170,107171,105477,107173,3183],{},[71,107169,106044],{}," 的初始高度从 ",[71,107172,208],{},[71,107174,213],{},[1455,107176,107177],{},"重新运行程序。",[1455,107179,107180,107181,107184],{},"观察 ",[71,107182,107183],{},"box qpos"," 和最终位置是否变化。",[1455,107186,107187,107188,107190],{},"故意把 ",[71,107189,106272],{}," 名称改错，确认程序能报错。",[1455,107192,105474,107193,107195,107196,105477,107198,107201],{},[71,107194,104184],{}," 的颜色 ",[71,107197,105095],{},[71,107199,107200],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[1455,107203,105474,107204,85595,107206,105477,107209,107212,107213,107215],{},[71,107205,106040],{},[71,107207,107208],{},"pos",[71,107210,107211],{},"0 0 0.2","，观察 ",[71,107214,107160],{}," 如何变化。",[14,107217,105516],{"id":105515},[3284,107219,107221],{"id":107220},"xml-error-schema-violation",[71,107222,107223],{},"XML Error: Schema violation",[19,107225,107226],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[3284,107228,107230,84355,107232],{"id":107229},"mj_name2id-返回-1",[71,107231,106973],{},[71,107233,106977],{},[19,107235,107236,107237,107240],{},"说明名字没有找到。检查 XML 中 ",[71,107238,107239],{},"name=\"...\"","，并确认对象类型正确。",[3284,107242,107243],{"id":107243},"物体不下落",[19,107245,105586],{},[1452,107247,107248,107253,107258],{},[1455,107249,107250,107251],{},"body 是否有 ",[71,107252,104683],{},[1455,107254,107255,107256],{},"gravity 是否为 ",[71,107257,105652],{},[1455,107259,107260,107261,107263],{},"body 是否被固定在 ",[71,107262,104904],{}," 中",[3284,107265,107266],{"id":107266},"坐标看起来不符合预期",[19,107268,107269],{},"先区分两种坐标：",[26,107271,107272,107281],{},[29,107273,107274],{},[32,107275,107276,107279],{},[35,107277,107278],{"align":26827},"坐标",[35,107280,103764],{"align":26827},[51,107282,107283,107293],{},[32,107284,107285,107290],{},[56,107286,107287,107288],{"align":26827},"XML 里的 ",[71,107289,107208],{},[56,107291,107292],{"align":26827},"相对父 body 的局部坐标",[32,107294,107295,107301],{},[56,107296,107297,28070,107299],{"align":26827},[71,107298,104143],{},[71,107300,107054],{},[56,107302,107303],{"align":26827},"仿真更新后的世界坐标",[19,107305,107306,107307,107309,107310,85604,107313,107315],{},"如果你修改了 ",[71,107308,104134],{},"，但还没调用 ",[71,107311,107312],{},"mj_forward",[71,107314,104279],{},"，世界坐标可能还没有更新。",[14,107317,105670],{"id":105669},[19,107319,107320],{},"MJCF 建模先掌握四件事：",[1452,107322,107323,107328,107333,107338],{},[1455,107324,107325,107327],{},[71,107326,54872],{}," 表示刚体层级。",[1455,107329,107330,107332],{},[71,107331,104184],{}," 表示形状、碰撞和质量。",[1455,107334,107335,107337],{},[71,107336,106019],{}," 决定 body 能不能动、怎么动。",[1455,107339,107340,107342],{},[71,107341,106272],{}," 用来标记关键点，方便 Python 读取位置。",[19,107344,107345],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[3219,107347,107348],{},"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":158,"searchDepth":197,"depth":197,"links":107350},[107351,107352,107353,107359,107363,107364,107365,107372],{"id":103710,"depth":197,"text":103711},{"id":103833,"depth":197,"text":103834},{"id":104108,"depth":197,"text":104109,"children":107354},[107355,107356,107357,107358],{"id":106023,"depth":228,"text":106023},{"id":106137,"depth":228,"text":106137},{"id":106163,"depth":228,"text":106164},{"id":106266,"depth":228,"text":106267},{"id":104316,"depth":197,"text":104317,"children":107360},[107361,107362],{"id":104635,"depth":228,"text":104635},{"id":104771,"depth":228,"text":104771},{"id":105378,"depth":197,"text":105379},{"id":105410,"depth":197,"text":105411},{"id":105515,"depth":197,"text":105516,"children":107366},[107367,107368,107370,107371],{"id":107220,"depth":228,"text":107223},{"id":107229,"depth":228,"text":107369},"mj_name2id 返回 -1",{"id":107243,"depth":228,"text":107243},{"id":107266,"depth":228,"text":107266},{"id":105669,"depth":197,"text":105670},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":105717,"description":158},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":107379,"title":107380,"body":107381,"description":158,"extension":3242,"meta":108875,"navigation":300,"path":108876,"seo":108877,"stem":108878,"__hash__":108879},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":107382,"toc":108847},[107383,107386,107388,107391,107394,107431,107434,107440,107443,107445,107447,107474,107476,107490,107492,107533,107535,107559,107561,107564,107573,107582,107585,107594,107602,107611,107614,107624,107627,107679,107686,107692,107700,107748,107751,107770,107773,107781,107785,107794,107827,107829,108177,108179,108191,108193,108204,108206,108209,108230,108236,108239,108264,108274,108277,108285,108288,108291,108312,108323,108325,108345,108348,108369,108378,108397,108403,108428,108431,108445,108452,108476,108479,108487,108496,108512,108524,108532,108541,108543,108546,108570,108575,108578,108600,108602,108641,108643,108650,108652,108660,108663,108666,108678,108719,108726,108737,108744,108747,108796,108799,108802,108808,108810,108815,108841,108844],[10,107384,107380],{"id":107385},"_3python-控制接口读取状态与推进仿真",[14,107387,103711],{"id":103710},[19,107389,107390],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,107392,107393],{},"你将学习:",[1452,107395,107396,107401,107406,107410,107415,107426],{},[1455,107397,107398],{},[71,107399,107400],{},"MjModel.from_xml_string",[1455,107402,107403],{},[71,107404,107405],{},"MjData(model)",[1455,107407,107408],{},[71,107409,104279],{},[1455,107411,107412],{},[71,107413,107414],{},"mj_resetData",[1455,107416,107417,107418,3513,107420,3513,107423],{},"读取 ",[71,107419,107092],{},[71,107421,107422],{},"qvel",[71,107424,107425],{},"ctrl",[1455,107427,3186,107428],{},[71,107429,107430],{},"model.opt.timestep",[19,107432,107433],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[153,107435,107438],{"className":107436,"code":107437,"language":8295,"meta":158},[8293],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[71,107439,107437],{"__ignoreMap":158},[19,107441,107442],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,107444,103834],{"id":103833},[19,107446,103837],{},[153,107448,107450],{"className":26913,"code":107449,"language":26915,"meta":158,"style":158},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[71,107451,107452],{"__ignoreMap":158},[162,107453,107454,107456,107458,107460,107462,107465,107467,107469,107471],{"class":164,"line":165},[162,107455,27668],{"class":5082},[162,107457,29405],{"class":179},[162,107459,26925],{"class":179},[162,107461,29490],{"class":207},[162,107463,107464],{"class":179}," python3",[162,107466,103862],{"class":179},[162,107468,105564],{"class":179},[162,107470,103878],{"class":179},[162,107472,107473],{"class":179}," glfw\n",[19,107475,105882],{},[153,107477,107478],{"className":26913,"code":103983,"language":26915,"meta":158,"style":158},[71,107479,107480],{"__ignoreMap":158},[162,107481,107482,107484,107486,107488],{"class":164,"line":165},[162,107483,26922],{"class":5082},[162,107485,26925],{"class":179},[162,107487,103994],{"class":179},[162,107489,103997],{"class":179},[19,107491,105899],{},[153,107493,107495],{"className":26913,"code":107494,"language":26915,"meta":158,"style":158},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[71,107496,107497,107514,107523],{"__ignoreMap":158},[162,107498,107499,107501,107503,107505,107508,107510,107512],{"class":164,"line":165},[162,107500,33418],{"class":5082},[162,107502,32264],{"class":179},[162,107504,28207],{"class":207},[162,107506,107507],{"class":179}," mujoco-python-api",[162,107509,104039],{"class":179},[162,107511,104042],{"class":207},[162,107513,104045],{"class":207},[162,107515,107516,107518,107520],{"class":164,"line":197},[162,107517,33418],{"class":5082},[162,107519,104052],{"class":179},[162,107521,107522],{"class":179}," mujoco-python-api\n",[162,107524,107525,107527,107529,107531],{"class":164,"line":228},[162,107526,26922],{"class":5082},[162,107528,26925],{"class":179},[162,107530,103994],{"class":179},[162,107532,103997],{"class":179},[19,107534,104068],{},[1452,107536,107537,107544,107553],{},[1455,107538,107539,104082,107541,107543],{},[71,107540,103739],{},[71,107542,103744],{}," 是官方 Python bindings 的类名。",[1455,107545,107546,107547,107550,107551,3183],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[71,107548,107549],{},"mjModel"," 在 Python 中是 ",[71,107552,103773],{},[1455,107554,107555,107556,3183],{},"不要使用 ",[71,107557,107558],{},"sim = mujoco_py.MjSim(...)",[14,107560,104109],{"id":104108},[19,107562,107563],{},"仿真推进核心代码:",[153,107565,107567],{"className":155,"code":107566,"language":157,"meta":158,"style":158},"mujoco.mj_step(model, data)\n",[71,107568,107569],{"__ignoreMap":158},[162,107570,107571],{"class":164,"line":165},[162,107572,107566],{"class":168},[19,107574,107575,107576,3513,107578,3513,107580,3183],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[71,107577,104134],{},[71,107579,104137],{},[71,107581,104131],{},[19,107583,107584],{},"重置仿真:",[153,107586,107588],{"className":155,"code":107587,"language":157,"meta":158,"style":158},"mujoco.mj_resetData(model, data)\n",[71,107589,107590],{"__ignoreMap":158},[162,107591,107592],{"class":164,"line":165},[162,107593,107587],{"class":168},[19,107595,107596,107597,85604,107599,107601],{},"如果手动修改了 ",[71,107598,104134],{},[71,107600,104137],{},"，通常应调用:",[153,107603,107605],{"className":155,"code":107604,"language":157,"meta":158,"style":158},"mujoco.mj_forward(model, data)\n",[71,107606,107607],{"__ignoreMap":158},[162,107608,107609],{"class":164,"line":165},[162,107610,107604],{"class":168},[19,107612,107613],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[3284,107615,107617,3513,107619,3513,107621,107623],{"id":107616},"qposqvelctrl-是什么",[71,107618,107092],{},[71,107620,107422],{},[71,107622,107425],{}," 是什么",[19,107625,107626],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[26,107628,107629,107641],{},[29,107630,107631],{},[32,107632,107633,107636,107638],{},[35,107634,107635],{"align":26827},"字段",[35,107637,103764],{"align":26827},[35,107639,107640],{"align":26827},"谁来修改",[51,107642,107643,107655,107667],{},[32,107644,107645,107649,107652],{},[56,107646,107647],{"align":26827},[71,107648,104134],{},[56,107650,107651],{"align":26827},"广义位置，例如小车位置、关节角、自由物体位置姿态",[56,107653,107654],{"align":26827},"MuJoCo 更新，也可以手动设置初始状态",[32,107656,107657,107661,107664],{},[56,107658,107659],{"align":26827},[71,107660,104137],{},[56,107662,107663],{"align":26827},"广义速度，例如小车速度、关节角速度",[56,107665,107666],{"align":26827},"MuJoCo 更新，也可以手动清零",[32,107668,107669,107673,107676],{},[56,107670,107671],{"align":26827},[71,107672,104140],{},[56,107674,107675],{"align":26827},"actuator 的控制输入",[56,107677,107678],{"align":26827},"主要由你的控制代码写入",[19,107680,1529,107681,104082,107683,107685],{},[71,107682,107092],{},[71,107684,107422],{}," 不一定同维。自由刚体就是典型例子：",[153,107687,107690],{"className":107688,"code":107689,"language":8295,"meta":158},[8293],"freejoint: qpos 7 维，qvel 6 维\n",[71,107691,107689],{"__ignoreMap":158},[3284,107693,107695,104082,107697,107699],{"id":107694},"mj_step-和-mj_forward-的区别",[71,107696,104279],{},[71,107698,107312],{}," 的区别",[26,107701,107702,107715],{},[29,107703,107704],{},[32,107705,107706,107709,107712],{},[35,107707,107708],{"align":26827},"函数",[35,107710,107711],{"align":26827},"是否推进时间",[35,107713,107714],{"align":26827},"什么时候用",[51,107716,107717,107730],{},[32,107718,107719,107724,107727],{},[56,107720,107721],{"align":26827},[71,107722,107723],{},"mj_step(model, data)",[56,107725,107726],{"align":26827},"是",[56,107728,107729],{"align":26827},"正常仿真循环，每调用一次前进一步",[32,107731,107732,107737,107740],{},[56,107733,107734],{"align":26827},[71,107735,107736],{},"mj_forward(model, data)",[56,107738,107739],{"align":26827},"否",[56,107741,107742,107743,3513,107745,107747],{"align":26827},"手动改了 ",[71,107744,107092],{},[71,107746,107422],{}," 后，刷新派生量",[19,107749,107750],{},"例如你写：",[153,107752,107754],{"className":155,"code":107753,"language":157,"meta":158,"style":158},"data.qpos[2] = 2.0\n",[71,107755,107756],{"__ignoreMap":158},[162,107757,107758,107761,107763,107765,107767],{"class":164,"line":165},[162,107759,107760],{"class":168},"data.qpos[",[162,107762,213],{"class":207},[162,107764,1204],{"class":168},[162,107766,173],{"class":172},[162,107768,107769],{"class":207}," 2.0\n",[19,107771,107772],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[153,107774,107775],{"className":155,"code":107604,"language":157,"meta":158,"style":158},[71,107776,107777],{"__ignoreMap":158},[162,107778,107779],{"class":164,"line":165},[162,107780,107604],{"class":168},[3284,107782,107784],{"id":107783},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,107786,107787,107790,107791,107793],{},[71,107788,107789],{},"mujoco.mj_resetData(model, data)"," 会把 ",[71,107792,36476],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[153,107795,107797],{"className":155,"code":107796,"language":157,"meta":158,"style":158},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[71,107798,107799,107803,107813,107823],{"__ignoreMap":158},[162,107800,107801],{"class":164,"line":165},[162,107802,107587],{"class":168},[162,107804,107805,107808,107810],{"class":164,"line":197},[162,107806,107807],{"class":168},"data.qpos[:] ",[162,107809,173],{"class":172},[162,107811,107812],{"class":168}," random_qpos\n",[162,107814,107815,107818,107820],{"class":164,"line":228},[162,107816,107817],{"class":168},"data.qvel[:] ",[162,107819,173],{"class":172},[162,107821,107822],{"class":207}," 0.0\n",[162,107824,107825],{"class":164,"line":252},[162,107826,107604],{"class":168},[14,107828,104317],{"id":104316},[153,107830,107832],{"className":155,"code":107831,"language":157,"meta":158,"style":158},"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",[71,107833,107834,107840,107850,107854,107858,107866,107871,107875,107879,107883,107888,107892,107897,107902,107907,107911,107915,107919,107923,107927,107931,107950,107957,107969,107980,107996,108012,108016,108020,108032,108044,108052,108056,108067,108071,108087,108091,108095,108104,108108,108113,108122,108126,108139,108144,108153,108157,108161,108173],{"__ignoreMap":158},[162,107835,107836,107838],{"class":164,"line":165},[162,107837,33478],{"class":172},[162,107839,104365],{"class":168},[162,107841,107842,107844,107846,107848],{"class":164,"line":197},[162,107843,33478],{"class":172},[162,107845,34463],{"class":168},[162,107847,34466],{"class":172},[162,107849,34469],{"class":168},[162,107851,107852],{"class":164,"line":228},[162,107853,301],{"emptyLinePlaceholder":300},[162,107855,107856],{"class":164,"line":252},[162,107857,301],{"emptyLinePlaceholder":300},[162,107859,107860,107862,107864],{"class":164,"line":328},[162,107861,104378],{"class":207},[162,107863,16659],{"class":172},[162,107865,104383],{"class":179},[162,107867,107868],{"class":164,"line":466},[162,107869,107870],{"class":179},"\u003Cmujoco model=\"state_api\">\n",[162,107872,107873],{"class":164,"line":471},[162,107874,104393],{"class":179},[162,107876,107877],{"class":164,"line":687},[162,107878,301],{"emptyLinePlaceholder":300},[162,107880,107881],{"class":164,"line":692},[162,107882,104402],{"class":179},[162,107884,107885],{"class":164,"line":698},[162,107886,107887],{"class":179},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[162,107889,107890],{"class":164,"line":2955},[162,107891,301],{"emptyLinePlaceholder":300},[162,107893,107894],{"class":164,"line":2960},[162,107895,107896],{"class":179},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[162,107898,107899],{"class":164,"line":2971},[162,107900,107901],{"class":179},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[162,107903,107904],{"class":164,"line":2984},[162,107905,107906],{"class":179},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[162,107908,107909],{"class":164,"line":2989},[162,107910,104431],{"class":179},[162,107912,107913],{"class":164,"line":3011},[162,107914,104436],{"class":179},[162,107916,107917],{"class":164,"line":3022},[162,107918,104441],{"class":179},[162,107920,107921],{"class":164,"line":3027},[162,107922,98763],{"class":179},[162,107924,107925],{"class":164,"line":3046},[162,107926,301],{"emptyLinePlaceholder":300},[162,107928,107929],{"class":164,"line":3052},[162,107930,301],{"emptyLinePlaceholder":300},[162,107932,107933,107935,107938,107941,107943,107946,107948],{"class":164,"line":3057},[162,107934,35026],{"class":172},[162,107936,107937],{"class":5082}," print_state",[162,107939,107940],{"class":168},"(prefix: ",[162,107942,4442],{"class":207},[162,107944,107945],{"class":168},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[162,107947,98751],{"class":207},[162,107949,2316],{"class":168},[162,107951,107952,107954],{"class":164,"line":3072},[162,107953,822],{"class":207},[162,107955,107956],{"class":168},"(prefix)\n",[162,107958,107959,107961,107963,107966],{"class":164,"line":3077},[162,107960,822],{"class":207},[162,107962,604],{"class":168},[162,107964,107965],{"class":179},"\"  timestep:\"",[162,107967,107968],{"class":168},", model.opt.timestep)\n",[162,107970,107971,107973,107975,107978],{"class":164,"line":3100},[162,107972,822],{"class":207},[162,107974,604],{"class":168},[162,107976,107977],{"class":179},"\"  time:\"",[162,107979,104542],{"class":168},[162,107981,107982,107984,107986,107989,107992,107994],{"class":164,"line":3140},[162,107983,822],{"class":207},[162,107985,604],{"class":168},[162,107987,107988],{"class":179},"\"  qpos:\"",[162,107990,107991],{"class":168},", np.round(data.qpos.copy(), ",[162,107993,223],{"class":207},[162,107995,586],{"class":168},[162,107997,107998,108000,108002,108005,108008,108010],{"class":164,"line":4878},[162,107999,822],{"class":207},[162,108001,604],{"class":168},[162,108003,108004],{"class":179},"\"  qvel:\"",[162,108006,108007],{"class":168},", np.round(data.qvel.copy(), ",[162,108009,223],{"class":207},[162,108011,586],{"class":168},[162,108013,108014],{"class":164,"line":4883},[162,108015,301],{"emptyLinePlaceholder":300},[162,108017,108018],{"class":164,"line":4897},[162,108019,301],{"emptyLinePlaceholder":300},[162,108021,108022,108024,108026,108028,108030],{"class":164,"line":4902},[162,108023,35026],{"class":172},[162,108025,5092],{"class":5082},[162,108027,104462],{"class":168},[162,108029,98751],{"class":207},[162,108031,2316],{"class":168},[162,108033,108034,108036,108038,108040,108042],{"class":164,"line":5694},[162,108035,104471],{"class":168},[162,108037,173],{"class":172},[162,108039,104476],{"class":168},[162,108041,104378],{"class":207},[162,108043,434],{"class":168},[162,108045,108046,108048,108050],{"class":164,"line":5708},[162,108047,104485],{"class":168},[162,108049,173],{"class":172},[162,108051,104490],{"class":168},[162,108053,108054],{"class":164,"line":5716},[162,108055,301],{"emptyLinePlaceholder":300},[162,108057,108058,108061,108064],{"class":164,"line":5721},[162,108059,108060],{"class":168},"    print_state(",[162,108062,108063],{"class":179},"\"initial\"",[162,108065,108066],{"class":168},", model, data)\n",[162,108068,108069],{"class":164,"line":5727},[162,108070,301],{"emptyLinePlaceholder":300},[162,108072,108073,108075,108077,108079,108081,108083,108085],{"class":164,"line":5733},[162,108074,6315],{"class":172},[162,108076,104565],{"class":168},[162,108078,814],{"class":172},[162,108080,2647],{"class":207},[162,108082,604],{"class":168},[162,108084,3941],{"class":207},[162,108086,33870],{"class":168},[162,108088,108089],{"class":164,"line":5738},[162,108090,104580],{"class":168},[162,108092,108093],{"class":164,"line":11052},[162,108094,301],{"emptyLinePlaceholder":300},[162,108096,108097,108099,108102],{"class":164,"line":11076},[162,108098,108060],{"class":168},[162,108100,108101],{"class":179},"\"after 50 steps\"",[162,108103,108066],{"class":168},[162,108105,108106],{"class":164,"line":11081},[162,108107,301],{"emptyLinePlaceholder":300},[162,108109,108110],{"class":164,"line":11087},[162,108111,108112],{"class":168},"    mujoco.mj_resetData(model, data)\n",[162,108114,108115,108117,108120],{"class":164,"line":11114},[162,108116,108060],{"class":168},[162,108118,108119],{"class":179},"\"after reset\"",[162,108121,108066],{"class":168},[162,108123,108124],{"class":164,"line":11119},[162,108125,301],{"emptyLinePlaceholder":300},[162,108127,108128,108131,108133,108135,108137],{"class":164,"line":11125},[162,108129,108130],{"class":168},"    data.qpos[",[162,108132,213],{"class":207},[162,108134,1204],{"class":168},[162,108136,173],{"class":172},[162,108138,107769],{"class":207},[162,108140,108141],{"class":164,"line":11137},[162,108142,108143],{"class":168},"    mujoco.mj_forward(model, data)\n",[162,108145,108146,108148,108151],{"class":164,"line":11149},[162,108147,108060],{"class":168},[162,108149,108150],{"class":179},"\"after manual qpos edit\"",[162,108152,108066],{"class":168},[162,108154,108155],{"class":164,"line":11161},[162,108156,301],{"emptyLinePlaceholder":300},[162,108158,108159],{"class":164,"line":12816},[162,108160,301],{"emptyLinePlaceholder":300},[162,108162,108163,108165,108167,108169,108171],{"class":164,"line":12841},[162,108164,2703],{"class":172},[162,108166,34304],{"class":207},[162,108168,2714],{"class":172},[162,108170,104625],{"class":179},[162,108172,2316],{"class":168},[162,108174,108175],{"class":164,"line":12864},[162,108176,104632],{"class":168},[19,108178,106632],{},[153,108180,108182],{"className":26913,"code":108181,"language":26915,"meta":158,"style":158},"touch ch3_python_state.py\n",[71,108183,108184],{"__ignoreMap":158},[162,108185,108186,108188],{"class":164,"line":165},[162,108187,104347],{"class":5082},[162,108189,108190],{"class":179}," ch3_python_state.py\n",[19,108192,105364],{},[153,108194,108196],{"className":26913,"code":108195,"language":26915,"meta":158,"style":158},"python ch3_python_state.py\n",[71,108197,108198],{"__ignoreMap":158},[162,108199,108200,108202],{"class":164,"line":165},[162,108201,157],{"class":5082},[162,108203,108190],{"class":179},[3284,108205,104635],{"id":104635},[19,108207,108208],{},"打印状态的函数：",[153,108210,108212],{"className":155,"code":108211,"language":157,"meta":158,"style":158},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[71,108213,108214],{"__ignoreMap":158},[162,108215,108216,108218,108220,108222,108224,108226,108228],{"class":164,"line":165},[162,108217,35026],{"class":172},[162,108219,107937],{"class":5082},[162,108221,107940],{"class":168},[162,108223,4442],{"class":207},[162,108225,107945],{"class":168},[162,108227,98751],{"class":207},[162,108229,2316],{"class":168},[19,108231,108232,108233,108235],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[71,108234,36476],{}," 里发生了什么。",[19,108237,108238],{},"推进 50 步：",[153,108240,108242],{"className":155,"code":108241,"language":157,"meta":158,"style":158},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[71,108243,108244,108260],{"__ignoreMap":158},[162,108245,108246,108248,108250,108252,108254,108256,108258],{"class":164,"line":165},[162,108247,808],{"class":172},[162,108249,104565],{"class":168},[162,108251,814],{"class":172},[162,108253,2647],{"class":207},[162,108255,604],{"class":168},[162,108257,3941],{"class":207},[162,108259,33870],{"class":168},[162,108261,108262],{"class":164,"line":197},[162,108263,104762],{"class":168},[19,108265,108266,108267,108270,108271,108273],{},"由于 ",[71,108268,108269],{},"timestep=0.01","，所以 50 步后时间约为 ",[71,108272,38404],{}," 秒。",[19,108275,108276],{},"重置：",[153,108278,108279],{"className":155,"code":107587,"language":157,"meta":158,"style":158},[71,108280,108281],{"__ignoreMap":158},[162,108282,108283],{"class":164,"line":165},[162,108284,107587],{"class":168},[19,108286,108287],{},"这会把时间、位置、速度恢复到初始状态。",[19,108289,108290],{},"手动改高度：",[153,108292,108294],{"className":155,"code":108293,"language":157,"meta":158,"style":158},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[71,108295,108296,108308],{"__ignoreMap":158},[162,108297,108298,108300,108302,108304,108306],{"class":164,"line":165},[162,108299,107760],{"class":168},[162,108301,213],{"class":207},[162,108303,1204],{"class":168},[162,108305,173],{"class":172},[162,108307,107769],{"class":207},[162,108309,108310],{"class":164,"line":197},[162,108311,107604],{"class":168},[19,108313,108314,108315,108318,108319,108322],{},"这个例子里 ",[71,108316,108317],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[71,108320,108321],{},"2.0"," 表示把小球放到更高的位置。",[3284,108324,104771],{"id":104771},[153,108326,108327],{"className":155,"code":108211,"language":157,"meta":158,"style":158},[71,108328,108329],{"__ignoreMap":158},[162,108330,108331,108333,108335,108337,108339,108341,108343],{"class":164,"line":165},[162,108332,35026],{"class":172},[162,108334,107937],{"class":5082},[162,108336,107940],{"class":168},[162,108338,4442],{"class":207},[162,108340,107945],{"class":168},[162,108342,98751],{"class":207},[162,108344,2316],{"class":168},[19,108346,108347],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[1452,108349,108350,108359,108364],{},[1455,108351,108352,108355,108356,108358],{},[71,108353,108354],{},"prefix","：一段文字，比如 ",[71,108357,108063],{},"，用来说明现在打印的是哪个阶段。",[1455,108360,108361,108363],{},[71,108362,105148],{},"：MuJoCo 模型。",[1455,108365,108366,108368],{},[71,108367,36476],{},"：MuJoCo 当前状态。",[19,108370,108371,3513,108374,108377],{},[71,108372,108373],{},"prefix: str",[71,108375,108376],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[153,108379,108381],{"className":155,"code":108380,"language":157,"meta":158,"style":158},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[71,108382,108383],{"__ignoreMap":158},[162,108384,108385,108387,108389,108391,108393,108395],{"class":164,"line":165},[162,108386,306],{"class":207},[162,108388,604],{"class":168},[162,108390,107988],{"class":179},[162,108392,107991],{"class":168},[162,108394,223],{"class":207},[162,108396,586],{"class":168},[19,108398,108399,108402],{},[71,108400,108401],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[153,108404,108406],{"className":155,"code":108405,"language":157,"meta":158,"style":158},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[71,108407,108408,108420],{"__ignoreMap":158},[162,108409,108410,108412,108414,108416,108418],{"class":164,"line":165},[162,108411,104697],{"class":168},[162,108413,173],{"class":172},[162,108415,104476],{"class":168},[162,108417,104378],{"class":207},[162,108419,434],{"class":168},[162,108421,108422,108424,108426],{"class":164,"line":197},[162,108423,104721],{"class":168},[162,108425,173],{"class":172},[162,108427,104490],{"class":168},[19,108429,108430],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[153,108432,108434],{"className":155,"code":108433,"language":157,"meta":158,"style":158},"print_state(\"initial\", model, data)\n",[71,108435,108436],{"__ignoreMap":158},[162,108437,108438,108441,108443],{"class":164,"line":165},[162,108439,108440],{"class":168},"print_state(",[162,108442,108063],{"class":179},[162,108444,108066],{"class":168},[19,108446,108447,108448,108451],{},"调用刚才定义的 ",[71,108449,108450],{},"print_state"," 函数，打印初始状态。",[153,108453,108454],{"className":155,"code":108241,"language":157,"meta":158,"style":158},[71,108455,108456,108472],{"__ignoreMap":158},[162,108457,108458,108460,108462,108464,108466,108468,108470],{"class":164,"line":165},[162,108459,808],{"class":172},[162,108461,104565],{"class":168},[162,108463,814],{"class":172},[162,108465,2647],{"class":207},[162,108467,604],{"class":168},[162,108469,3941],{"class":207},[162,108471,33870],{"class":168},[162,108473,108474],{"class":164,"line":197},[162,108475,104762],{"class":168},[19,108477,108478],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[153,108480,108481],{"className":155,"code":107587,"language":157,"meta":158,"style":158},[71,108482,108483],{"__ignoreMap":158},[162,108484,108485],{"class":164,"line":165},[162,108486,107587],{"class":168},[19,108488,108489,108490,108492,108493,108495],{},"重置 ",[71,108491,36476],{},"。注意它不会重新创建 ",[71,108494,105148],{},"，因为模型结构没有变，只是状态回到初始值。",[153,108497,108498],{"className":155,"code":107753,"language":157,"meta":158,"style":158},[71,108499,108500],{"__ignoreMap":158},[162,108501,108502,108504,108506,108508,108510],{"class":164,"line":165},[162,108503,107760],{"class":168},[162,108505,213],{"class":207},[162,108507,1204],{"class":168},[162,108509,173],{"class":172},[162,108511,107769],{"class":207},[19,108513,108514,108515,3513,108518,3513,108521,108523],{},"这行是“手动改状态”。在 freejoint 中，",[71,108516,108517],{},"qpos[0]",[71,108519,108520],{},"qpos[1]",[71,108522,108317],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[153,108525,108526],{"className":155,"code":107604,"language":157,"meta":158,"style":158},[71,108527,108528],{"__ignoreMap":158},[162,108529,108530],{"class":164,"line":165},[162,108531,107604],{"class":168},[19,108533,108534,108535,108537,108538,108540],{},"手动改完 ",[71,108536,107092],{}," 后，调用 ",[71,108539,107312],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,108542,105379],{"id":105378},[19,108544,108545],{},"你会看到:",[1452,108547,108548,108553,108558,108561],{},[1455,108549,108550,108551],{},"初始时间为 ",[71,108552,312],{},[1455,108554,108555,108556],{},"50 步后时间约为 ",[71,108557,38404],{},[1455,108559,108560],{},"reset 后状态恢复",[1455,108562,108563,108564,108567,108568],{},"手动修改 ",[71,108565,108566],{},"data.qpos[2]"," 后，小球高度变为 ",[71,108569,108321],{},[19,108571,108572,108574],{},[71,108573,108317],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,108576,108577],{},"输出里可以重点看三件事：",[1452,108579,108580,108588,108593],{},[1455,108581,108582,108584,108585,108587],{},[71,108583,5505],{}," 是否随着 ",[71,108586,104279],{}," 增加。",[1455,108589,108590,108592],{},[71,108591,107092],{}," 的 z 坐标是否因为下落而变化。",[1455,108594,108595,108597,108598,3183],{},[71,108596,107414],{}," 后时间是否回到 ",[71,108599,312],{},[14,108601,105411],{"id":105410},[1452,108603,108604,108610,108616,108622,108625,108634],{},[1455,108605,108606,108607,3183],{},"修改 timestep 为 ",[71,108608,108609],{},"0.005",[1455,108611,108612,108613,3183],{},"重新运行，检查 50 步后时间是否约为 ",[71,108614,108615],{},"0.25",[1455,108617,108618,108619,3183],{},"修改重力为 ",[71,108620,108621],{},"0 0 -1.0",[1455,108623,108624],{},"观察小球下降速度是否变慢。",[1455,108626,105474,108627,105477,108630,108633],{},[71,108628,108629],{},"data.qpos[2] = 2.0",[71,108631,108632],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[1455,108635,108636,108637,108640],{},"注释掉 ",[71,108638,108639],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,108642,105516],{"id":105515},[3284,108644,108646,108647,108649],{"id":108645},"修改-dataqpos-后位置没有更新","修改 ",[71,108648,104134],{}," 后位置没有更新",[19,108651,105525],{},[153,108653,108654],{"className":155,"code":107604,"language":157,"meta":158,"style":158},[71,108655,108656],{"__ignoreMap":158},[162,108657,108658],{"class":164,"line":165},[162,108659,107604],{"class":168},[3284,108661,108662],{"id":108662},"数组维度看不懂",[19,108664,108665],{},"打印模型维度:",[153,108667,108669],{"className":155,"code":108668,"language":157,"meta":158,"style":158},"print(model.nq, model.nv, model.nu)\n",[71,108670,108671],{"__ignoreMap":158},[162,108672,108673,108675],{"class":164,"line":165},[162,108674,306],{"class":207},[162,108676,108677],{"class":168},"(model.nq, model.nv, model.nu)\n",[26,108679,108680,108688],{},[29,108681,108682],{},[32,108683,108684,108686],{},[35,108685,107635],{"align":26827},[35,108687,103764],{"align":26827},[51,108689,108690,108700,108710],{},[32,108691,108692,108697],{},[56,108693,108694],{"align":26827},[71,108695,108696],{},"nq",[56,108698,108699],{"align":26827},"位置变量数量",[32,108701,108702,108707],{},[56,108703,108704],{"align":26827},[71,108705,108706],{},"nv",[56,108708,108709],{"align":26827},"速度变量数量",[32,108711,108712,108716],{},[56,108713,108714],{"align":26827},[71,108715,105225],{},[56,108717,108718],{"align":26827},"控制输入数量",[3284,108720,108722,108723,108725],{"id":108721},"误以为-qpos-一定等于关节数","误以为 ",[71,108724,107092],{}," 一定等于关节数",[19,108727,108728,108729,85595,108731,108733,108734,108736],{},"不是。例如 ",[71,108730,104683],{},[71,108732,107092],{}," 是 7 维，但 ",[71,108735,107422],{}," 是 6 维。",[3284,108738,108740,108741,108743],{"id":108739},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[71,108742,107092],{}," 的第几位",[19,108745,108746],{},"初学时可以先打印：",[153,108748,108750],{"className":155,"code":108749,"language":157,"meta":158,"style":158},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[71,108751,108752,108762,108772,108784],{"__ignoreMap":158},[162,108753,108754,108756,108758,108760],{"class":164,"line":165},[162,108755,306],{"class":207},[162,108757,604],{"class":168},[162,108759,104503],{"class":179},[162,108761,104506],{"class":168},[162,108763,108764,108766,108768,108770],{"class":164,"line":197},[162,108765,306],{"class":207},[162,108767,604],{"class":168},[162,108769,104515],{"class":179},[162,108771,104518],{"class":168},[162,108773,108774,108776,108778,108781],{"class":164,"line":228},[162,108775,306],{"class":207},[162,108777,604],{"class":168},[162,108779,108780],{"class":179},"\"qpos:\"",[162,108782,108783],{"class":168},", data.qpos)\n",[162,108785,108786,108788,108790,108793],{"class":164,"line":252},[162,108787,306],{"class":207},[162,108789,604],{"class":168},[162,108791,108792],{"class":179},"\"qvel:\"",[162,108794,108795],{"class":168},", data.qvel)\n",[19,108797,108798],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[3284,108800,108801],{"id":108801},"仿真结果每次都一样",[19,108803,108804,108805,108807],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[71,108806,107092],{},"、目标点或控制输入。",[14,108809,105670],{"id":105669},[19,108811,108812,108813,27710],{},"Python 控制 MuJoCo 的核心就是读写 ",[71,108814,36476],{},[1452,108816,108817,108825,108830,108835],{},[1455,108818,108819,108820,104082,108822,108824],{},"用 ",[71,108821,104134],{},[71,108823,104137],{}," 读取状态。",[1455,108826,108819,108827,108829],{},[71,108828,104140],{}," 写入控制。",[1455,108831,108819,108832,108834],{},[71,108833,104279],{}," 推进时间。",[1455,108836,108837,108838,108840],{},"手动改状态后用 ",[71,108839,107312],{}," 刷新派生量。",[19,108842,108843],{},"理解这一章后，就可以进入关节和 actuator 控制。",[3219,108845,108846],{},"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":158,"searchDepth":197,"depth":197,"links":108848},[108849,108850,108851,108858,108862,108863,108864,108874],{"id":103710,"depth":197,"text":103711},{"id":103833,"depth":197,"text":103834},{"id":104108,"depth":197,"text":104109,"children":108852},[108853,108855,108857],{"id":107616,"depth":228,"text":108854},"qpos、qvel、ctrl 是什么",{"id":107694,"depth":228,"text":108856},"mj_step 和 mj_forward 的区别",{"id":107783,"depth":228,"text":107784},{"id":104316,"depth":197,"text":104317,"children":108859},[108860,108861],{"id":104635,"depth":228,"text":104635},{"id":104771,"depth":228,"text":104771},{"id":105378,"depth":197,"text":105379},{"id":105410,"depth":197,"text":105411},{"id":105515,"depth":197,"text":105516,"children":108865},[108866,108868,108869,108871,108873],{"id":108645,"depth":228,"text":108867},"修改 data.qpos 后位置没有更新",{"id":108662,"depth":228,"text":108662},{"id":108721,"depth":228,"text":108870},"误以为 qpos 一定等于关节数",{"id":108739,"depth":228,"text":108872},"不知道某个元素在 qpos 的第几位",{"id":108801,"depth":228,"text":108801},{"id":105669,"depth":197,"text":105670},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":107380,"description":158},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":108881,"title":108882,"body":108883,"description":158,"extension":3242,"meta":110573,"navigation":300,"path":110574,"seo":110575,"stem":110576,"__hash__":110577},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":108884,"toc":110549},[108885,108888,108890,108893,108895,108920,108923,108942,108945,108947,108949,108973,108975,108989,108991,109032,109034,109058,109060,109063,109097,109099,109112,109115,109183,109192,109196,109199,109233,109239,109242,109246,109285,109288,109308,109312,109355,109357,109386,109389,109395,109398,109400,109794,109796,109808,109810,109821,109823,109826,109855,109863,109866,109901,109904,109906,109914,109917,109919,109930,109940,109960,109963,109999,110011,110059,110078,110120,110133,110161,110166,110187,110197,110215,110218,110252,110255,110275,110278,110297,110303,110305,110308,110314,110320,110330,110333,110339,110348,110350,110396,110398,110404,110410,110413,110416,110436,110439,110445,110451,110453,110476,110479,110482,110491,110494,110532,110534,110537,110543,110546],[10,108886,108882],{"id":108887},"_4关节actuator-与力控制",[14,108889,103711],{"id":103710},[19,108891,108892],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,108894,107393],{},[1452,108896,108897,108903,108908,108912,108917],{},[1455,108898,108899,108902],{},[71,108900,108901],{},"hinge"," 关节",[1455,108904,108905],{},[71,108906,108907],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[1455,108909,108910],{},[71,108911,104140],{},[1455,108913,108914],{},[71,108915,108916],{},"ctrlrange",[1455,108918,108919],{},"读取关节角和角速度",[19,108921,108922],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[153,108924,108926],{"className":155,"code":108925,"language":157,"meta":158,"style":158},"data.ctrl[0] = ...\n",[71,108927,108928],{"__ignoreMap":158},[162,108929,108930,108933,108935,108937,108939],{"class":164,"line":165},[162,108931,108932],{"class":168},"data.ctrl[",[162,108934,312],{"class":207},[162,108936,1204],{"class":168},[162,108938,173],{"class":172},[162,108940,108941],{"class":207}," ...\n",[19,108943,108944],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,108946,103834],{"id":103833},[19,108948,103837],{},[153,108950,108951],{"className":26913,"code":107449,"language":26915,"meta":158,"style":158},[71,108952,108953],{"__ignoreMap":158},[162,108954,108955,108957,108959,108961,108963,108965,108967,108969,108971],{"class":164,"line":165},[162,108956,27668],{"class":5082},[162,108958,29405],{"class":179},[162,108960,26925],{"class":179},[162,108962,29490],{"class":207},[162,108964,107464],{"class":179},[162,108966,103862],{"class":179},[162,108968,105564],{"class":179},[162,108970,103878],{"class":179},[162,108972,107473],{"class":179},[19,108974,105882],{},[153,108976,108977],{"className":26913,"code":103983,"language":26915,"meta":158,"style":158},[71,108978,108979],{"__ignoreMap":158},[162,108980,108981,108983,108985,108987],{"class":164,"line":165},[162,108982,26922],{"class":5082},[162,108984,26925],{"class":179},[162,108986,103994],{"class":179},[162,108988,103997],{"class":179},[19,108990,105899],{},[153,108992,108994],{"className":26913,"code":108993,"language":26915,"meta":158,"style":158},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[71,108995,108996,109013,109022],{"__ignoreMap":158},[162,108997,108998,109000,109002,109004,109007,109009,109011],{"class":164,"line":165},[162,108999,33418],{"class":5082},[162,109001,32264],{"class":179},[162,109003,28207],{"class":207},[162,109005,109006],{"class":179}," mujoco-control",[162,109008,104039],{"class":179},[162,109010,104042],{"class":207},[162,109012,104045],{"class":207},[162,109014,109015,109017,109019],{"class":164,"line":197},[162,109016,33418],{"class":5082},[162,109018,104052],{"class":179},[162,109020,109021],{"class":179}," mujoco-control\n",[162,109023,109024,109026,109028,109030],{"class":164,"line":228},[162,109025,26922],{"class":5082},[162,109027,26925],{"class":179},[162,109029,103994],{"class":179},[162,109031,103997],{"class":179},[19,109033,104068],{},[1452,109035,109036,109042,109049,109055],{},[1455,109037,109038,109041],{},[71,109039,109040],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[1455,109043,109044,109046,109047,3183],{},[71,109045,104140],{}," 长度等于 ",[71,109048,105221],{},[1455,109050,85287,109051,109054],{},[71,109052,109053],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[1455,109056,109057],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,109059,104109],{"id":104108},[19,109061,109062],{},"关节决定 body 如何运动:",[153,109064,109066],{"className":56137,"code":109065,"language":56139,"meta":158,"style":158},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[71,109067,109068],{"__ignoreMap":158},[162,109069,109070,109072,109074,109076,109078,109081,109083,109085,109087,109090,109092,109095],{"class":164,"line":165},[162,109071,4187],{"class":168},[162,109073,106019],{"class":54373},[162,109075,18013],{"class":5082},[162,109077,173],{"class":168},[162,109079,109080],{"class":179},"\"hinge\"",[162,109082,56894],{"class":5082},[162,109084,173],{"class":168},[162,109086,109080],{"class":179},[162,109088,109089],{"class":5082}," axis",[162,109091,173],{"class":168},[162,109093,109094],{"class":179},"\"0 1 0\"",[162,109096,104208],{"class":168},[19,109098,106115],{},[1452,109100,109101,109106,109109],{},[1455,109102,109103,109104],{},"名字是 ",[71,109105,108901],{},[1455,109107,109108],{},"类型是旋转关节",[1455,109110,109111],{},"绕 y 轴旋转",[19,109113,109114],{},"actuator 决定如何施加控制:",[153,109116,109118],{"className":56137,"code":109117,"language":56139,"meta":158,"style":158},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[71,109119,109120,109129,109175],{"__ignoreMap":158},[162,109121,109122,109124,109127],{"class":164,"line":165},[162,109123,4187],{"class":168},[162,109125,109126],{"class":54373},"actuator",[162,109128,54380],{"class":168},[162,109130,109131,109133,109136,109138,109140,109143,109146,109148,109150,109153,109155,109157,109160,109162,109165,109168,109170,109173],{"class":164,"line":197},[162,109132,55215],{"class":168},[162,109134,109135],{"class":54373},"motor",[162,109137,18013],{"class":5082},[162,109139,173],{"class":168},[162,109141,109142],{"class":179},"\"hinge_motor\"",[162,109144,109145],{"class":5082}," joint",[162,109147,173],{"class":168},[162,109149,109080],{"class":179},[162,109151,109152],{"class":5082}," gear",[162,109154,173],{"class":168},[162,109156,6792],{"class":179},[162,109158,109159],{"class":5082}," ctrlrange",[162,109161,173],{"class":168},[162,109163,109164],{"class":179},"\"-2 2\"",[162,109166,109167],{"class":5082}," ctrllimited",[162,109169,173],{"class":168},[162,109171,109172],{"class":179},"\"true\"",[162,109174,104208],{"class":168},[162,109176,109177,109179,109181],{"class":164,"line":228},[162,109178,54857],{"class":168},[162,109180,109126],{"class":54373},[162,109182,54380],{"class":168},[19,109184,109185,109188,109189,3183],{},[71,109186,109187],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[71,109190,109191],{},"[-2, 2]",[3284,109193,109195],{"id":109194},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,109197,109198],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[26,109200,109201,109211],{},[29,109202,109203],{},[32,109204,109205,109207,109209],{},[35,109206,28845],{"align":26827},[35,109208,105759],{"align":26827},[35,109210,103798],{"align":26827},[51,109212,109213,109223],{},[32,109214,109215,109217,109220],{},[56,109216,106019],{"align":26827},[56,109218,109219],{"align":26827},"定义能怎么动",[56,109221,109222],{"align":26827},"门轴允许门旋转",[32,109224,109225,109227,109230],{},[56,109226,109126],{"align":26827},[56,109228,109229],{"align":26827},"定义怎么施力或控制",[56,109231,109232],{"align":26827},"人推门、马达带动门",[19,109234,109235,109236,109238],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[71,109237,104140],{}," 主动控制它。",[19,109240,109241],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[3284,109243,109245],{"id":109244},"hinge-joint","hinge joint",[153,109247,109249],{"className":56137,"code":109248,"language":56139,"meta":158,"style":158},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[71,109250,109251],{"__ignoreMap":158},[162,109252,109253,109255,109257,109259,109261,109263,109265,109267,109269,109271,109273,109275,109278,109280,109283],{"class":164,"line":165},[162,109254,4187],{"class":168},[162,109256,106019],{"class":54373},[162,109258,18013],{"class":5082},[162,109260,173],{"class":168},[162,109262,109080],{"class":179},[162,109264,56894],{"class":5082},[162,109266,173],{"class":168},[162,109268,109080],{"class":179},[162,109270,109089],{"class":5082},[162,109272,173],{"class":168},[162,109274,109094],{"class":179},[162,109276,109277],{"class":5082}," damping",[162,109279,173],{"class":168},[162,109281,109282],{"class":179},"\"0.1\"",[162,109284,104208],{"class":168},[19,109286,109287],{},"含义：",[1452,109289,109290,109296,109302],{},[1455,109291,109292,109295],{},[71,109293,109294],{},"type=\"hinge\"","：只能绕一个轴旋转。",[1455,109297,109298,109301],{},[71,109299,109300],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[1455,109303,109304,109307],{},[71,109305,109306],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[3284,109309,109311],{"id":109310},"motor-actuator","motor actuator",[153,109313,109315],{"className":56137,"code":109314,"language":56139,"meta":158,"style":158},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[71,109316,109317],{"__ignoreMap":158},[162,109318,109319,109321,109323,109325,109327,109329,109331,109333,109335,109337,109339,109341,109343,109345,109347,109349,109351,109353],{"class":164,"line":165},[162,109320,4187],{"class":168},[162,109322,109135],{"class":54373},[162,109324,18013],{"class":5082},[162,109326,173],{"class":168},[162,109328,109142],{"class":179},[162,109330,109145],{"class":5082},[162,109332,173],{"class":168},[162,109334,109080],{"class":179},[162,109336,109152],{"class":5082},[162,109338,173],{"class":168},[162,109340,6792],{"class":179},[162,109342,109159],{"class":5082},[162,109344,173],{"class":168},[162,109346,109164],{"class":179},[162,109348,109167],{"class":5082},[162,109350,173],{"class":168},[162,109352,109172],{"class":179},[162,109354,104208],{"class":168},[19,109356,109287],{},[1452,109358,109359,109368,109374,109380],{},[1455,109360,109361,109364,109365,109367],{},[71,109362,109363],{},"joint=\"hinge\"","：这个电机作用在名为 ",[71,109366,108901],{}," 的关节上。",[1455,109369,109370,109373],{},[71,109371,109372],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[1455,109375,109376,109379],{},[71,109377,109378],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[1455,109381,109382,109385],{},[71,109383,109384],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,109387,109388],{},"简单理解：",[153,109390,109393],{"className":109391,"code":109392,"language":8295,"meta":158},[8293],"实际施加效果 ≈ data.ctrl[0] * gear\n",[71,109394,109392],{"__ignoreMap":158},[19,109396,109397],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,109399,104317],{"id":104316},[153,109401,109403],{"className":155,"code":109402,"language":157,"meta":158,"style":158},"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",[71,109404,109405,109412,109416,109422,109432,109436,109440,109448,109453,109458,109462,109466,109471,109476,109480,109485,109490,109495,109500,109504,109508,109512,109517,109522,109527,109531,109535,109539,109543,109555,109567,109575,109579,109589,109599,109609,109613,109626,109639,109643,109660,109674,109709,109713,109717,109728,109743,109758,109770,109774,109778,109790],{"__ignoreMap":158},[162,109406,109407,109409],{"class":164,"line":165},[162,109408,33478],{"class":172},[162,109410,109411],{"class":168}," math\n",[162,109413,109414],{"class":164,"line":197},[162,109415,301],{"emptyLinePlaceholder":300},[162,109417,109418,109420],{"class":164,"line":228},[162,109419,33478],{"class":172},[162,109421,104365],{"class":168},[162,109423,109424,109426,109428,109430],{"class":164,"line":252},[162,109425,33478],{"class":172},[162,109427,34463],{"class":168},[162,109429,34466],{"class":172},[162,109431,34469],{"class":168},[162,109433,109434],{"class":164,"line":328},[162,109435,301],{"emptyLinePlaceholder":300},[162,109437,109438],{"class":164,"line":466},[162,109439,301],{"emptyLinePlaceholder":300},[162,109441,109442,109444,109446],{"class":164,"line":471},[162,109443,104378],{"class":207},[162,109445,16659],{"class":172},[162,109447,104383],{"class":179},[162,109449,109450],{"class":164,"line":687},[162,109451,109452],{"class":179},"\u003Cmujoco model=\"one_link_motor\">\n",[162,109454,109455],{"class":164,"line":692},[162,109456,109457],{"class":179},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[162,109459,109460],{"class":164,"line":698},[162,109461,301],{"emptyLinePlaceholder":300},[162,109463,109464],{"class":164,"line":2955},[162,109465,104402],{"class":179},[162,109467,109468],{"class":164,"line":2960},[162,109469,109470],{"class":179},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[162,109472,109473],{"class":164,"line":2971},[162,109474,109475],{"class":179},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[162,109477,109478],{"class":164,"line":2984},[162,109479,301],{"emptyLinePlaceholder":300},[162,109481,109482],{"class":164,"line":2989},[162,109483,109484],{"class":179},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[162,109486,109487],{"class":164,"line":3011},[162,109488,109489],{"class":179},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[162,109491,109492],{"class":164,"line":3022},[162,109493,109494],{"class":179},"        \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",[162,109496,109497],{"class":164,"line":3027},[162,109498,109499],{"class":179},"      \u003C\u002Fbody>\n",[162,109501,109502],{"class":164,"line":3046},[162,109503,104431],{"class":179},[162,109505,109506],{"class":164,"line":3052},[162,109507,104436],{"class":179},[162,109509,109510],{"class":164,"line":3057},[162,109511,301],{"emptyLinePlaceholder":300},[162,109513,109514],{"class":164,"line":3072},[162,109515,109516],{"class":179},"  \u003Cactuator>\n",[162,109518,109519],{"class":164,"line":3077},[162,109520,109521],{"class":179},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[162,109523,109524],{"class":164,"line":3100},[162,109525,109526],{"class":179},"  \u003C\u002Factuator>\n",[162,109528,109529],{"class":164,"line":3140},[162,109530,104441],{"class":179},[162,109532,109533],{"class":164,"line":4878},[162,109534,98763],{"class":179},[162,109536,109537],{"class":164,"line":4883},[162,109538,301],{"emptyLinePlaceholder":300},[162,109540,109541],{"class":164,"line":4897},[162,109542,301],{"emptyLinePlaceholder":300},[162,109544,109545,109547,109549,109551,109553],{"class":164,"line":4902},[162,109546,35026],{"class":172},[162,109548,5092],{"class":5082},[162,109550,104462],{"class":168},[162,109552,98751],{"class":207},[162,109554,2316],{"class":168},[162,109556,109557,109559,109561,109563,109565],{"class":164,"line":5694},[162,109558,104471],{"class":168},[162,109560,173],{"class":172},[162,109562,104476],{"class":168},[162,109564,104378],{"class":207},[162,109566,434],{"class":168},[162,109568,109569,109571,109573],{"class":164,"line":5708},[162,109570,104485],{"class":168},[162,109572,173],{"class":172},[162,109574,104490],{"class":168},[162,109576,109577],{"class":164,"line":5716},[162,109578,301],{"emptyLinePlaceholder":300},[162,109580,109581,109583,109585,109587],{"class":164,"line":5721},[162,109582,822],{"class":207},[162,109584,604],{"class":168},[162,109586,104503],{"class":179},[162,109588,104506],{"class":168},[162,109590,109591,109593,109595,109597],{"class":164,"line":5727},[162,109592,822],{"class":207},[162,109594,604],{"class":168},[162,109596,104515],{"class":179},[162,109598,104518],{"class":168},[162,109600,109601,109603,109605,109607],{"class":164,"line":5733},[162,109602,822],{"class":207},[162,109604,604],{"class":168},[162,109606,104527],{"class":179},[162,109608,104530],{"class":168},[162,109610,109611],{"class":164,"line":5738},[162,109612,301],{"emptyLinePlaceholder":300},[162,109614,109615,109617,109620,109622,109624],{"class":164,"line":11052},[162,109616,2283],{"class":172},[162,109618,109619],{"class":168}," model.nu ",[162,109621,24039],{"class":172},[162,109623,28210],{"class":207},[162,109625,2316],{"class":168},[162,109627,109628,109630,109632,109634,109637],{"class":164,"line":11076},[162,109629,106494],{"class":172},[162,109631,106497],{"class":207},[162,109633,604],{"class":168},[162,109635,109636],{"class":179},"\"expected exactly one actuator\"",[162,109638,434],{"class":168},[162,109640,109641],{"class":164,"line":11081},[162,109642,301],{"emptyLinePlaceholder":300},[162,109644,109645,109647,109649,109651,109653,109655,109658],{"class":164,"line":11087},[162,109646,6315],{"class":172},[162,109648,34696],{"class":168},[162,109650,814],{"class":172},[162,109652,2647],{"class":207},[162,109654,604],{"class":168},[162,109656,109657],{"class":207},"2000",[162,109659,33870],{"class":168},[162,109661,109662,109665,109667,109669,109671],{"class":164,"line":11114},[162,109663,109664],{"class":168},"        t ",[162,109666,173],{"class":172},[162,109668,34696],{"class":168},[162,109670,3745],{"class":172},[162,109672,109673],{"class":168}," model.opt.timestep\n",[162,109675,109676,109679,109681,109683,109685,109688,109690,109693,109695,109697,109700,109702,109704,109706],{"class":164,"line":11119},[162,109677,109678],{"class":168},"        data.ctrl[",[162,109680,312],{"class":207},[162,109682,1204],{"class":168},[162,109684,173],{"class":172},[162,109686,109687],{"class":207}," 1.5",[162,109689,9624],{"class":172},[162,109691,109692],{"class":168}," math.sin(",[162,109694,108321],{"class":207},[162,109696,9624],{"class":172},[162,109698,109699],{"class":168}," math.pi ",[162,109701,3745],{"class":172},[162,109703,64935],{"class":207},[162,109705,9624],{"class":172},[162,109707,109708],{"class":168}," t)\n",[162,109710,109711],{"class":164,"line":11125},[162,109712,104580],{"class":168},[162,109714,109715],{"class":164,"line":11137},[162,109716,301],{"emptyLinePlaceholder":300},[162,109718,109719,109721,109723,109726],{"class":164,"line":11149},[162,109720,822],{"class":207},[162,109722,604],{"class":168},[162,109724,109725],{"class":179},"\"time:\"",[162,109727,104542],{"class":168},[162,109729,109730,109732,109734,109737,109739,109741],{"class":164,"line":11161},[162,109731,822],{"class":207},[162,109733,604],{"class":168},[162,109735,109736],{"class":179},"\"joint qpos:\"",[162,109738,107991],{"class":168},[162,109740,223],{"class":207},[162,109742,586],{"class":168},[162,109744,109745,109747,109749,109752,109754,109756],{"class":164,"line":12816},[162,109746,822],{"class":207},[162,109748,604],{"class":168},[162,109750,109751],{"class":179},"\"joint qvel:\"",[162,109753,108007],{"class":168},[162,109755,223],{"class":207},[162,109757,586],{"class":168},[162,109759,109760,109762,109764,109767],{"class":164,"line":12841},[162,109761,822],{"class":207},[162,109763,604],{"class":168},[162,109765,109766],{"class":179},"\"last ctrl:\"",[162,109768,109769],{"class":168},", data.ctrl.copy())\n",[162,109771,109772],{"class":164,"line":12864},[162,109773,301],{"emptyLinePlaceholder":300},[162,109775,109776],{"class":164,"line":12888},[162,109777,301],{"emptyLinePlaceholder":300},[162,109779,109780,109782,109784,109786,109788],{"class":164,"line":12893},[162,109781,2703],{"class":172},[162,109783,34304],{"class":207},[162,109785,2714],{"class":172},[162,109787,104625],{"class":179},[162,109789,2316],{"class":168},[162,109791,109792],{"class":164,"line":12898},[162,109793,104632],{"class":168},[19,109795,106632],{},[153,109797,109799],{"className":26913,"code":109798,"language":26915,"meta":158,"style":158},"touch ch4_joint_motor.py\n",[71,109800,109801],{"__ignoreMap":158},[162,109802,109803,109805],{"class":164,"line":165},[162,109804,104347],{"class":5082},[162,109806,109807],{"class":179}," ch4_joint_motor.py\n",[19,109809,105364],{},[153,109811,109813],{"className":26913,"code":109812,"language":26915,"meta":158,"style":158},"python ch4_joint_motor.py\n",[71,109814,109815],{"__ignoreMap":158},[162,109816,109817,109819],{"class":164,"line":165},[162,109818,157],{"class":5082},[162,109820,109807],{"class":179},[3284,109822,104635],{"id":104635},[19,109824,109825],{},"检查 actuator 数量：",[153,109827,109829],{"className":155,"code":109828,"language":157,"meta":158,"style":158},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[71,109830,109831,109843],{"__ignoreMap":158},[162,109832,109833,109835,109837,109839,109841],{"class":164,"line":165},[162,109834,2703],{"class":172},[162,109836,109619],{"class":168},[162,109838,24039],{"class":172},[162,109840,28210],{"class":207},[162,109842,2316],{"class":168},[162,109844,109845,109847,109849,109851,109853],{"class":164,"line":197},[162,109846,106957],{"class":172},[162,109848,106497],{"class":207},[162,109850,604],{"class":168},[162,109852,109636],{"class":179},[162,109854,434],{"class":168},[19,109856,109857,109859,109860,109862],{},[71,109858,105221],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[71,109861,104140],{}," 长度应该是 1。",[19,109864,109865],{},"产生正弦控制信号：",[153,109867,109869],{"className":155,"code":109868,"language":157,"meta":158,"style":158},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[71,109870,109871],{"__ignoreMap":158},[162,109872,109873,109875,109877,109879,109881,109883,109885,109887,109889,109891,109893,109895,109897,109899],{"class":164,"line":165},[162,109874,108932],{"class":168},[162,109876,312],{"class":207},[162,109878,1204],{"class":168},[162,109880,173],{"class":172},[162,109882,109687],{"class":207},[162,109884,9624],{"class":172},[162,109886,109692],{"class":168},[162,109888,108321],{"class":207},[162,109890,9624],{"class":172},[162,109892,109699],{"class":168},[162,109894,3745],{"class":172},[162,109896,64935],{"class":207},[162,109898,9624],{"class":172},[162,109900,109708],{"class":168},[19,109902,109903],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,109905,104736],{},[153,109907,109908],{"className":155,"code":107566,"language":157,"meta":158,"style":158},[71,109909,109910],{"__ignoreMap":158},[162,109911,109912],{"class":164,"line":165},[162,109913,107566],{"class":168},[19,109915,109916],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[3284,109918,104771],{"id":104771},[153,109920,109922],{"className":155,"code":109921,"language":157,"meta":158,"style":158},"import math\n",[71,109923,109924],{"__ignoreMap":158},[162,109925,109926,109928],{"class":164,"line":165},[162,109927,33478],{"class":172},[162,109929,109411],{"class":168},[19,109931,109932,109933,104082,109936,109939],{},"导入 Python 标准库里的数学模块。后面要用 ",[71,109934,109935],{},"math.sin",[71,109937,109938],{},"math.pi"," 生成周期变化的控制信号。",[153,109941,109942],{"className":155,"code":106748,"language":157,"meta":158,"style":158},[71,109943,109944,109950],{"__ignoreMap":158},[162,109945,109946,109948],{"class":164,"line":165},[162,109947,33478],{"class":172},[162,109949,104365],{"class":168},[162,109951,109952,109954,109956,109958],{"class":164,"line":197},[162,109953,33478],{"class":172},[162,109955,34463],{"class":168},[162,109957,34466],{"class":172},[162,109959,34469],{"class":168},[19,109961,109962],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[153,109964,109965],{"className":56137,"code":109248,"language":56139,"meta":158,"style":158},[71,109966,109967],{"__ignoreMap":158},[162,109968,109969,109971,109973,109975,109977,109979,109981,109983,109985,109987,109989,109991,109993,109995,109997],{"class":164,"line":165},[162,109970,4187],{"class":168},[162,109972,106019],{"class":54373},[162,109974,18013],{"class":5082},[162,109976,173],{"class":168},[162,109978,109080],{"class":179},[162,109980,56894],{"class":5082},[162,109982,173],{"class":168},[162,109984,109080],{"class":179},[162,109986,109089],{"class":5082},[162,109988,173],{"class":168},[162,109990,109094],{"class":179},[162,109992,109277],{"class":5082},[162,109994,173],{"class":168},[162,109996,109282],{"class":179},[162,109998,104208],{"class":168},[19,110000,110001,110002,110004,110005,110007,110008,110010],{},"这行定义关节。",[71,110003,108901],{}," 表示旋转关节。",[71,110006,109300],{}," 表示绕 y 轴旋转。",[71,110009,109306],{}," 表示有一点阻尼，运动不会完全无损耗。",[153,110012,110014],{"className":56137,"code":110013,"language":56139,"meta":158,"style":158},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[71,110015,110016],{"__ignoreMap":158},[162,110017,110018,110020,110022,110024,110026,110029,110031,110033,110036,110039,110041,110044,110046,110048,110050,110052,110054,110057],{"class":164,"line":165},[162,110019,4187],{"class":168},[162,110021,104184],{"class":54373},[162,110023,18013],{"class":5082},[162,110025,173],{"class":168},[162,110027,110028],{"class":179},"\"link_geom\"",[162,110030,56894],{"class":5082},[162,110032,173],{"class":168},[162,110034,110035],{"class":179},"\"capsule\"",[162,110037,110038],{"class":5082}," fromto",[162,110040,173],{"class":168},[162,110042,110043],{"class":179},"\"0 0 0 0 0 0.5\"",[162,110045,104200],{"class":5082},[162,110047,173],{"class":168},[162,110049,106840],{"class":179},[162,110051,105064],{"class":5082},[162,110053,173],{"class":168},[162,110055,110056],{"class":179},"\"0.5\"",[162,110058,104208],{"class":168},[19,110060,110061,110062,110064,110065,110067,110068,110071,110072,3183,110075,110077],{},"这行定义摆杆的形状。",[71,110063,106227],{}," 是胶囊体，适合表示杆子。",[71,110066,106238],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[71,110069,110070],{},"(0,0,0)"," 延伸到 ",[71,110073,110074],{},"(0,0,0.5)",[71,110076,106232],{}," 是半径。",[153,110079,110080],{"className":56137,"code":109314,"language":56139,"meta":158,"style":158},[71,110081,110082],{"__ignoreMap":158},[162,110083,110084,110086,110088,110090,110092,110094,110096,110098,110100,110102,110104,110106,110108,110110,110112,110114,110116,110118],{"class":164,"line":165},[162,110085,4187],{"class":168},[162,110087,109135],{"class":54373},[162,110089,18013],{"class":5082},[162,110091,173],{"class":168},[162,110093,109142],{"class":179},[162,110095,109145],{"class":5082},[162,110097,173],{"class":168},[162,110099,109080],{"class":179},[162,110101,109152],{"class":5082},[162,110103,173],{"class":168},[162,110105,6792],{"class":179},[162,110107,109159],{"class":5082},[162,110109,173],{"class":168},[162,110111,109164],{"class":179},[162,110113,109167],{"class":5082},[162,110115,173],{"class":168},[162,110117,109172],{"class":179},[162,110119,104208],{"class":168},[19,110121,110122,110123,110125,110126,110129,110130,110132],{},"这行定义电机。它作用在 ",[71,110124,108901],{}," 关节上。",[71,110127,110128],{},"gear"," 可以理解成放大倍数。",[71,110131,108916],{}," 限制控制输入范围。",[153,110134,110135],{"className":155,"code":109828,"language":157,"meta":158,"style":158},[71,110136,110137,110149],{"__ignoreMap":158},[162,110138,110139,110141,110143,110145,110147],{"class":164,"line":165},[162,110140,2703],{"class":172},[162,110142,109619],{"class":168},[162,110144,24039],{"class":172},[162,110146,28210],{"class":207},[162,110148,2316],{"class":168},[162,110150,110151,110153,110155,110157,110159],{"class":164,"line":197},[162,110152,106957],{"class":172},[162,110154,106497],{"class":207},[162,110156,604],{"class":168},[162,110158,109636],{"class":179},[162,110160,434],{"class":168},[19,110162,110163,110165],{},[71,110164,105221],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[153,110167,110169],{"className":155,"code":110168,"language":157,"meta":158,"style":158},"for step in range(2000):\n",[71,110170,110171],{"__ignoreMap":158},[162,110172,110173,110175,110177,110179,110181,110183,110185],{"class":164,"line":165},[162,110174,808],{"class":172},[162,110176,34696],{"class":168},[162,110178,814],{"class":172},[162,110180,2647],{"class":207},[162,110182,604],{"class":168},[162,110184,109657],{"class":207},[162,110186,33870],{"class":168},[19,110188,110189,110190,110192,110193,110196],{},"循环 2000 步。这里没有用 ",[71,110191,4264],{},"，而是用 ",[71,110194,110195],{},"step","，因为后面要用当前步数计算时间。",[153,110198,110200],{"className":155,"code":110199,"language":157,"meta":158,"style":158},"t = step * model.opt.timestep\n",[71,110201,110202],{"__ignoreMap":158},[162,110203,110204,110207,110209,110211,110213],{"class":164,"line":165},[162,110205,110206],{"class":168},"t ",[162,110208,173],{"class":172},[162,110210,34696],{"class":168},[162,110212,3745],{"class":172},[162,110214,109673],{"class":168},[19,110216,110217],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[153,110219,110220],{"className":155,"code":109868,"language":157,"meta":158,"style":158},[71,110221,110222],{"__ignoreMap":158},[162,110223,110224,110226,110228,110230,110232,110234,110236,110238,110240,110242,110244,110246,110248,110250],{"class":164,"line":165},[162,110225,108932],{"class":168},[162,110227,312],{"class":207},[162,110229,1204],{"class":168},[162,110231,173],{"class":172},[162,110233,109687],{"class":207},[162,110235,9624],{"class":172},[162,110237,109692],{"class":168},[162,110239,108321],{"class":207},[162,110241,9624],{"class":172},[162,110243,109699],{"class":168},[162,110245,3745],{"class":172},[162,110247,64935],{"class":207},[162,110249,9624],{"class":172},[162,110251,109708],{"class":168},[19,110253,110254],{},"这行给电机输入一个正弦波。拆开看：",[1452,110256,110257,110263,110269],{},[1455,110258,110259,110262],{},[71,110260,110261],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[1455,110264,110265,110268],{},[71,110266,110267],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[1455,110270,110271,110274],{},[71,110272,110273],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,110276,110277],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[153,110279,110281],{"className":155,"code":110280,"language":157,"meta":158,"style":158},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[71,110282,110283],{"__ignoreMap":158},[162,110284,110285,110287,110289,110291,110293,110295],{"class":164,"line":165},[162,110286,306],{"class":207},[162,110288,604],{"class":168},[162,110290,109736],{"class":179},[162,110292,107991],{"class":168},[162,110294,223],{"class":207},[162,110296,586],{"class":168},[19,110298,110299,110300,110302],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[71,110301,104134],{}," 只有一个数。",[14,110304,105379],{"id":105378},[19,110306,110307],{},"输出类似:",[153,110309,110312],{"className":110310,"code":110311,"language":8295,"meta":158},[8293],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[71,110313,110311],{"__ignoreMap":158},[19,110315,110316,110317,110319],{},"这里 ",[71,110318,109187],{}," 是电机输入。",[19,110321,110322,110325,110326,110329],{},[71,110323,110324],{},"joint qpos"," 是关节角度，单位通常是弧度。",[71,110327,110328],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,110331,110332],{},"角度单位提示：",[153,110334,110337],{"className":110335,"code":110336,"language":8295,"meta":158},[8293],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[71,110338,110336],{"__ignoreMap":158},[19,110340,110341,110342,110344,110345,110347],{},"如果你看到 ",[71,110343,107092],{}," 是 ",[71,110346,38404],{},"，大约就是 28.6 度。",[14,110349,105411],{"id":105410},[1452,110351,110352,110359,110362,110369,110372,110380,110388],{},[1455,110353,105474,110354,105477,110356,3183],{},[71,110355,109372],{},[71,110357,110358],{},"gear=\"5\"",[1455,110360,110361],{},"重新运行，观察关节运动是否更剧烈。",[1455,110363,105474,110364,105477,110366,3183],{},[71,110365,108916],{},[71,110367,110368],{},"-0.2 0.2",[1455,110370,110371],{},"重新运行，观察控制能力是否变弱。",[1455,110373,110374,110375,110377,110378,3183],{},"去掉 actuator，确认 ",[71,110376,105221],{}," 变成 ",[71,110379,312],{},[1455,110381,105474,110382,105477,110384,110387],{},[71,110383,109306],{},[71,110385,110386],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[1455,110389,105474,110390,105477,110392,110395],{},[71,110391,109300],{},[71,110393,110394],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,110397,105516],{"id":105515},[3284,110399,110401],{"id":110400},"indexerror-index-0-is-out-of-bounds",[71,110402,110403],{},"IndexError: index 0 is out of bounds",[19,110405,110406,110407,110409],{},"原因是 ",[71,110408,109053],{},"，没有 actuator。",[3284,110411,110412],{"id":110412},"关节几乎不动",[19,110414,110415],{},"可能原因:",[1452,110417,110418,110423,110427,110433],{},[1455,110419,110420,110422],{},[71,110421,110128],{}," 太小",[1455,110424,110425,110422],{},[71,110426,108916],{},[1455,110428,110429,110432],{},[71,110430,110431],{},"damping"," 太大",[1455,110434,110435],{},"重力方向导致运动不明显",[3284,110437,110438],{"id":110438},"模型编译失败",[19,110440,110441,110442,110444],{},"检查 actuator 引用的 ",[71,110443,109363],{}," 是否存在，joint 名称是否拼写一致。",[3284,110446,110448,110450],{"id":110447},"datactrl0-写了但没有效果",[71,110449,109187],{}," 写了但没有效果",[19,110452,105638],{},[1452,110454,110455,110460,110463,110468,110473],{},[1455,110456,110457,110459],{},[71,110458,105221],{}," 是否大于 0。",[1455,110461,110462],{},"motor 是否引用了正确 joint。",[1455,110464,110465,110467],{},[71,110466,110128],{}," 是否太小。",[1455,110469,110470,110472],{},[71,110471,108916],{}," 是否把输入限制得太小。",[1455,110474,110475],{},"body 是否真的有可动 joint。",[3284,110477,110478],{"id":110478},"控制输入超过范围会怎样",[19,110480,110481],{},"如果设置了：",[153,110483,110485],{"className":56137,"code":110484,"language":56139,"meta":158,"style":158},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[71,110486,110487],{"__ignoreMap":158},[162,110488,110489],{"class":164,"line":165},[162,110490,110484],{"class":168},[19,110492,110493],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[153,110495,110497],{"className":155,"code":110496,"language":157,"meta":158,"style":158},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[71,110498,110499,110519],{"__ignoreMap":158},[162,110500,110501,110504,110506,110509,110511,110513,110515,110517],{"class":164,"line":165},[162,110502,110503],{"class":168},"action ",[162,110505,173],{"class":172},[162,110507,110508],{"class":168}," np.clip(action, ",[162,110510,353],{"class":172},[162,110512,108321],{"class":207},[162,110514,183],{"class":168},[162,110516,108321],{"class":207},[162,110518,434],{"class":168},[162,110520,110521,110523,110525,110527,110529],{"class":164,"line":197},[162,110522,108932],{"class":168},[162,110524,312],{"class":207},[162,110526,1204],{"class":168},[162,110528,173],{"class":172},[162,110530,110531],{"class":168}," action\n",[14,110533,105670],{"id":105669},[19,110535,110536],{},"这一章建立了控制任务的基本形式：",[153,110538,110541],{"className":110539,"code":110540,"language":8295,"meta":158},[8293],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[71,110542,110540],{"__ignoreMap":158},[19,110544,110545],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[3219,110547,110548],{},"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":158,"searchDepth":197,"depth":197,"links":110550},[110551,110552,110553,110558,110562,110563,110564,110572],{"id":103710,"depth":197,"text":103711},{"id":103833,"depth":197,"text":103834},{"id":104108,"depth":197,"text":104109,"children":110554},[110555,110556,110557],{"id":109194,"depth":228,"text":109195},{"id":109244,"depth":228,"text":109245},{"id":109310,"depth":228,"text":109311},{"id":104316,"depth":197,"text":104317,"children":110559},[110560,110561],{"id":104635,"depth":228,"text":104635},{"id":104771,"depth":228,"text":104771},{"id":105378,"depth":197,"text":105379},{"id":105410,"depth":197,"text":105411},{"id":105515,"depth":197,"text":105516,"children":110565},[110566,110567,110568,110569,110571],{"id":110400,"depth":228,"text":110403},{"id":110412,"depth":228,"text":110412},{"id":110438,"depth":228,"text":110438},{"id":110447,"depth":228,"text":110570},"data.ctrl[0] 写了但没有效果",{"id":110478,"depth":228,"text":110478},{"id":105669,"depth":197,"text":105670},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":108882,"description":158},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":110579,"title":110580,"body":110581,"description":158,"extension":3242,"meta":112490,"navigation":300,"path":112491,"seo":112492,"stem":112493,"__hash__":112494},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":110582,"toc":112466},[110583,110586,110588,110591,110599,110602,110619,110622,110647,110650,110696,110698,110700,110755,110757,110776,110778,110821,110824,110841,110844,110860,110870,110877,110879,110882,110885,110919,110922,110970,110974,110977,110991,111000,111004,111007,111032,111035,111039,111052,111055,111061,111064,111079,111081,111084,111344,111346,111358,111361,111673,111675,111687,111689,111692,111707,111712,111715,111737,111740,111743,111777,111780,111784,111795,111798,111815,111818,111832,111839,111859,111866,111880,111883,111895,111910,111930,111933,111955,111958,111962,111977,111988,112003,112006,112036,112052,112081,112089,112113,112116,112134,112144,112156,112163,112172,112178,112187,112190,112192,112201,112204,112219,112221,112224,112235,112238,112249,112252,112270,112272,112289,112292,112320,112322,112326,112329,112359,112365,112368,112372,112380,112383,112385,112406,112409,112412,112428,112431,112447,112449,112452,112463],[10,110584,110580],{"id":110585},"_5viewer-可视化与-renderer-离屏渲染",[14,110587,103711],{"id":103710},[19,110589,110590],{},"本章掌握两类可视化方式:",[1452,110592,110593,110596],{},[1455,110594,110595],{},"交互式 viewer: 适合人工观察仿真",[1455,110597,110598],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,110600,110601],{},"使用官方接口:",[153,110603,110605],{"className":155,"code":110604,"language":157,"meta":158,"style":158},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[71,110606,110607,110614],{"__ignoreMap":158},[162,110608,110609,110611],{"class":164,"line":165},[162,110610,33478],{"class":172},[162,110612,110613],{"class":168}," mujoco.viewer\n",[162,110615,110616],{"class":164,"line":197},[162,110617,110618],{"class":168},"mujoco.viewer.launch_passive(model, data)\n",[19,110620,110621],{},"以及:",[153,110623,110625],{"className":155,"code":110624,"language":157,"meta":158,"style":158},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[71,110626,110627,110637],{"__ignoreMap":158},[162,110628,110629,110632,110634],{"class":164,"line":165},[162,110630,110631],{"class":168},"renderer ",[162,110633,173],{"class":172},[162,110635,110636],{"class":168}," mujoco.Renderer(model)\n",[162,110638,110639,110642,110644],{"class":164,"line":197},[162,110640,110641],{"class":168},"image ",[162,110643,173],{"class":172},[162,110645,110646],{"class":168}," renderer.render()\n",[19,110648,110649],{},"新手建议先理解二者区别：",[26,110651,110652,110668],{},[29,110653,110654],{},[32,110655,110656,110659,110662,110665],{},[35,110657,110658],{"align":26827},"工具",[35,110660,110661],{"align":26827},"用途",[35,110663,110664],{"align":26827},"是否打开窗口",[35,110666,110667],{"align":26827},"常见场景",[51,110669,110670,110683],{},[32,110671,110672,110675,110678,110680],{},[56,110673,110674],{"align":26827},"Viewer",[56,110676,110677],{"align":26827},"人眼实时观察仿真",[56,110679,107726],{"align":26827},[56,110681,110682],{"align":26827},"调试模型、看控制效果",[32,110684,110685,110688,110691,110693],{},[56,110686,110687],{"align":26827},"Renderer",[56,110689,110690],{"align":26827},"生成图像数组",[56,110692,107739],{"align":26827},[56,110694,110695],{"align":26827},"保存图片、训练视觉策略、服务器批量采集",[14,110697,103834],{"id":103833},[19,110699,103837],{},[153,110701,110703],{"className":26913,"code":110702,"language":26915,"meta":158,"style":158},"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",[71,110704,110705,110717,110727,110735,110743],{"__ignoreMap":158},[162,110706,110707,110709,110711,110713,110715],{"class":164,"line":165},[162,110708,27668],{"class":5082},[162,110710,29405],{"class":179},[162,110712,26925],{"class":179},[162,110714,29490],{"class":207},[162,110716,27770],{"class":207},[162,110718,110719,110721,110723,110725],{"class":164,"line":197},[162,110720,103872],{"class":179},[162,110722,103875],{"class":179},[162,110724,103878],{"class":179},[162,110726,27770],{"class":207},[162,110728,110729,110731,110733],{"class":164,"line":228},[162,110730,103885],{"class":179},[162,110732,103888],{"class":179},[162,110734,27770],{"class":207},[162,110736,110737,110739,110741],{"class":164,"line":252},[162,110738,103895],{"class":179},[162,110740,103898],{"class":179},[162,110742,27770],{"class":207},[162,110744,110745,110747,110749,110751,110753],{"class":164,"line":328},[162,110746,103905],{"class":179},[162,110748,103908],{"class":179},[162,110750,103911],{"class":179},[162,110752,103914],{"class":179},[162,110754,105579],{"class":179},[19,110756,105882],{},[153,110758,110760],{"className":26913,"code":110759,"language":26915,"meta":158,"style":158},"pip install \"mujoco>=2.3\" numpy pillow\n",[71,110761,110762],{"__ignoreMap":158},[162,110763,110764,110766,110768,110770,110773],{"class":164,"line":165},[162,110765,26922],{"class":5082},[162,110767,26925],{"class":179},[162,110769,103994],{"class":179},[162,110771,110772],{"class":179}," numpy",[162,110774,110775],{"class":179}," pillow\n",[19,110777,105899],{},[153,110779,110781],{"className":26913,"code":110780,"language":26915,"meta":158,"style":158},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[71,110782,110783,110800,110809],{"__ignoreMap":158},[162,110784,110785,110787,110789,110791,110794,110796,110798],{"class":164,"line":165},[162,110786,33418],{"class":5082},[162,110788,32264],{"class":179},[162,110790,28207],{"class":207},[162,110792,110793],{"class":179}," mujoco-render",[162,110795,104039],{"class":179},[162,110797,104042],{"class":207},[162,110799,104045],{"class":207},[162,110801,110802,110804,110806],{"class":164,"line":197},[162,110803,33418],{"class":5082},[162,110805,104052],{"class":179},[162,110807,110808],{"class":179}," mujoco-render\n",[162,110810,110811,110813,110815,110817,110819],{"class":164,"line":228},[162,110812,26922],{"class":5082},[162,110814,26925],{"class":179},[162,110816,103994],{"class":179},[162,110818,110772],{"class":179},[162,110820,110775],{"class":179},[19,110822,110823],{},"离屏渲染后端:",[153,110825,110827],{"className":26913,"code":110826,"language":26915,"meta":158,"style":158},"export MUJOCO_GL=egl\n",[71,110828,110829],{"__ignoreMap":158},[162,110830,110831,110833,110836,110838],{"class":164,"line":165},[162,110832,28134],{"class":172},[162,110834,110835],{"class":168}," MUJOCO_GL",[162,110837,173],{"class":172},[162,110839,110840],{"class":168},"egl\n",[19,110842,110843],{},"或:",[153,110845,110847],{"className":26913,"code":110846,"language":26915,"meta":158,"style":158},"export MUJOCO_GL=osmesa\n",[71,110848,110849],{"__ignoreMap":158},[162,110850,110851,110853,110855,110857],{"class":164,"line":165},[162,110852,28134],{"class":172},[162,110854,110835],{"class":168},[162,110856,173],{"class":172},[162,110858,110859],{"class":168},"osmesa\n",[19,110861,110862,110863,110866,110867,3183],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[71,110864,110865],{},"egl"," 失败，再尝试 ",[71,110868,110869],{},"osmesa",[19,110871,110872,110873,110876],{},"如果你在本机桌面环境运行，通常先不要设置 ",[71,110874,110875],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,110878,104109],{"id":104108},[19,110880,110881],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,110883,110884],{},"典型 viewer 流程:",[153,110886,110888],{"className":155,"code":110887,"language":157,"meta":158,"style":158},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[71,110889,110890,110903,110910,110914],{"__ignoreMap":158},[162,110891,110892,110895,110898,110900],{"class":164,"line":165},[162,110893,110894],{"class":172},"with",[162,110896,110897],{"class":168}," mujoco.viewer.launch_passive(model, data) ",[162,110899,34466],{"class":172},[162,110901,110902],{"class":168}," viewer:\n",[162,110904,110905,110907],{"class":164,"line":197},[162,110906,5369],{"class":172},[162,110908,110909],{"class":168}," viewer.is_running():\n",[162,110911,110912],{"class":164,"line":228},[162,110913,104580],{"class":168},[162,110915,110916],{"class":164,"line":252},[162,110917,110918],{"class":168},"        viewer.sync()\n",[19,110920,110921],{},"典型 renderer 流程:",[153,110923,110925],{"className":155,"code":110924,"language":157,"meta":158,"style":158},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[71,110926,110927,110953,110957,110962],{"__ignoreMap":158},[162,110928,110929,110931,110933,110936,110938,110940,110942,110944,110946,110948,110951],{"class":164,"line":165},[162,110930,110631],{"class":168},[162,110932,173],{"class":172},[162,110934,110935],{"class":168}," mujoco.Renderer(model, ",[162,110937,28073],{"class":671},[162,110939,173],{"class":172},[162,110941,45417],{"class":207},[162,110943,183],{"class":168},[162,110945,28069],{"class":671},[162,110947,173],{"class":172},[162,110949,110950],{"class":207},"640",[162,110952,434],{"class":168},[162,110954,110955],{"class":164,"line":197},[162,110956,107566],{"class":168},[162,110958,110959],{"class":164,"line":228},[162,110960,110961],{"class":168},"renderer.update_scene(data)\n",[162,110963,110964,110966,110968],{"class":164,"line":252},[162,110965,110641],{"class":168},[162,110967,173],{"class":172},[162,110969,110646],{"class":168},[3284,110971,110973],{"id":110972},"viewer-的同步逻辑","viewer 的同步逻辑",[19,110975,110976],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[153,110978,110980],{"className":155,"code":110979,"language":157,"meta":158,"style":158},"mujoco.mj_step(model, data)\nviewer.sync()\n",[71,110981,110982,110986],{"__ignoreMap":158},[162,110983,110984],{"class":164,"line":165},[162,110985,107566],{"class":168},[162,110987,110988],{"class":164,"line":197},[162,110989,110990],{"class":168},"viewer.sync()\n",[19,110992,110993,110995,110996,110999],{},[71,110994,104279],{}," 负责算物理，",[71,110997,110998],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[3284,111001,111003],{"id":111002},"为什么要-sleep","为什么要 sleep",[19,111005,111006],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[153,111008,111010],{"className":155,"code":111009,"language":157,"meta":158,"style":158},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[71,111011,111012],{"__ignoreMap":158},[162,111013,111014,111017,111019,111022,111024,111027,111029],{"class":164,"line":165},[162,111015,111016],{"class":168},"sleep_time ",[162,111018,173],{"class":172},[162,111020,111021],{"class":168}," model.opt.timestep ",[162,111023,353],{"class":172},[162,111025,111026],{"class":168}," (time.time() ",[162,111028,353],{"class":172},[162,111030,111031],{"class":168}," step_start)\n",[19,111033,111034],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[3284,111036,111038],{"id":111037},"renderer-输出是什么","renderer 输出是什么",[153,111040,111042],{"className":155,"code":111041,"language":157,"meta":158,"style":158},"image = renderer.render()\n",[71,111043,111044],{"__ignoreMap":158},[162,111045,111046,111048,111050],{"class":164,"line":165},[162,111047,110641],{"class":168},[162,111049,173],{"class":172},[162,111051,110646],{"class":168},[19,111053,111054],{},"得到的是 NumPy 数组，形状通常是：",[153,111056,111059],{"className":111057,"code":111058,"language":8295,"meta":158},[8293],"(height, width, 3)\n",[71,111060,111058],{"__ignoreMap":158},[19,111062,111063],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[153,111065,111067],{"className":155,"code":111066,"language":157,"meta":158,"style":158},"Image.fromarray(image).save(\"render_output.png\")\n",[71,111068,111069],{"__ignoreMap":158},[162,111070,111071,111074,111077],{"class":164,"line":165},[162,111072,111073],{"class":168},"Image.fromarray(image).save(",[162,111075,111076],{"class":179},"\"render_output.png\"",[162,111078,434],{"class":168},[14,111080,104317],{"id":104316},[19,111082,111083],{},"交互式 Viewer:",[153,111085,111087],{"className":155,"code":111086,"language":157,"meta":158,"style":158},"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",[71,111088,111089,111095,111099,111105,111111,111115,111119,111127,111132,111136,111140,111144,111149,111154,111158,111162,111166,111171,111175,111179,111183,111187,111191,111195,111207,111219,111227,111231,111241,111261,111271,111276,111281,111285,111302,111315,111320,111324,111328,111340],{"__ignoreMap":158},[162,111090,111091,111093],{"class":164,"line":165},[162,111092,33478],{"class":172},[162,111094,34908],{"class":168},[162,111096,111097],{"class":164,"line":197},[162,111098,301],{"emptyLinePlaceholder":300},[162,111100,111101,111103],{"class":164,"line":228},[162,111102,33478],{"class":172},[162,111104,104365],{"class":168},[162,111106,111107,111109],{"class":164,"line":252},[162,111108,33478],{"class":172},[162,111110,110613],{"class":168},[162,111112,111113],{"class":164,"line":328},[162,111114,301],{"emptyLinePlaceholder":300},[162,111116,111117],{"class":164,"line":466},[162,111118,301],{"emptyLinePlaceholder":300},[162,111120,111121,111123,111125],{"class":164,"line":471},[162,111122,104378],{"class":207},[162,111124,16659],{"class":172},[162,111126,104383],{"class":179},[162,111128,111129],{"class":164,"line":687},[162,111130,111131],{"class":179},"\u003Cmujoco model=\"viewer_demo\">\n",[162,111133,111134],{"class":164,"line":692},[162,111135,104393],{"class":179},[162,111137,111138],{"class":164,"line":698},[162,111139,301],{"emptyLinePlaceholder":300},[162,111141,111142],{"class":164,"line":2955},[162,111143,104402],{"class":179},[162,111145,111146],{"class":164,"line":2960},[162,111147,111148],{"class":179},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[162,111150,111151],{"class":164,"line":2971},[162,111152,111153],{"class":179},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[162,111155,111156],{"class":164,"line":2984},[162,111157,301],{"emptyLinePlaceholder":300},[162,111159,111160],{"class":164,"line":2989},[162,111161,104416],{"class":179},[162,111163,111164],{"class":164,"line":3011},[162,111165,104421],{"class":179},[162,111167,111168],{"class":164,"line":3022},[162,111169,111170],{"class":179},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[162,111172,111173],{"class":164,"line":3027},[162,111174,104431],{"class":179},[162,111176,111177],{"class":164,"line":3046},[162,111178,104436],{"class":179},[162,111180,111181],{"class":164,"line":3052},[162,111182,104441],{"class":179},[162,111184,111185],{"class":164,"line":3057},[162,111186,98763],{"class":179},[162,111188,111189],{"class":164,"line":3072},[162,111190,301],{"emptyLinePlaceholder":300},[162,111192,111193],{"class":164,"line":3077},[162,111194,301],{"emptyLinePlaceholder":300},[162,111196,111197,111199,111201,111203,111205],{"class":164,"line":3100},[162,111198,35026],{"class":172},[162,111200,5092],{"class":5082},[162,111202,104462],{"class":168},[162,111204,98751],{"class":207},[162,111206,2316],{"class":168},[162,111208,111209,111211,111213,111215,111217],{"class":164,"line":3140},[162,111210,104471],{"class":168},[162,111212,173],{"class":172},[162,111214,104476],{"class":168},[162,111216,104378],{"class":207},[162,111218,434],{"class":168},[162,111220,111221,111223,111225],{"class":164,"line":4878},[162,111222,104485],{"class":168},[162,111224,173],{"class":172},[162,111226,104490],{"class":168},[162,111228,111229],{"class":164,"line":4883},[162,111230,301],{"emptyLinePlaceholder":300},[162,111232,111233,111235,111237,111239],{"class":164,"line":4897},[162,111234,37253],{"class":172},[162,111236,110897],{"class":168},[162,111238,34466],{"class":172},[162,111240,110902],{"class":168},[162,111242,111243,111246,111249,111251,111254,111256,111259],{"class":164,"line":4902},[162,111244,111245],{"class":172},"        while",[162,111247,111248],{"class":168}," viewer.is_running() ",[162,111250,33547],{"class":172},[162,111252,111253],{"class":168}," data.time ",[162,111255,4187],{"class":172},[162,111257,111258],{"class":207}," 5.0",[162,111260,2316],{"class":168},[162,111262,111263,111266,111268],{"class":164,"line":5694},[162,111264,111265],{"class":168},"            step_start ",[162,111267,173],{"class":172},[162,111269,111270],{"class":168}," time.time()\n",[162,111272,111273],{"class":164,"line":5708},[162,111274,111275],{"class":168},"            mujoco.mj_step(model, data)\n",[162,111277,111278],{"class":164,"line":5716},[162,111279,111280],{"class":168},"            viewer.sync()\n",[162,111282,111283],{"class":164,"line":5721},[162,111284,301],{"emptyLinePlaceholder":300},[162,111286,111287,111290,111292,111294,111296,111298,111300],{"class":164,"line":5727},[162,111288,111289],{"class":168},"            sleep_time ",[162,111291,173],{"class":172},[162,111293,111021],{"class":168},[162,111295,353],{"class":172},[162,111297,111026],{"class":168},[162,111299,353],{"class":172},[162,111301,111031],{"class":168},[162,111303,111304,111306,111309,111311,111313],{"class":164,"line":5733},[162,111305,7752],{"class":172},[162,111307,111308],{"class":168}," sleep_time ",[162,111310,3000],{"class":172},[162,111312,2717],{"class":207},[162,111314,2316],{"class":168},[162,111316,111317],{"class":164,"line":5738},[162,111318,111319],{"class":168},"                time.sleep(sleep_time)\n",[162,111321,111322],{"class":164,"line":11052},[162,111323,301],{"emptyLinePlaceholder":300},[162,111325,111326],{"class":164,"line":11076},[162,111327,301],{"emptyLinePlaceholder":300},[162,111329,111330,111332,111334,111336,111338],{"class":164,"line":11081},[162,111331,2703],{"class":172},[162,111333,34304],{"class":207},[162,111335,2714],{"class":172},[162,111337,104625],{"class":179},[162,111339,2316],{"class":168},[162,111341,111342],{"class":164,"line":11087},[162,111343,104632],{"class":168},[19,111345,106632],{},[153,111347,111349],{"className":26913,"code":111348,"language":26915,"meta":158,"style":158},"touch ch5_viewer.py\n",[71,111350,111351],{"__ignoreMap":158},[162,111352,111353,111355],{"class":164,"line":165},[162,111354,104347],{"class":5082},[162,111356,111357],{"class":179}," ch5_viewer.py\n",[19,111359,111360],{},"离屏 Renderer 保存图片:",[153,111362,111364],{"className":155,"code":111363,"language":157,"meta":158,"style":158},"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",[71,111365,111366,111378,111382,111388,111398,111402,111406,111414,111419,111423,111427,111431,111435,111440,111444,111448,111452,111456,111460,111464,111468,111472,111476,111480,111484,111496,111508,111516,111541,111545,111561,111565,111569,111584,111593,111597,111611,111616,111621,111625,111637,111649,111653,111657,111669],{"__ignoreMap":158},[162,111367,111368,111370,111373,111375],{"class":164,"line":165},[162,111369,33821],{"class":172},[162,111371,111372],{"class":168}," pathlib ",[162,111374,33478],{"class":172},[162,111376,111377],{"class":168}," Path\n",[162,111379,111380],{"class":164,"line":197},[162,111381,301],{"emptyLinePlaceholder":300},[162,111383,111384,111386],{"class":164,"line":228},[162,111385,33478],{"class":172},[162,111387,104365],{"class":168},[162,111389,111390,111392,111394,111396],{"class":164,"line":252},[162,111391,33821],{"class":172},[162,111393,50337],{"class":207},[162,111395,50340],{"class":172},[162,111397,50343],{"class":168},[162,111399,111400],{"class":164,"line":328},[162,111401,301],{"emptyLinePlaceholder":300},[162,111403,111404],{"class":164,"line":466},[162,111405,301],{"emptyLinePlaceholder":300},[162,111407,111408,111410,111412],{"class":164,"line":471},[162,111409,104378],{"class":207},[162,111411,16659],{"class":172},[162,111413,104383],{"class":179},[162,111415,111416],{"class":164,"line":687},[162,111417,111418],{"class":179},"\u003Cmujoco model=\"renderer_demo\">\n",[162,111420,111421],{"class":164,"line":692},[162,111422,104393],{"class":179},[162,111424,111425],{"class":164,"line":698},[162,111426,301],{"emptyLinePlaceholder":300},[162,111428,111429],{"class":164,"line":2955},[162,111430,104402],{"class":179},[162,111432,111433],{"class":164,"line":2960},[162,111434,111148],{"class":179},[162,111436,111437],{"class":164,"line":2971},[162,111438,111439],{"class":179},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[162,111441,111442],{"class":164,"line":2984},[162,111443,111153],{"class":179},[162,111445,111446],{"class":164,"line":2989},[162,111447,301],{"emptyLinePlaceholder":300},[162,111449,111450],{"class":164,"line":3011},[162,111451,104416],{"class":179},[162,111453,111454],{"class":164,"line":3022},[162,111455,104421],{"class":179},[162,111457,111458],{"class":164,"line":3027},[162,111459,111170],{"class":179},[162,111461,111462],{"class":164,"line":3046},[162,111463,104431],{"class":179},[162,111465,111466],{"class":164,"line":3052},[162,111467,104436],{"class":179},[162,111469,111470],{"class":164,"line":3057},[162,111471,104441],{"class":179},[162,111473,111474],{"class":164,"line":3072},[162,111475,98763],{"class":179},[162,111477,111478],{"class":164,"line":3077},[162,111479,301],{"emptyLinePlaceholder":300},[162,111481,111482],{"class":164,"line":3100},[162,111483,301],{"emptyLinePlaceholder":300},[162,111485,111486,111488,111490,111492,111494],{"class":164,"line":3140},[162,111487,35026],{"class":172},[162,111489,5092],{"class":5082},[162,111491,104462],{"class":168},[162,111493,98751],{"class":207},[162,111495,2316],{"class":168},[162,111497,111498,111500,111502,111504,111506],{"class":164,"line":4878},[162,111499,104471],{"class":168},[162,111501,173],{"class":172},[162,111503,104476],{"class":168},[162,111505,104378],{"class":207},[162,111507,434],{"class":168},[162,111509,111510,111512,111514],{"class":164,"line":4883},[162,111511,104485],{"class":168},[162,111513,173],{"class":172},[162,111515,104490],{"class":168},[162,111517,111518,111521,111523,111525,111527,111529,111531,111533,111535,111537,111539],{"class":164,"line":4897},[162,111519,111520],{"class":168},"    renderer ",[162,111522,173],{"class":172},[162,111524,110935],{"class":168},[162,111526,28073],{"class":671},[162,111528,173],{"class":172},[162,111530,45417],{"class":207},[162,111532,183],{"class":168},[162,111534,28069],{"class":671},[162,111536,173],{"class":172},[162,111538,110950],{"class":207},[162,111540,434],{"class":168},[162,111542,111543],{"class":164,"line":4902},[162,111544,301],{"emptyLinePlaceholder":300},[162,111546,111547,111549,111551,111553,111555,111557,111559],{"class":164,"line":5694},[162,111548,6315],{"class":172},[162,111550,104565],{"class":168},[162,111552,814],{"class":172},[162,111554,2647],{"class":207},[162,111556,604],{"class":168},[162,111558,3608],{"class":207},[162,111560,33870],{"class":168},[162,111562,111563],{"class":164,"line":5708},[162,111564,104580],{"class":168},[162,111566,111567],{"class":164,"line":5716},[162,111568,301],{"emptyLinePlaceholder":300},[162,111570,111571,111574,111577,111579,111582],{"class":164,"line":5721},[162,111572,111573],{"class":168},"    renderer.update_scene(data, ",[162,111575,111576],{"class":671},"camera",[162,111578,173],{"class":172},[162,111580,111581],{"class":179},"\"fixed_camera\"",[162,111583,434],{"class":168},[162,111585,111586,111589,111591],{"class":164,"line":5727},[162,111587,111588],{"class":168},"    image ",[162,111590,173],{"class":172},[162,111592,110646],{"class":168},[162,111594,111595],{"class":164,"line":5733},[162,111596,301],{"emptyLinePlaceholder":300},[162,111598,111599,111602,111604,111607,111609],{"class":164,"line":5738},[162,111600,111601],{"class":168},"    output_path ",[162,111603,173],{"class":172},[162,111605,111606],{"class":168}," Path(",[162,111608,111076],{"class":179},[162,111610,434],{"class":168},[162,111612,111613],{"class":164,"line":11052},[162,111614,111615],{"class":168},"    Image.fromarray(image).save(output_path)\n",[162,111617,111618],{"class":164,"line":11076},[162,111619,111620],{"class":168},"    renderer.close()\n",[162,111622,111623],{"class":164,"line":11081},[162,111624,301],{"emptyLinePlaceholder":300},[162,111626,111627,111629,111631,111634],{"class":164,"line":11087},[162,111628,822],{"class":207},[162,111630,604],{"class":168},[162,111632,111633],{"class":179},"\"saved:\"",[162,111635,111636],{"class":168},", output_path.resolve())\n",[162,111638,111639,111641,111643,111646],{"class":164,"line":11114},[162,111640,822],{"class":207},[162,111642,604],{"class":168},[162,111644,111645],{"class":179},"\"image shape:\"",[162,111647,111648],{"class":168},", image.shape)\n",[162,111650,111651],{"class":164,"line":11119},[162,111652,301],{"emptyLinePlaceholder":300},[162,111654,111655],{"class":164,"line":11125},[162,111656,301],{"emptyLinePlaceholder":300},[162,111658,111659,111661,111663,111665,111667],{"class":164,"line":11137},[162,111660,2703],{"class":172},[162,111662,34304],{"class":207},[162,111664,2714],{"class":172},[162,111666,104625],{"class":179},[162,111668,2316],{"class":168},[162,111670,111671],{"class":164,"line":11149},[162,111672,104632],{"class":168},[19,111674,106632],{},[153,111676,111678],{"className":26913,"code":111677,"language":26915,"meta":158,"style":158},"touch ch5_renderer.py\n",[71,111679,111680],{"__ignoreMap":158},[162,111681,111682,111684],{"class":164,"line":165},[162,111683,104347],{"class":5082},[162,111685,111686],{"class":179}," ch5_renderer.py\n",[3284,111688,104635],{"id":104635},[19,111690,111691],{},"viewer 上下文：",[153,111693,111695],{"className":155,"code":111694,"language":157,"meta":158,"style":158},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[71,111696,111697],{"__ignoreMap":158},[162,111698,111699,111701,111703,111705],{"class":164,"line":165},[162,111700,110894],{"class":172},[162,111702,110897],{"class":168},[162,111704,34466],{"class":172},[162,111706,110902],{"class":168},[19,111708,111709,111711],{},[71,111710,110894],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,111713,111714],{},"窗口循环：",[153,111716,111718],{"className":155,"code":111717,"language":157,"meta":158,"style":158},"while viewer.is_running() and data.time \u003C 5.0:\n",[71,111719,111720],{"__ignoreMap":158},[162,111721,111722,111725,111727,111729,111731,111733,111735],{"class":164,"line":165},[162,111723,111724],{"class":172},"while",[162,111726,111248],{"class":168},[162,111728,33547],{"class":172},[162,111730,111253],{"class":168},[162,111732,4187],{"class":172},[162,111734,111258],{"class":207},[162,111736,2316],{"class":168},[19,111738,111739],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,111741,111742],{},"固定相机：",[153,111744,111746],{"className":56137,"code":111745,"language":56139,"meta":158,"style":158},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[71,111747,111748],{"__ignoreMap":158},[162,111749,111750,111752,111754,111756,111758,111760,111762,111764,111767,111770,111772,111775],{"class":164,"line":165},[162,111751,4187],{"class":168},[162,111753,111576],{"class":54373},[162,111755,18013],{"class":5082},[162,111757,173],{"class":168},[162,111759,111581],{"class":179},[162,111761,104170],{"class":5082},[162,111763,173],{"class":168},[162,111765,111766],{"class":179},"\"1.5 -2.0 1.2\"",[162,111768,111769],{"class":5082}," xyaxes",[162,111771,173],{"class":168},[162,111773,111774],{"class":179},"\"1 0.75 0 0 0 1\"",[162,111776,104208],{"class":168},[19,111778,111779],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[3284,111781,111783],{"id":111782},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[153,111785,111787],{"className":155,"code":111786,"language":157,"meta":158,"style":158},"import time\n",[71,111788,111789],{"__ignoreMap":158},[162,111790,111791,111793],{"class":164,"line":165},[162,111792,33478],{"class":172},[162,111794,34908],{"class":168},[19,111796,111797],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[153,111799,111801],{"className":155,"code":111800,"language":157,"meta":158,"style":158},"import mujoco\nimport mujoco.viewer\n",[71,111802,111803,111809],{"__ignoreMap":158},[162,111804,111805,111807],{"class":164,"line":165},[162,111806,33478],{"class":172},[162,111808,104365],{"class":168},[162,111810,111811,111813],{"class":164,"line":197},[162,111812,33478],{"class":172},[162,111814,110613],{"class":168},[19,111816,111817],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[153,111819,111820],{"className":155,"code":111694,"language":157,"meta":158,"style":158},[71,111821,111822],{"__ignoreMap":158},[162,111823,111824,111826,111828,111830],{"class":164,"line":165},[162,111825,110894],{"class":172},[162,111827,110897],{"class":168},[162,111829,34466],{"class":172},[162,111831,110902],{"class":168},[19,111833,111834,111835,111838],{},"打开一个 viewer 窗口。",[71,111836,111837],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[153,111840,111841],{"className":155,"code":111717,"language":157,"meta":158,"style":158},[71,111842,111843],{"__ignoreMap":158},[162,111844,111845,111847,111849,111851,111853,111855,111857],{"class":164,"line":165},[162,111846,111724],{"class":172},[162,111848,111248],{"class":168},[162,111850,33547],{"class":172},[162,111852,111253],{"class":168},[162,111854,4187],{"class":172},[162,111856,111258],{"class":207},[162,111858,2316],{"class":168},[19,111860,111861,111862,111865],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[71,111863,111864],{},"viewer.is_running()"," 会变成 false，循环结束。",[153,111867,111869],{"className":155,"code":111868,"language":157,"meta":158,"style":158},"step_start = time.time()\n",[71,111870,111871],{"__ignoreMap":158},[162,111872,111873,111876,111878],{"class":164,"line":165},[162,111874,111875],{"class":168},"step_start ",[162,111877,173],{"class":172},[162,111879,111270],{"class":168},[19,111881,111882],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[153,111884,111885],{"className":155,"code":110979,"language":157,"meta":158,"style":158},[71,111886,111887,111891],{"__ignoreMap":158},[162,111888,111889],{"class":164,"line":165},[162,111890,107566],{"class":168},[162,111892,111893],{"class":164,"line":197},[162,111894,110990],{"class":168},[19,111896,111897,111899,111900,111902,111903,111905,111906,111909],{},[71,111898,104279],{}," 推进物理仿真。",[71,111901,110998],{}," 把最新的 ",[71,111904,36476],{}," 同步到窗口里显示。没有 ",[71,111907,111908],{},"sync()","，窗口可能看不到最新状态。",[153,111911,111912],{"className":155,"code":111009,"language":157,"meta":158,"style":158},[71,111913,111914],{"__ignoreMap":158},[162,111915,111916,111918,111920,111922,111924,111926,111928],{"class":164,"line":165},[162,111917,111016],{"class":168},[162,111919,173],{"class":172},[162,111921,111021],{"class":168},[162,111923,353],{"class":172},[162,111925,111026],{"class":168},[162,111927,353],{"class":172},[162,111929,111031],{"class":168},[19,111931,111932],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[153,111934,111936],{"className":155,"code":111935,"language":157,"meta":158,"style":158},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[71,111937,111938,111950],{"__ignoreMap":158},[162,111939,111940,111942,111944,111946,111948],{"class":164,"line":165},[162,111941,2703],{"class":172},[162,111943,111308],{"class":168},[162,111945,3000],{"class":172},[162,111947,2717],{"class":207},[162,111949,2316],{"class":168},[162,111951,111952],{"class":164,"line":197},[162,111953,111954],{"class":168},"    time.sleep(sleep_time)\n",[19,111956,111957],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[3284,111959,111961],{"id":111960},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[153,111963,111965],{"className":155,"code":111964,"language":157,"meta":158,"style":158},"from pathlib import Path\n",[71,111966,111967],{"__ignoreMap":158},[162,111968,111969,111971,111973,111975],{"class":164,"line":165},[162,111970,33821],{"class":172},[162,111972,111372],{"class":168},[162,111974,33478],{"class":172},[162,111976,111377],{"class":168},[19,111978,111979,111980,111983,111984,111987],{},"导入 ",[71,111981,111982],{},"Path","，用来处理文件路径。相比直接写字符串，",[71,111985,111986],{},"Path(\"render_output.png\")"," 更清晰。",[153,111989,111991],{"className":155,"code":111990,"language":157,"meta":158,"style":158},"from PIL import Image\n",[71,111992,111993],{"__ignoreMap":158},[162,111994,111995,111997,111999,112001],{"class":164,"line":165},[162,111996,33821],{"class":172},[162,111998,50337],{"class":207},[162,112000,50340],{"class":172},[162,112002,50343],{"class":168},[19,112004,112005],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[153,112007,112008],{"className":56137,"code":111745,"language":56139,"meta":158,"style":158},[71,112009,112010],{"__ignoreMap":158},[162,112011,112012,112014,112016,112018,112020,112022,112024,112026,112028,112030,112032,112034],{"class":164,"line":165},[162,112013,4187],{"class":168},[162,112015,111576],{"class":54373},[162,112017,18013],{"class":5082},[162,112019,173],{"class":168},[162,112021,111581],{"class":179},[162,112023,104170],{"class":5082},[162,112025,173],{"class":168},[162,112027,111766],{"class":179},[162,112029,111769],{"class":5082},[162,112031,173],{"class":168},[162,112033,111774],{"class":179},[162,112035,104208],{"class":168},[19,112037,112038,112039,112041,112042,112044,112045,112048,112049,112051],{},"定义一个相机。",[71,112040,82875],{}," 是相机名字。",[71,112043,107208],{}," 是相机在世界里的位置。",[71,112046,112047],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[71,112050,107208],{}," 来调视角。",[153,112053,112055],{"className":155,"code":112054,"language":157,"meta":158,"style":158},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[71,112056,112057],{"__ignoreMap":158},[162,112058,112059,112061,112063,112065,112067,112069,112071,112073,112075,112077,112079],{"class":164,"line":165},[162,112060,110631],{"class":168},[162,112062,173],{"class":172},[162,112064,110935],{"class":168},[162,112066,28073],{"class":671},[162,112068,173],{"class":172},[162,112070,45417],{"class":207},[162,112072,183],{"class":168},[162,112074,28069],{"class":671},[162,112076,173],{"class":172},[162,112078,110950],{"class":207},[162,112080,434],{"class":168},[19,112082,112083,112084,104082,112086,112088],{},"创建离屏渲染器。",[71,112085,28073],{},[71,112087,28069],{}," 决定输出图片大小。",[153,112090,112091],{"className":155,"code":104739,"language":157,"meta":158,"style":158},[71,112092,112093,112109],{"__ignoreMap":158},[162,112094,112095,112097,112099,112101,112103,112105,112107],{"class":164,"line":165},[162,112096,808],{"class":172},[162,112098,104565],{"class":168},[162,112100,814],{"class":172},[162,112102,2647],{"class":207},[162,112104,604],{"class":168},[162,112106,3608],{"class":207},[162,112108,33870],{"class":168},[162,112110,112111],{"class":164,"line":197},[162,112112,104762],{"class":168},[19,112114,112115],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[153,112117,112119],{"className":155,"code":112118,"language":157,"meta":158,"style":158},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[71,112120,112121],{"__ignoreMap":158},[162,112122,112123,112126,112128,112130,112132],{"class":164,"line":165},[162,112124,112125],{"class":168},"renderer.update_scene(data, ",[162,112127,111576],{"class":671},[162,112129,173],{"class":172},[162,112131,111581],{"class":179},[162,112133,434],{"class":168},[19,112135,112136,112137,112139,112140,112143],{},"告诉 renderer：用当前 ",[71,112138,36476],{}," 的状态更新画面，并使用名为 ",[71,112141,112142],{},"fixed_camera"," 的相机视角。",[153,112145,112146],{"className":155,"code":111041,"language":157,"meta":158,"style":158},[71,112147,112148],{"__ignoreMap":158},[162,112149,112150,112152,112154],{"class":164,"line":165},[162,112151,110641],{"class":168},[162,112153,173],{"class":172},[162,112155,110646],{"class":168},[19,112157,112158,112159,112162],{},"真正渲染出图像。",[71,112160,112161],{},"image"," 是一个 NumPy 数组，不是文件。",[153,112164,112166],{"className":155,"code":112165,"language":157,"meta":158,"style":158},"Image.fromarray(image).save(output_path)\n",[71,112167,112168],{"__ignoreMap":158},[162,112169,112170],{"class":164,"line":165},[162,112171,112165],{"class":168},[19,112173,112174,112175,3183],{},"把数组转换成图片，并保存到 ",[71,112176,112177],{},"render_output.png",[153,112179,112181],{"className":155,"code":112180,"language":157,"meta":158,"style":158},"renderer.close()\n",[71,112182,112183],{"__ignoreMap":158},[162,112184,112185],{"class":164,"line":165},[162,112186,112180],{"class":168},[19,112188,112189],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,112191,105379],{"id":105378},[19,112193,112194,112195,112197,112198,3183],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[71,112196,112177],{},"，并输出图像数组形状，例如 ",[71,112199,112200],{},"(480, 640, 3)",[19,112202,112203],{},"如果图片里看不到方块，先检查：",[1452,112205,112206,112209,112212],{},[1455,112207,112208],{},"方块是否掉到相机视野外。",[1455,112210,112211],{},"camera 位置是否合理。",[1455,112213,112214,112215,112218],{},"是否在 ",[71,112216,112217],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,112220,105411],{"id":105410},[19,112222,112223],{},"运行 viewer:",[153,112225,112227],{"className":26913,"code":112226,"language":26915,"meta":158,"style":158},"python ch5_viewer.py\n",[71,112228,112229],{"__ignoreMap":158},[162,112230,112231,112233],{"class":164,"line":165},[162,112232,157],{"class":5082},[162,112234,111357],{"class":179},[19,112236,112237],{},"运行 renderer:",[153,112239,112241],{"className":26913,"code":112240,"language":26915,"meta":158,"style":158},"python ch5_renderer.py\n",[71,112242,112243],{"__ignoreMap":158},[162,112244,112245,112247],{"class":164,"line":165},[162,112246,157],{"class":5082},[162,112248,111686],{"class":179},[19,112250,112251],{},"如果在服务器上运行:",[153,112253,112255],{"className":26913,"code":112254,"language":26915,"meta":158,"style":158},"MUJOCO_GL=egl python ch5_renderer.py\n",[71,112256,112257],{"__ignoreMap":158},[162,112258,112259,112261,112263,112265,112268],{"class":164,"line":165},[162,112260,110875],{"class":168},[162,112262,173],{"class":172},[162,112264,110865],{"class":179},[162,112266,112267],{"class":5082}," python",[162,112269,111686],{"class":179},[19,112271,110843],{},[153,112273,112275],{"className":26913,"code":112274,"language":26915,"meta":158,"style":158},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[71,112276,112277],{"__ignoreMap":158},[162,112278,112279,112281,112283,112285,112287],{"class":164,"line":165},[162,112280,110875],{"class":168},[162,112282,173],{"class":172},[162,112284,110869],{"class":179},[162,112286,112267],{"class":5082},[162,112288,111686],{"class":179},[19,112290,112291],{},"再做几个练习：",[1452,112293,112294,112301,112304,112310],{},[1455,112295,112296,112297,112300],{},"把 renderer 分辨率改成 ",[71,112298,112299],{},"height=240, width=320","，观察输出 shape。",[1455,112302,112303],{},"把方块颜色改成蓝色，重新保存图片。",[1455,112305,112306,112307,112309],{},"把相机 ",[71,112308,107208],{}," 改远一点，观察画面中物体是否变小。",[1455,112311,112312,112313,105477,112316,112319],{},"把 viewer 示例中的 ",[71,112314,112315],{},"data.time \u003C 5.0",[71,112317,112318],{},"data.time \u003C 20.0","，观察更长时间。",[14,112321,105516],{"id":105515},[3284,112323,112325],{"id":112324},"viewer-窗口打不开","viewer 窗口打不开",[19,112327,112328],{},"安装:",[153,112330,112332],{"className":26913,"code":112331,"language":26915,"meta":158,"style":158},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[71,112333,112334],{"__ignoreMap":158},[162,112335,112336,112338,112340,112342,112344,112346,112348,112350,112352,112354,112356],{"class":164,"line":165},[162,112337,27668],{"class":5082},[162,112339,29405],{"class":179},[162,112341,26925],{"class":179},[162,112343,29490],{"class":207},[162,112345,105569],{"class":179},[162,112347,103898],{"class":179},[162,112349,105574],{"class":179},[162,112351,103911],{"class":179},[162,112353,103917],{"class":179},[162,112355,103908],{"class":179},[162,112357,112358],{"class":179}," libXinerama\n",[3284,112360,112362],{"id":112361},"glfwerror",[71,112363,112364],{},"GLFWError",[19,112366,112367],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[3284,112369,112371],{"id":112370},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,112373,112374,112375,85604,112377,112379],{},"尝试 ",[71,112376,104101],{},[71,112378,104104],{},"。可能存在版本差异。",[3284,112381,112382],{"id":112382},"保存图片是黑的",[19,112384,105638],{},[1452,112386,112387,112390,112393,112403],{},[1455,112388,112389],{},"XML 里是否有 light。",[1455,112391,112392],{},"相机是否对着模型。",[1455,112394,112395,112396,112399,112400,3183],{},"是否先 ",[71,112397,112398],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[71,112401,112402],{},"renderer.render()",[1455,112404,112405],{},"物体是否已经掉出视野。",[3284,112407,112408],{"id":112408},"远程服务器没有显示器",[19,112410,112411],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[153,112413,112414],{"className":26913,"code":112254,"language":26915,"meta":158,"style":158},[71,112415,112416],{"__ignoreMap":158},[162,112417,112418,112420,112422,112424,112426],{"class":164,"line":165},[162,112419,110875],{"class":168},[162,112421,173],{"class":172},[162,112423,110865],{"class":179},[162,112425,112267],{"class":5082},[162,112427,111686],{"class":179},[19,112429,112430],{},"如果 EGL 不可用，再尝试：",[153,112432,112433],{"className":26913,"code":112274,"language":26915,"meta":158,"style":158},[71,112434,112435],{"__ignoreMap":158},[162,112436,112437,112439,112441,112443,112445],{"class":164,"line":165},[162,112438,110875],{"class":168},[162,112440,173],{"class":172},[162,112442,110869],{"class":179},[162,112444,112267],{"class":5082},[162,112446,111686],{"class":179},[14,112448,105670],{"id":105669},[19,112450,112451],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[1452,112453,112454,112457,112460],{},[1455,112455,112456],{},"先用 viewer 看模型和控制是否正常。",[1455,112458,112459],{},"再用 renderer 保存图片或构造视觉观测。",[1455,112461,112462],{},"最后把状态、动作、图像、奖励组织成训练数据。",[3219,112464,112465],{},"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":158,"searchDepth":197,"depth":197,"links":112467},[112468,112469,112470,112475,112480,112481,112482,112489],{"id":103710,"depth":197,"text":103711},{"id":103833,"depth":197,"text":103834},{"id":104108,"depth":197,"text":104109,"children":112471},[112472,112473,112474],{"id":110972,"depth":228,"text":110973},{"id":111002,"depth":228,"text":111003},{"id":111037,"depth":228,"text":111038},{"id":104316,"depth":197,"text":104317,"children":112476},[112477,112478,112479],{"id":104635,"depth":228,"text":104635},{"id":111782,"depth":228,"text":111783},{"id":111960,"depth":228,"text":111961},{"id":105378,"depth":197,"text":105379},{"id":105410,"depth":197,"text":105411},{"id":105515,"depth":197,"text":105516,"children":112483},[112484,112485,112486,112487,112488],{"id":112324,"depth":228,"text":112325},{"id":112361,"depth":228,"text":112364},{"id":112370,"depth":228,"text":112371},{"id":112382,"depth":228,"text":112382},{"id":112408,"depth":228,"text":112408},{"id":105669,"depth":197,"text":105670},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":110580,"description":158},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":112496,"title":112497,"body":112498,"description":158,"extension":3242,"meta":114409,"navigation":300,"path":114410,"seo":114411,"stem":114412,"__hash__":114413},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":112499,"toc":114385},[112500,112503,112505,112508,112510,112529,112532,112538,112541,112543,112545,112569,112571,112585,112587,112628,112630,112641,112643,112646,112652,112655,112689,112692,112724,112727,112759,112763,112766,112806,112809,112815,112818,112824,112828,112831,112837,112840,112844,112847,112887,112889,112902,112905,112907,113489,113491,113503,113506,113517,113519,113522,113541,113553,113556,113577,113580,113583,113626,113629,113632,113652,113659,113661,113679,113694,113697,113703,113706,113712,113729,113736,113767,113778,113812,113823,113840,113849,113857,113862,113876,113879,113900,113906,113920,113925,113955,113965,113990,113998,114021,114024,114040,114043,114051,114057,114079,114092,114113,114122,114161,114172,114174,114177,114183,114186,114189,114195,114198,114218,114221,114223,114262,114264,114267,114275,114278,114281,114308,114311,114321,114327,114330,114336,114338,114344,114348,114351,114353,114356,114380,114383],[10,112501,112497],{"id":112502},"_6控制任务cartpole",[14,112504,103711],{"id":103710},[19,112506,112507],{},"本章搭建一个最小 Cartpole 控制任务。",[19,112509,107393],{},[1452,112511,112512,112515,112517,112520,112523,112526],{},[1455,112513,112514],{},"slide joint",[1455,112516,109245],{},[1455,112518,112519],{},"cart force actuator",[1455,112521,112522],{},"状态观测",[1455,112524,112525],{},"简单控制循环",[1455,112527,112528],{},"reward 设计雏形",[19,112530,112531],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[153,112533,112536],{"className":112534,"code":112535,"language":8295,"meta":158},[8293],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[71,112537,112535],{"__ignoreMap":158},[19,112539,112540],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,112542,103834],{"id":103833},[19,112544,103837],{},[153,112546,112547],{"className":26913,"code":107449,"language":26915,"meta":158,"style":158},[71,112548,112549],{"__ignoreMap":158},[162,112550,112551,112553,112555,112557,112559,112561,112563,112565,112567],{"class":164,"line":165},[162,112552,27668],{"class":5082},[162,112554,29405],{"class":179},[162,112556,26925],{"class":179},[162,112558,29490],{"class":207},[162,112560,107464],{"class":179},[162,112562,103862],{"class":179},[162,112564,105564],{"class":179},[162,112566,103878],{"class":179},[162,112568,107473],{"class":179},[19,112570,105882],{},[153,112572,112573],{"className":26913,"code":103983,"language":26915,"meta":158,"style":158},[71,112574,112575],{"__ignoreMap":158},[162,112576,112577,112579,112581,112583],{"class":164,"line":165},[162,112578,26922],{"class":5082},[162,112580,26925],{"class":179},[162,112582,103994],{"class":179},[162,112584,103997],{"class":179},[19,112586,105899],{},[153,112588,112590],{"className":26913,"code":112589,"language":26915,"meta":158,"style":158},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[71,112591,112592,112609,112618],{"__ignoreMap":158},[162,112593,112594,112596,112598,112600,112603,112605,112607],{"class":164,"line":165},[162,112595,33418],{"class":5082},[162,112597,32264],{"class":179},[162,112599,28207],{"class":207},[162,112601,112602],{"class":179}," mujoco-cartpole",[162,112604,104039],{"class":179},[162,112606,104042],{"class":207},[162,112608,104045],{"class":207},[162,112610,112611,112613,112615],{"class":164,"line":197},[162,112612,33418],{"class":5082},[162,112614,104052],{"class":179},[162,112616,112617],{"class":179}," mujoco-cartpole\n",[162,112619,112620,112622,112624,112626],{"class":164,"line":228},[162,112621,26922],{"class":5082},[162,112623,26925],{"class":179},[162,112625,103994],{"class":179},[162,112627,103997],{"class":179},[19,112629,104068],{},[1452,112631,112632,112635,112638],{},[1455,112633,112634],{},"本章不依赖 Gymnasium。",[1455,112636,112637],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[1455,112639,112640],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,112642,104109],{"id":104108},[19,112644,112645],{},"Cartpole 的模型结构:",[153,112647,112650],{"className":112648,"code":112649,"language":8295,"meta":158},[8293],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[71,112651,112649],{"__ignoreMap":158},[19,112653,112654],{},"小车通过 slide joint 左右移动:",[153,112656,112658],{"className":56137,"code":112657,"language":56139,"meta":158,"style":158},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[71,112659,112660],{"__ignoreMap":158},[162,112661,112662,112664,112666,112668,112670,112673,112675,112677,112680,112682,112684,112687],{"class":164,"line":165},[162,112663,4187],{"class":168},[162,112665,106019],{"class":54373},[162,112667,18013],{"class":5082},[162,112669,173],{"class":168},[162,112671,112672],{"class":179},"\"cart_x\"",[162,112674,56894],{"class":5082},[162,112676,173],{"class":168},[162,112678,112679],{"class":179},"\"slide\"",[162,112681,109089],{"class":5082},[162,112683,173],{"class":168},[162,112685,112686],{"class":179},"\"1 0 0\"",[162,112688,104208],{"class":168},[19,112690,112691],{},"杆子通过 hinge joint 旋转:",[153,112693,112695],{"className":56137,"code":112694,"language":56139,"meta":158,"style":158},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[71,112696,112697],{"__ignoreMap":158},[162,112698,112699,112701,112703,112705,112707,112710,112712,112714,112716,112718,112720,112722],{"class":164,"line":165},[162,112700,4187],{"class":168},[162,112702,106019],{"class":54373},[162,112704,18013],{"class":5082},[162,112706,173],{"class":168},[162,112708,112709],{"class":179},"\"pole_hinge\"",[162,112711,56894],{"class":5082},[162,112713,173],{"class":168},[162,112715,109080],{"class":179},[162,112717,109089],{"class":5082},[162,112719,173],{"class":168},[162,112721,109094],{"class":179},[162,112723,104208],{"class":168},[19,112725,112726],{},"控制力作用在小车 slide joint 上:",[153,112728,112730],{"className":56137,"code":112729,"language":56139,"meta":158,"style":158},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[71,112731,112732],{"__ignoreMap":158},[162,112733,112734,112736,112738,112740,112742,112745,112747,112749,112751,112753,112755,112757],{"class":164,"line":165},[162,112735,4187],{"class":168},[162,112737,109135],{"class":54373},[162,112739,18013],{"class":5082},[162,112741,173],{"class":168},[162,112743,112744],{"class":179},"\"cart_motor\"",[162,112746,109145],{"class":5082},[162,112748,173],{"class":168},[162,112750,112672],{"class":179},[162,112752,109152],{"class":5082},[162,112754,173],{"class":168},[162,112756,57386],{"class":179},[162,112758,104208],{"class":168},[3284,112760,112762],{"id":112761},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,112764,112765],{},"这个简化模型有两个关节：",[26,112767,112768,112779],{},[29,112769,112770],{},[32,112771,112772,112774,112776],{},[35,112773,105822],{"align":26827},[35,112775,26828],{"align":26827},[35,112777,112778],{"align":26827},"对应状态",[51,112780,112781,112794],{},[32,112782,112783,112788,112791],{},[56,112784,112785],{"align":26827},[71,112786,112787],{},"cart_x",[56,112789,112790],{"align":26827},"slide",[56,112792,112793],{"align":26827},"小车 x 位置",[32,112795,112796,112801,112803],{},[56,112797,112798],{"align":26827},[71,112799,112800],{},"pole_hinge",[56,112802,108901],{"align":26827},[56,112804,112805],{"align":26827},"杆子角度",[19,112807,112808],{},"所以：",[153,112810,112813],{"className":112811,"code":112812,"language":8295,"meta":158},[8293],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[71,112814,112812],{"__ignoreMap":158},[19,112816,112817],{},"把它们拼起来就是观测：",[153,112819,112822],{"className":112820,"code":112821,"language":8295,"meta":158},[8293],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[71,112823,112821],{"__ignoreMap":158},[3284,112825,112827],{"id":112826},"action-是什么","action 是什么",[19,112829,112830],{},"本章只有一个 actuator：",[153,112832,112835],{"className":112833,"code":112834,"language":8295,"meta":158},[8293],"data.ctrl[0] = action\n",[71,112836,112834],{"__ignoreMap":158},[19,112838,112839],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[3284,112841,112843],{"id":112842},"reward-是什么","reward 是什么",[19,112845,112846],{},"奖励函数：",[153,112848,112850],{"className":155,"code":112849,"language":157,"meta":158,"style":158},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[71,112851,112852],{"__ignoreMap":158},[162,112853,112854,112856,112859,112861,112863,112865,112868,112870,112873,112875,112877,112879,112882,112884],{"class":164,"line":165},[162,112855,20137],{"class":172},[162,112857,112858],{"class":207}," float",[162,112860,604],{"class":168},[162,112862,105466],{"class":207},[162,112864,55341],{"class":172},[162,112866,112867],{"class":207}," 0.1",[162,112869,9624],{"class":172},[162,112871,112872],{"class":168}," cart_x ",[162,112874,3745],{"class":172},[162,112876,112872],{"class":168},[162,112878,353],{"class":172},[162,112880,112881],{"class":168}," pole_angle ",[162,112883,3745],{"class":172},[162,112885,112886],{"class":168}," pole_angle)\n",[19,112888,109287],{},[1452,112890,112891,112896,112899],{},[1455,112892,112893,112894,3183],{},"基础奖励是 ",[71,112895,105466],{},[1455,112897,112898],{},"小车离中心越远，扣分越多。",[1455,112900,112901],{},"杆子角度越大，扣分越多。",[19,112903,112904],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,112906,104317],{"id":104316},[153,112908,112910],{"className":155,"code":112909,"language":157,"meta":158,"style":158},"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",[71,112911,112912,112918,112928,112932,112936,112944,112949,112953,112957,112961,112966,112970,112975,112980,112985,112989,112994,112999,113004,113008,113012,113016,113020,113024,113029,113033,113037,113041,113045,113049,113059,113066,113070,113074,113088,113102,113115,113145,113149,113153,113165,113177,113185,113189,113202,113206,113210,113219,113223,113239,113249,113262,113275,113279,113302,113320,113324,113336,113340,113344,113354,113364,113368,113384,113425,113429,113449,113465,113469,113473,113485],{"__ignoreMap":158},[162,112913,112914,112916],{"class":164,"line":165},[162,112915,33478],{"class":172},[162,112917,104365],{"class":168},[162,112919,112920,112922,112924,112926],{"class":164,"line":197},[162,112921,33478],{"class":172},[162,112923,34463],{"class":168},[162,112925,34466],{"class":172},[162,112927,34469],{"class":168},[162,112929,112930],{"class":164,"line":228},[162,112931,301],{"emptyLinePlaceholder":300},[162,112933,112934],{"class":164,"line":252},[162,112935,301],{"emptyLinePlaceholder":300},[162,112937,112938,112940,112942],{"class":164,"line":328},[162,112939,104378],{"class":207},[162,112941,16659],{"class":172},[162,112943,104383],{"class":179},[162,112945,112946],{"class":164,"line":466},[162,112947,112948],{"class":179},"\u003Cmujoco model=\"cartpole\">\n",[162,112950,112951],{"class":164,"line":471},[162,112952,104393],{"class":179},[162,112954,112955],{"class":164,"line":687},[162,112956,301],{"emptyLinePlaceholder":300},[162,112958,112959],{"class":164,"line":692},[162,112960,104402],{"class":179},[162,112962,112963],{"class":164,"line":698},[162,112964,112965],{"class":179},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[162,112967,112968],{"class":164,"line":2955},[162,112969,301],{"emptyLinePlaceholder":300},[162,112971,112972],{"class":164,"line":2960},[162,112973,112974],{"class":179},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[162,112976,112977],{"class":164,"line":2971},[162,112978,112979],{"class":179},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[162,112981,112982],{"class":164,"line":2984},[162,112983,112984],{"class":179},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[162,112986,112987],{"class":164,"line":2989},[162,112988,301],{"emptyLinePlaceholder":300},[162,112990,112991],{"class":164,"line":3011},[162,112992,112993],{"class":179},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[162,112995,112996],{"class":164,"line":3022},[162,112997,112998],{"class":179},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[162,113000,113001],{"class":164,"line":3027},[162,113002,113003],{"class":179},"        \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",[162,113005,113006],{"class":164,"line":3046},[162,113007,109499],{"class":179},[162,113009,113010],{"class":164,"line":3052},[162,113011,104431],{"class":179},[162,113013,113014],{"class":164,"line":3057},[162,113015,104436],{"class":179},[162,113017,113018],{"class":164,"line":3072},[162,113019,301],{"emptyLinePlaceholder":300},[162,113021,113022],{"class":164,"line":3077},[162,113023,109516],{"class":179},[162,113025,113026],{"class":164,"line":3100},[162,113027,113028],{"class":179},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[162,113030,113031],{"class":164,"line":3140},[162,113032,109526],{"class":179},[162,113034,113035],{"class":164,"line":4878},[162,113036,104441],{"class":179},[162,113038,113039],{"class":164,"line":4883},[162,113040,98763],{"class":179},[162,113042,113043],{"class":164,"line":4897},[162,113044,301],{"emptyLinePlaceholder":300},[162,113046,113047],{"class":164,"line":4902},[162,113048,301],{"emptyLinePlaceholder":300},[162,113050,113051,113053,113056],{"class":164,"line":5694},[162,113052,35026],{"class":172},[162,113054,113055],{"class":5082}," get_observation",[162,113057,113058],{"class":168},"(data: mujoco.MjData) -> np.ndarray:\n",[162,113060,113061,113063],{"class":164,"line":5708},[162,113062,7203],{"class":172},[162,113064,113065],{"class":168}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[162,113067,113068],{"class":164,"line":5716},[162,113069,301],{"emptyLinePlaceholder":300},[162,113071,113072],{"class":164,"line":5721},[162,113073,301],{"emptyLinePlaceholder":300},[162,113075,113076,113078,113081,113084,113086],{"class":164,"line":5727},[162,113077,35026],{"class":172},[162,113079,113080],{"class":5082}," compute_reward",[162,113082,113083],{"class":168},"(obs: np.ndarray) -> ",[162,113085,3354],{"class":207},[162,113087,2316],{"class":168},[162,113089,113090,113093,113095,113098,113100],{"class":164,"line":5733},[162,113091,113092],{"class":168},"    cart_x ",[162,113094,173],{"class":172},[162,113096,113097],{"class":168}," obs[",[162,113099,312],{"class":207},[162,113101,194],{"class":168},[162,113103,113104,113107,113109,113111,113113],{"class":164,"line":5738},[162,113105,113106],{"class":168},"    pole_angle ",[162,113108,173],{"class":172},[162,113110,113097],{"class":168},[162,113112,208],{"class":207},[162,113114,194],{"class":168},[162,113116,113117,113119,113121,113123,113125,113127,113129,113131,113133,113135,113137,113139,113141,113143],{"class":164,"line":11052},[162,113118,7203],{"class":172},[162,113120,112858],{"class":207},[162,113122,604],{"class":168},[162,113124,105466],{"class":207},[162,113126,55341],{"class":172},[162,113128,112867],{"class":207},[162,113130,9624],{"class":172},[162,113132,112872],{"class":168},[162,113134,3745],{"class":172},[162,113136,112872],{"class":168},[162,113138,353],{"class":172},[162,113140,112881],{"class":168},[162,113142,3745],{"class":172},[162,113144,112886],{"class":168},[162,113146,113147],{"class":164,"line":11076},[162,113148,301],{"emptyLinePlaceholder":300},[162,113150,113151],{"class":164,"line":11081},[162,113152,301],{"emptyLinePlaceholder":300},[162,113154,113155,113157,113159,113161,113163],{"class":164,"line":11087},[162,113156,35026],{"class":172},[162,113158,5092],{"class":5082},[162,113160,104462],{"class":168},[162,113162,98751],{"class":207},[162,113164,2316],{"class":168},[162,113166,113167,113169,113171,113173,113175],{"class":164,"line":11114},[162,113168,104471],{"class":168},[162,113170,173],{"class":172},[162,113172,104476],{"class":168},[162,113174,104378],{"class":207},[162,113176,434],{"class":168},[162,113178,113179,113181,113183],{"class":164,"line":11119},[162,113180,104485],{"class":168},[162,113182,173],{"class":172},[162,113184,104490],{"class":168},[162,113186,113187],{"class":164,"line":11125},[162,113188,301],{"emptyLinePlaceholder":300},[162,113190,113191,113193,113195,113197,113199],{"class":164,"line":11137},[162,113192,108130],{"class":168},[162,113194,208],{"class":207},[162,113196,1204],{"class":168},[162,113198,173],{"class":172},[162,113200,113201],{"class":207}," 0.1\n",[162,113203,113204],{"class":164,"line":11149},[162,113205,108143],{"class":168},[162,113207,113208],{"class":164,"line":11161},[162,113209,301],{"emptyLinePlaceholder":300},[162,113211,113212,113215,113217],{"class":164,"line":12816},[162,113213,113214],{"class":168},"    total_reward ",[162,113216,173],{"class":172},[162,113218,107822],{"class":207},[162,113220,113221],{"class":164,"line":12841},[162,113222,301],{"emptyLinePlaceholder":300},[162,113224,113225,113227,113229,113231,113233,113235,113237],{"class":164,"line":12864},[162,113226,6315],{"class":172},[162,113228,34696],{"class":168},[162,113230,814],{"class":172},[162,113232,2647],{"class":207},[162,113234,604],{"class":168},[162,113236,9516],{"class":207},[162,113238,33870],{"class":168},[162,113240,113241,113244,113246],{"class":164,"line":12888},[162,113242,113243],{"class":168},"        obs ",[162,113245,173],{"class":172},[162,113247,113248],{"class":168}," get_observation(data)\n",[162,113250,113251,113254,113256,113258,113260],{"class":164,"line":12893},[162,113252,113253],{"class":168},"        pole_angle ",[162,113255,173],{"class":172},[162,113257,113097],{"class":168},[162,113259,208],{"class":207},[162,113261,194],{"class":168},[162,113263,113264,113267,113269,113271,113273],{"class":164,"line":12898},[162,113265,113266],{"class":168},"        pole_angular_velocity ",[162,113268,173],{"class":172},[162,113270,113097],{"class":168},[162,113272,218],{"class":207},[162,113274,194],{"class":168},[162,113276,113277],{"class":164,"line":12903},[162,113278,301],{"emptyLinePlaceholder":300},[162,113280,113281,113284,113286,113289,113291,113293,113295,113297,113299],{"class":164,"line":12912},[162,113282,113283],{"class":168},"        action ",[162,113285,173],{"class":172},[162,113287,113288],{"class":207}," 2.0",[162,113290,9624],{"class":172},[162,113292,112881],{"class":168},[162,113294,3771],{"class":172},[162,113296,64935],{"class":207},[162,113298,9624],{"class":172},[162,113300,113301],{"class":168}," pole_angular_velocity\n",[162,113303,113304,113306,113308,113310,113312,113314,113316,113318],{"class":164,"line":12917},[162,113305,113283],{"class":168},[162,113307,173],{"class":172},[162,113309,110508],{"class":168},[162,113311,353],{"class":172},[162,113313,105466],{"class":207},[162,113315,183],{"class":168},[162,113317,105466],{"class":207},[162,113319,434],{"class":168},[162,113321,113322],{"class":164,"line":12923},[162,113323,301],{"emptyLinePlaceholder":300},[162,113325,113326,113328,113330,113332,113334],{"class":164,"line":12944},[162,113327,109678],{"class":168},[162,113329,312],{"class":207},[162,113331,1204],{"class":168},[162,113333,173],{"class":172},[162,113335,110531],{"class":168},[162,113337,113338],{"class":164,"line":12950},[162,113339,104580],{"class":168},[162,113341,113342],{"class":164,"line":12964},[162,113343,301],{"emptyLinePlaceholder":300},[162,113345,113346,113349,113351],{"class":164,"line":12970},[162,113347,113348],{"class":168},"        reward ",[162,113350,173],{"class":172},[162,113352,113353],{"class":168}," compute_reward(get_observation(data))\n",[162,113355,113356,113359,113361],{"class":164,"line":12997},[162,113357,113358],{"class":168},"        total_reward ",[162,113360,926],{"class":172},[162,113362,113363],{"class":168}," reward\n",[162,113365,113366],{"class":164,"line":13006},[162,113367,301],{"emptyLinePlaceholder":300},[162,113369,113370,113372,113374,113376,113378,113380,113382],{"class":164,"line":13012},[162,113371,5614],{"class":172},[162,113373,34696],{"class":168},[162,113375,2708],{"class":172},[162,113377,8861],{"class":207},[162,113379,2714],{"class":172},[162,113381,2717],{"class":207},[162,113383,2316],{"class":168},[162,113385,113386,113388,113390,113393,113396,113399,113402,113404,113407,113410,113412,113414,113416,113418,113421,113423],{"class":164,"line":13020},[162,113387,37725],{"class":207},[162,113389,604],{"class":168},[162,113391,113392],{"class":179},"\"step:\"",[162,113394,113395],{"class":168},", step, ",[162,113397,113398],{"class":179},"\"obs:\"",[162,113400,113401],{"class":168},", np.round(obs, ",[162,113403,218],{"class":207},[162,113405,113406],{"class":168},"), ",[162,113408,113409],{"class":179},"\"action:\"",[162,113411,183],{"class":168},[162,113413,35097],{"class":207},[162,113415,604],{"class":168},[162,113417,3354],{"class":207},[162,113419,113420],{"class":168},"(action), ",[162,113422,218],{"class":207},[162,113424,586],{"class":168},[162,113426,113427],{"class":164,"line":13025},[162,113428,301],{"emptyLinePlaceholder":300},[162,113430,113431,113433,113435,113438,113440,113442,113445,113447],{"class":164,"line":19695},[162,113432,822],{"class":207},[162,113434,604],{"class":168},[162,113436,113437],{"class":179},"\"total_reward:\"",[162,113439,183],{"class":168},[162,113441,35097],{"class":207},[162,113443,113444],{"class":168},"(total_reward, ",[162,113446,218],{"class":207},[162,113448,586],{"class":168},[162,113450,113451,113453,113455,113458,113461,113463],{"class":164,"line":19701},[162,113452,822],{"class":207},[162,113454,604],{"class":168},[162,113456,113457],{"class":179},"\"final obs:\"",[162,113459,113460],{"class":168},", np.round(get_observation(data), ",[162,113462,218],{"class":207},[162,113464,586],{"class":168},[162,113466,113467],{"class":164,"line":19724},[162,113468,301],{"emptyLinePlaceholder":300},[162,113470,113471],{"class":164,"line":19730},[162,113472,301],{"emptyLinePlaceholder":300},[162,113474,113475,113477,113479,113481,113483],{"class":164,"line":19753},[162,113476,2703],{"class":172},[162,113478,34304],{"class":207},[162,113480,2714],{"class":172},[162,113482,104625],{"class":179},[162,113484,2316],{"class":168},[162,113486,113487],{"class":164,"line":19767},[162,113488,104632],{"class":168},[19,113490,106632],{},[153,113492,113494],{"className":26913,"code":113493,"language":26915,"meta":158,"style":158},"touch ch6_cartpole.py\n",[71,113495,113496],{"__ignoreMap":158},[162,113497,113498,113500],{"class":164,"line":165},[162,113499,104347],{"class":5082},[162,113501,113502],{"class":179}," ch6_cartpole.py\n",[19,113504,113505],{},"运行：",[153,113507,113509],{"className":26913,"code":113508,"language":26915,"meta":158,"style":158},"python ch6_cartpole.py\n",[71,113510,113511],{"__ignoreMap":158},[162,113512,113513,113515],{"class":164,"line":165},[162,113514,157],{"class":5082},[162,113516,113502],{"class":179},[3284,113518,104635],{"id":104635},[19,113520,113521],{},"构造观测：",[153,113523,113525],{"className":155,"code":113524,"language":157,"meta":158,"style":158},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[71,113526,113527,113535],{"__ignoreMap":158},[162,113528,113529,113531,113533],{"class":164,"line":165},[162,113530,35026],{"class":172},[162,113532,113055],{"class":5082},[162,113534,113058],{"class":168},[162,113536,113537,113539],{"class":164,"line":197},[162,113538,7203],{"class":172},[162,113540,113065],{"class":168},[19,113542,113543,113546,113547,113549,113550,113552],{},[71,113544,113545],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[71,113548,107092],{}," 2 维，",[71,113551,107422],{}," 2 维，所以 obs 是 4 维。",[19,113554,113555],{},"设置初始角度：",[153,113557,113559],{"className":155,"code":113558,"language":157,"meta":158,"style":158},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[71,113560,113561,113573],{"__ignoreMap":158},[162,113562,113563,113565,113567,113569,113571],{"class":164,"line":165},[162,113564,107760],{"class":168},[162,113566,208],{"class":207},[162,113568,1204],{"class":168},[162,113570,173],{"class":172},[162,113572,113201],{"class":207},[162,113574,113575],{"class":164,"line":197},[162,113576,107604],{"class":168},[19,113578,113579],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,113581,113582],{},"简单反馈控制：",[153,113584,113586],{"className":155,"code":113585,"language":157,"meta":158,"style":158},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[71,113587,113588,113608],{"__ignoreMap":158},[162,113589,113590,113592,113594,113596,113598,113600,113602,113604,113606],{"class":164,"line":165},[162,113591,110503],{"class":168},[162,113593,173],{"class":172},[162,113595,113288],{"class":207},[162,113597,9624],{"class":172},[162,113599,112881],{"class":168},[162,113601,3771],{"class":172},[162,113603,64935],{"class":207},[162,113605,9624],{"class":172},[162,113607,113301],{"class":168},[162,113609,113610,113612,113614,113616,113618,113620,113622,113624],{"class":164,"line":197},[162,113611,110503],{"class":168},[162,113613,173],{"class":172},[162,113615,110508],{"class":168},[162,113617,353],{"class":172},[162,113619,105466],{"class":207},[162,113621,183],{"class":168},[162,113623,105466],{"class":207},[162,113625,434],{"class":168},[19,113627,113628],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,113630,113631],{},"限制动作：",[153,113633,113635],{"className":155,"code":113634,"language":157,"meta":158,"style":158},"np.clip(action, -1.0, 1.0)\n",[71,113636,113637],{"__ignoreMap":158},[162,113638,113639,113642,113644,113646,113648,113650],{"class":164,"line":165},[162,113640,113641],{"class":168},"np.clip(action, ",[162,113643,353],{"class":172},[162,113645,105466],{"class":207},[162,113647,183],{"class":168},[162,113649,105466],{"class":207},[162,113651,434],{"class":168},[19,113653,113654,113655,113658],{},"因为 XML 里 ",[71,113656,113657],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[3284,113660,104771],{"id":104771},[153,113662,113663],{"className":155,"code":113524,"language":157,"meta":158,"style":158},[71,113664,113665,113673],{"__ignoreMap":158},[162,113666,113667,113669,113671],{"class":164,"line":165},[162,113668,35026],{"class":172},[162,113670,113055],{"class":5082},[162,113672,113058],{"class":168},[162,113674,113675,113677],{"class":164,"line":197},[162,113676,7203],{"class":172},[162,113678,113065],{"class":168},[19,113680,113681,113682,113685,113686,113689,113690,113693],{},"这段定义了一个函数，用来获取当前观测。",[71,113683,113684],{},"data.qpos.copy()"," 是位置数组副本，",[71,113687,113688],{},"data.qvel.copy()"," 是速度数组副本。",[71,113691,113692],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,113695,113696],{},"在本章模型里：",[153,113698,113701],{"className":113699,"code":113700,"language":8295,"meta":158},[8293],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[71,113702,113700],{"__ignoreMap":158},[19,113704,113705],{},"所以返回的 obs 是：",[153,113707,113710],{"className":113708,"code":113709,"language":8295,"meta":158},[8293],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[71,113711,113709],{"__ignoreMap":158},[153,113713,113715],{"className":155,"code":113714,"language":157,"meta":158,"style":158},"def compute_reward(obs: np.ndarray) -> float:\n",[71,113716,113717],{"__ignoreMap":158},[162,113718,113719,113721,113723,113725,113727],{"class":164,"line":165},[162,113720,35026],{"class":172},[162,113722,113080],{"class":5082},[162,113724,113083],{"class":168},[162,113726,3354],{"class":207},[162,113728,2316],{"class":168},[19,113730,113731,113732,113735],{},"这行定义奖励函数。输入是观测 ",[71,113733,113734],{},"obs","，输出是一个浮点数奖励。",[153,113737,113739],{"className":155,"code":113738,"language":157,"meta":158,"style":158},"cart_x = obs[0]\npole_angle = obs[1]\n",[71,113740,113741,113754],{"__ignoreMap":158},[162,113742,113743,113746,113748,113750,113752],{"class":164,"line":165},[162,113744,113745],{"class":168},"cart_x ",[162,113747,173],{"class":172},[162,113749,113097],{"class":168},[162,113751,312],{"class":207},[162,113753,194],{"class":168},[162,113755,113756,113759,113761,113763,113765],{"class":164,"line":197},[162,113757,113758],{"class":168},"pole_angle ",[162,113760,173],{"class":172},[162,113762,113097],{"class":168},[162,113764,208],{"class":207},[162,113766,194],{"class":168},[19,113768,113769,113770,113773,113774,113777],{},"数组索引从 0 开始。",[71,113771,113772],{},"obs[0]"," 是第一个元素，也就是小车位置。",[71,113775,113776],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[153,113779,113780],{"className":155,"code":112849,"language":157,"meta":158,"style":158},[71,113781,113782],{"__ignoreMap":158},[162,113783,113784,113786,113788,113790,113792,113794,113796,113798,113800,113802,113804,113806,113808,113810],{"class":164,"line":165},[162,113785,20137],{"class":172},[162,113787,112858],{"class":207},[162,113789,604],{"class":168},[162,113791,105466],{"class":207},[162,113793,55341],{"class":172},[162,113795,112867],{"class":207},[162,113797,9624],{"class":172},[162,113799,112872],{"class":168},[162,113801,3745],{"class":172},[162,113803,112872],{"class":168},[162,113805,353],{"class":172},[162,113807,112881],{"class":168},[162,113809,3745],{"class":172},[162,113811,112886],{"class":168},[19,113813,113814,113815,113818,113819,113822],{},"这行计算奖励。",[71,113816,113817],{},"cart_x * cart_x"," 是小车位置的平方，",[71,113820,113821],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[153,113824,113826],{"className":155,"code":113825,"language":157,"meta":158,"style":158},"data.qpos[1] = 0.1\n",[71,113827,113828],{"__ignoreMap":158},[162,113829,113830,113832,113834,113836,113838],{"class":164,"line":165},[162,113831,107760],{"class":168},[162,113833,208],{"class":207},[162,113835,1204],{"class":168},[162,113837,173],{"class":172},[162,113839,113201],{"class":207},[19,113841,113842,113843,113845,113846,113848],{},"手动设置杆子的初始角度。因为 ",[71,113844,108517],{}," 是小车位置，",[71,113847,108520],{}," 是杆子角度，所以这里改的是杆子。",[153,113850,113851],{"className":155,"code":107604,"language":157,"meta":158,"style":158},[71,113852,113853],{"__ignoreMap":158},[162,113854,113855],{"class":164,"line":165},[162,113856,107604],{"class":168},[19,113858,108563,113859,113861],{},[71,113860,107092],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[153,113863,113865],{"className":155,"code":113864,"language":157,"meta":158,"style":158},"total_reward = 0.0\n",[71,113866,113867],{"__ignoreMap":158},[162,113868,113869,113872,113874],{"class":164,"line":165},[162,113870,113871],{"class":168},"total_reward ",[162,113873,173],{"class":172},[162,113875,107822],{"class":207},[19,113877,113878],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[153,113880,113882],{"className":155,"code":113881,"language":157,"meta":158,"style":158},"for step in range(1000):\n",[71,113883,113884],{"__ignoreMap":158},[162,113885,113886,113888,113890,113892,113894,113896,113898],{"class":164,"line":165},[162,113887,808],{"class":172},[162,113889,34696],{"class":168},[162,113891,814],{"class":172},[162,113893,2647],{"class":207},[162,113895,604],{"class":168},[162,113897,9516],{"class":207},[162,113899,33870],{"class":168},[19,113901,113902,113903,113905],{},"循环 1000 步。",[71,113904,110195],{}," 是当前步数，从 0 到 999。",[153,113907,113909],{"className":155,"code":113908,"language":157,"meta":158,"style":158},"obs = get_observation(data)\n",[71,113910,113911],{"__ignoreMap":158},[162,113912,113913,113916,113918],{"class":164,"line":165},[162,113914,113915],{"class":168},"obs ",[162,113917,173],{"class":172},[162,113919,113248],{"class":168},[19,113921,113922,113923,3183],{},"读取当前状态，保存到 ",[71,113924,113734],{},[153,113926,113928],{"className":155,"code":113927,"language":157,"meta":158,"style":158},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[71,113929,113930,113942],{"__ignoreMap":158},[162,113931,113932,113934,113936,113938,113940],{"class":164,"line":165},[162,113933,113758],{"class":168},[162,113935,173],{"class":172},[162,113937,113097],{"class":168},[162,113939,208],{"class":207},[162,113941,194],{"class":168},[162,113943,113944,113947,113949,113951,113953],{"class":164,"line":197},[162,113945,113946],{"class":168},"pole_angular_velocity ",[162,113948,173],{"class":172},[162,113950,113097],{"class":168},[162,113952,218],{"class":207},[162,113954,194],{"class":168},[19,113956,113957,113958,113961,113962,3183],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[71,113959,113960],{},"obs[3]","？因为 obs 的顺序是 ",[71,113963,113964],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[153,113966,113968],{"className":155,"code":113967,"language":157,"meta":158,"style":158},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[71,113969,113970],{"__ignoreMap":158},[162,113971,113972,113974,113976,113978,113980,113982,113984,113986,113988],{"class":164,"line":165},[162,113973,110503],{"class":168},[162,113975,173],{"class":172},[162,113977,113288],{"class":207},[162,113979,9624],{"class":172},[162,113981,112881],{"class":168},[162,113983,3771],{"class":172},[162,113985,64935],{"class":207},[162,113987,9624],{"class":172},[162,113989,113301],{"class":168},[19,113991,113992,113993,104082,113995,113997],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[71,113994,108321],{},[71,113996,38404],{}," 是人为设置的系数，不是固定公式。",[153,113999,114001],{"className":155,"code":114000,"language":157,"meta":158,"style":158},"action = np.clip(action, -1.0, 1.0)\n",[71,114002,114003],{"__ignoreMap":158},[162,114004,114005,114007,114009,114011,114013,114015,114017,114019],{"class":164,"line":165},[162,114006,110503],{"class":168},[162,114008,173],{"class":172},[162,114010,110508],{"class":168},[162,114012,353],{"class":172},[162,114014,105466],{"class":207},[162,114016,183],{"class":168},[162,114018,105466],{"class":207},[162,114020,434],{"class":168},[19,114022,114023],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[153,114025,114026],{"className":155,"code":112834,"language":157,"meta":158,"style":158},[71,114027,114028],{"__ignoreMap":158},[162,114029,114030,114032,114034,114036,114038],{"class":164,"line":165},[162,114031,108932],{"class":168},[162,114033,312],{"class":207},[162,114035,1204],{"class":168},[162,114037,173],{"class":172},[162,114039,110531],{"class":168},[19,114041,114042],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[153,114044,114045],{"className":155,"code":107566,"language":157,"meta":158,"style":158},[71,114046,114047],{"__ignoreMap":158},[162,114048,114049],{"class":164,"line":165},[162,114050,107566],{"class":168},[19,114052,114053,114054,114056],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[71,114055,109187],{}," 计算小车和杆子的下一刻状态。",[153,114058,114060],{"className":155,"code":114059,"language":157,"meta":158,"style":158},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[71,114061,114062,114071],{"__ignoreMap":158},[162,114063,114064,114067,114069],{"class":164,"line":165},[162,114065,114066],{"class":168},"reward ",[162,114068,173],{"class":172},[162,114070,113353],{"class":168},[162,114072,114073,114075,114077],{"class":164,"line":197},[162,114074,113871],{"class":168},[162,114076,926],{"class":172},[162,114078,113363],{"class":168},[19,114080,114081,114082,114084,114085,114088,114089,3183],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[71,114083,926],{}," 是简写，",[71,114086,114087],{},"total_reward += reward"," 等价于 ",[71,114090,114091],{},"total_reward = total_reward + reward",[153,114093,114095],{"className":155,"code":114094,"language":157,"meta":158,"style":158},"if step % 100 == 0:\n",[71,114096,114097],{"__ignoreMap":158},[162,114098,114099,114101,114103,114105,114107,114109,114111],{"class":164,"line":165},[162,114100,2703],{"class":172},[162,114102,34696],{"class":168},[162,114104,2708],{"class":172},[162,114106,8861],{"class":207},[162,114108,2714],{"class":172},[162,114110,2717],{"class":207},[162,114112,2316],{"class":168},[19,114114,114115,114117,114118,114121],{},[71,114116,2708],{}," 是取余数。",[71,114119,114120],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[153,114123,114125],{"className":155,"code":114124,"language":157,"meta":158,"style":158},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[71,114126,114127],{"__ignoreMap":158},[162,114128,114129,114131,114133,114135,114137,114139,114141,114143,114145,114147,114149,114151,114153,114155,114157,114159],{"class":164,"line":165},[162,114130,306],{"class":207},[162,114132,604],{"class":168},[162,114134,113392],{"class":179},[162,114136,113395],{"class":168},[162,114138,113398],{"class":179},[162,114140,113401],{"class":168},[162,114142,218],{"class":207},[162,114144,113406],{"class":168},[162,114146,113409],{"class":179},[162,114148,183],{"class":168},[162,114150,35097],{"class":207},[162,114152,604],{"class":168},[162,114154,3354],{"class":207},[162,114156,113420],{"class":168},[162,114158,218],{"class":207},[162,114160,586],{"class":168},[19,114162,114163,114164,114167,114168,114171],{},"打印当前步数、观测和动作。",[71,114165,114166],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[71,114169,114170],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,114173,105379],{"id":105378},[19,114175,114176],{},"观测向量:",[153,114178,114181],{"className":114179,"code":114180,"language":8295,"meta":158},[8293],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[71,114182,114180],{"__ignoreMap":158},[19,114184,114185],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,114187,114188],{},"每隔 100 步会打印一次：",[153,114190,114193],{"className":114191,"code":114192,"language":8295,"meta":158},[8293],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[71,114194,114192],{"__ignoreMap":158},[19,114196,114197],{},"重点观察：",[1452,114199,114200,114206,114211],{},[1455,114201,114202,114205],{},[71,114203,114204],{},"pole_angle"," 是否越来越大。",[1455,114207,114208,114210],{},[71,114209,112787],{}," 是否跑得太远。",[1455,114212,114213,114214,85604,114216,3183],{},"action 是否经常被 clip 到 ",[71,114215,106977],{},[71,114217,208],{},[19,114219,114220],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,114222,105411],{"id":105410},[1452,114224,114225,114231,114234,114240,114250,114256,114259],{},[1455,114226,114227,114228,3183],{},"把初始角度改为 ",[71,114229,114230],{},"data.qpos[1] = 0.3",[1455,114232,114233],{},"重新运行，观察控制是否变差。",[1455,114235,114236,114237,114239],{},"把 actuator ",[71,114238,110128],{}," 改小。",[1455,114241,114242,114243,114246,114247,3183],{},"打印 ",[71,114244,114245],{},"model.nq, model.nv, model.nu","，应为 ",[71,114248,114249],{},"2 2 1",[1455,114251,114252,114253,114255],{},"把 reward 里的 ",[71,114254,113821],{}," 系数改大，观察总奖励变化。",[1455,114257,114258],{},"把控制器改成反号，观察杆子是否更容易倒。",[1455,114260,114261],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,114263,105516],{"id":105515},[3284,114265,114266],{"id":114266},"杆子方向和预期不一致",[19,114268,105459,114269,114271,114272,114274],{},[71,114270,109300],{}," 和 capsule 的 ",[71,114273,106238],{},"，必要时用 viewer 可视化确认。",[3284,114276,114277],{"id":114277},"控制器越控越倒",[19,114279,114280],{},"说明反馈符号可能反了，尝试:",[153,114282,114284],{"className":155,"code":114283,"language":157,"meta":158,"style":158},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[71,114285,114286],{"__ignoreMap":158},[162,114287,114288,114290,114292,114294,114296,114298,114300,114302,114304,114306],{"class":164,"line":165},[162,114289,110503],{"class":168},[162,114291,173],{"class":172},[162,114293,55341],{"class":172},[162,114295,108321],{"class":207},[162,114297,9624],{"class":172},[162,114299,112881],{"class":168},[162,114301,353],{"class":172},[162,114303,64935],{"class":207},[162,114305,9624],{"class":172},[162,114307,113301],{"class":168},[3284,114309,114310],{"id":114310},"小车飞走",[19,114312,114313,114314,114316,114317,114320],{},"降低 ",[71,114315,110128],{}," 或缩小 ",[71,114318,114319],{},"action"," 的 clip 范围。",[3284,114322,114324,114326],{"id":114323},"obs3-为什么是杆子角速度",[71,114325,113960],{}," 为什么是杆子角速度",[19,114328,114329],{},"因为这个模型里：",[153,114331,114334],{"className":114332,"code":114333,"language":8295,"meta":158},[8293],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[71,114335,114333],{"__ignoreMap":158},[19,114337,112808],{},[153,114339,114342],{"className":114340,"code":114341,"language":8295,"meta":158},[8293],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[71,114343,114341],{"__ignoreMap":158},[3284,114345,114347],{"id":114346},"reward-变成负数是否错误","reward 变成负数是否错误",[19,114349,114350],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,114352,105670],{"id":105669},[19,114354,114355],{},"一个控制任务通常包含：",[1452,114357,114358,114361,114369,114374,114377],{},[1455,114359,114360],{},"模型：Cartpole 的 body、joint、actuator。",[1455,114362,114363,114364,3513,114366,114368],{},"观测：从 ",[71,114365,107092],{},[71,114367,107422],{}," 里取状态。",[1455,114370,114371,114372,3183],{},"动作：写入 ",[71,114373,104140],{},[1455,114375,114376],{},"奖励：根据任务目标打分。",[1455,114378,114379],{},"循环：obs -> action -> step -> reward。",[19,114381,114382],{},"这就是后面 Gymnasium 环境的基本骨架。",[3219,114384,107348],{},{"title":158,"searchDepth":197,"depth":197,"links":114386},[114387,114388,114389,114394,114398,114399,114400,114408],{"id":103710,"depth":197,"text":103711},{"id":103833,"depth":197,"text":103834},{"id":104108,"depth":197,"text":104109,"children":114390},[114391,114392,114393],{"id":112761,"depth":228,"text":112762},{"id":112826,"depth":228,"text":112827},{"id":112842,"depth":228,"text":112843},{"id":104316,"depth":197,"text":104317,"children":114395},[114396,114397],{"id":104635,"depth":228,"text":104635},{"id":104771,"depth":228,"text":104771},{"id":105378,"depth":197,"text":105379},{"id":105410,"depth":197,"text":105411},{"id":105515,"depth":197,"text":105516,"children":114401},[114402,114403,114404,114405,114407],{"id":114266,"depth":228,"text":114266},{"id":114277,"depth":228,"text":114277},{"id":114310,"depth":228,"text":114310},{"id":114323,"depth":228,"text":114406},"obs[3] 为什么是杆子角速度",{"id":114346,"depth":228,"text":114347},{"id":105669,"depth":197,"text":105670},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":112497,"description":158},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":114415,"title":114416,"body":114417,"description":158,"extension":3242,"meta":116430,"navigation":300,"path":116431,"seo":116432,"stem":116433,"__hash__":116434},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":114418,"toc":116406},[114419,114422,114424,114427,114429,114446,114449,114452,114458,114461,114463,114465,114489,114491,114505,114507,114548,114550,114568,114570,114573,114579,114582,114610,114614,114620,114644,114647,114678,114685,114688,114691,114697,114700,114706,114709,114715,114719,114722,114747,114750,114752,115512,115514,115526,115528,115539,115541,115544,115561,115564,115566,115577,115580,115582,115628,115631,115644,115647,115729,115732,115734,115750,115760,115773,115776,115815,115825,115836,115846,115859,115862,115891,115894,115904,115907,115913,115930,115941,115943,115949,115966,115977,115998,116001,116013,116016,116037,116040,116048,116056,116073,116076,116145,116152,116160,116163,116176,116183,116185,116188,116194,116197,116200,116206,116212,116214,116254,116256,116262,116271,116274,116276,116296,116299,116302,116308,116312,116314,116341,116344,116347,116374,116380,116383,116386,116388,116391,116394,116400,116403],[10,114420,114416],{"id":114421},"_7控制任务reacher-机械臂到达目标",[14,114423,103711],{"id":103710},[19,114425,114426],{},"本章搭建一个二维两关节 reacher 任务。",[19,114428,107393],{},[1452,114430,114431,114434,114437,114440,114443],{},[1455,114432,114433],{},"两个 hinge joint",[1455,114435,114436],{},"两个 motor actuator",[1455,114438,114439],{},"site 作为末端点和目标点",[1455,114441,114442],{},"根据末端和目标距离设计 reward",[1455,114444,114445],{},"构造机械臂任务的基本形式",[19,114447,114448],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,114450,114451],{},"Reacher 任务可以理解为：",[153,114453,114456],{"className":114454,"code":114455,"language":8295,"meta":158},[8293],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[71,114457,114455],{"__ignoreMap":158},[19,114459,114460],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,114462,103834],{"id":103833},[19,114464,103837],{},[153,114466,114467],{"className":26913,"code":107449,"language":26915,"meta":158,"style":158},[71,114468,114469],{"__ignoreMap":158},[162,114470,114471,114473,114475,114477,114479,114481,114483,114485,114487],{"class":164,"line":165},[162,114472,27668],{"class":5082},[162,114474,29405],{"class":179},[162,114476,26925],{"class":179},[162,114478,29490],{"class":207},[162,114480,107464],{"class":179},[162,114482,103862],{"class":179},[162,114484,105564],{"class":179},[162,114486,103878],{"class":179},[162,114488,107473],{"class":179},[19,114490,105882],{},[153,114492,114493],{"className":26913,"code":103983,"language":26915,"meta":158,"style":158},[71,114494,114495],{"__ignoreMap":158},[162,114496,114497,114499,114501,114503],{"class":164,"line":165},[162,114498,26922],{"class":5082},[162,114500,26925],{"class":179},[162,114502,103994],{"class":179},[162,114504,103997],{"class":179},[19,114506,105899],{},[153,114508,114510],{"className":26913,"code":114509,"language":26915,"meta":158,"style":158},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[71,114511,114512,114529,114538],{"__ignoreMap":158},[162,114513,114514,114516,114518,114520,114523,114525,114527],{"class":164,"line":165},[162,114515,33418],{"class":5082},[162,114517,32264],{"class":179},[162,114519,28207],{"class":207},[162,114521,114522],{"class":179}," mujoco-reacher",[162,114524,104039],{"class":179},[162,114526,104042],{"class":207},[162,114528,104045],{"class":207},[162,114530,114531,114533,114535],{"class":164,"line":197},[162,114532,33418],{"class":5082},[162,114534,104052],{"class":179},[162,114536,114537],{"class":179}," mujoco-reacher\n",[162,114539,114540,114542,114544,114546],{"class":164,"line":228},[162,114541,26922],{"class":5082},[162,114543,26925],{"class":179},[162,114545,103994],{"class":179},[162,114547,103997],{"class":179},[19,114549,104068],{},[1452,114551,114552,114555,114558],{},[1455,114553,114554],{},"本章使用低维状态，不使用图像输入。",[1455,114556,114557],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[1455,114559,114560,114561,3513,114563,3513,114565,114567],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[71,114562,107092],{},[71,114564,107422],{},[71,114566,106742],{}," 的方法一致。",[14,114569,104109],{"id":104108},[19,114571,114572],{},"Reacher 任务核心:",[153,114574,114577],{"className":114575,"code":114576,"language":8295,"meta":158},[8293],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[71,114578,114576],{"__ignoreMap":158},[19,114580,114581],{},"读取 site 世界坐标:",[153,114583,114585],{"className":155,"code":114584,"language":157,"meta":158,"style":158},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[71,114586,114587,114600],{"__ignoreMap":158},[162,114588,114589,114591,114593,114595,114598],{"class":164,"line":165},[162,114590,106696],{"class":168},[162,114592,173],{"class":172},[162,114594,106467],{"class":168},[162,114596,114597],{"class":179},"\"tip\"",[162,114599,434],{"class":168},[162,114601,114602,114605,114607],{"class":164,"line":197},[162,114603,114604],{"class":168},"tip_pos ",[162,114606,173],{"class":172},[162,114608,114609],{"class":168}," data.site_xpos[site_id]\n",[3284,114611,114613],{"id":114612},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,114615,114616,114617,114619],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[71,114618,107092],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[153,114621,114623],{"className":155,"code":114622,"language":157,"meta":158,"style":158},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[71,114624,114625,114635],{"__ignoreMap":158},[162,114626,114627,114630,114632],{"class":164,"line":165},[162,114628,114629],{"class":168},"tip ",[162,114631,173],{"class":172},[162,114633,114634],{"class":168}," data.site_xpos[tip_site_id]\n",[162,114636,114637,114639,114641],{"class":164,"line":197},[162,114638,2252],{"class":168},[162,114640,173],{"class":172},[162,114642,114643],{"class":168}," data.site_xpos[target_site_id]\n",[19,114645,114646],{},"这样 reward 就很容易写：",[153,114648,114650],{"className":155,"code":114649,"language":157,"meta":158,"style":158},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[71,114651,114652,114667],{"__ignoreMap":158},[162,114653,114654,114657,114659,114662,114664],{"class":164,"line":165},[162,114655,114656],{"class":168},"dist ",[162,114658,173],{"class":172},[162,114660,114661],{"class":168}," np.linalg.norm(tip ",[162,114663,353],{"class":172},[162,114665,114666],{"class":168}," target)\n",[162,114668,114669,114671,114673,114675],{"class":164,"line":197},[162,114670,114066],{"class":168},[162,114672,173],{"class":172},[162,114674,55341],{"class":172},[162,114676,114677],{"class":168},"dist\n",[19,114679,114680,114681,114684],{},"距离越小，",[71,114682,114683],{},"-dist"," 越接近 0，奖励越高。",[3284,114686,114687],{"id":114687},"两关节机械臂的状态",[19,114689,114690],{},"这个模型有两个 hinge joint：",[153,114692,114695],{"className":114693,"code":114694,"language":8295,"meta":158},[8293],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[71,114696,114694],{"__ignoreMap":158},[19,114698,114699],{},"再加上末端和目标位置：",[153,114701,114704],{"className":114702,"code":114703,"language":8295,"meta":158},[8293],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[71,114705,114703],{"__ignoreMap":158},[19,114707,114708],{},"总维度：",[153,114710,114713],{"className":114711,"code":114712,"language":8295,"meta":158},[8293],"2 + 2 + 3 + 3 = 10\n",[71,114714,114712],{"__ignoreMap":158},[3284,114716,114718],{"id":114717},"为什么-gravity-是-0","为什么 gravity 是 0",[19,114720,114721],{},"本章把重力设为：",[153,114723,114725],{"className":56137,"code":114724,"language":56139,"meta":158,"style":158},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[71,114726,114727],{"__ignoreMap":158},[162,114728,114729,114731,114733,114735,114737,114739,114741,114743,114745],{"class":164,"line":165},[162,114730,4187],{"class":168},[162,114732,72232],{"class":54373},[162,114734,104258],{"class":5082},[162,114736,173],{"class":168},[162,114738,104263],{"class":179},[162,114740,104266],{"class":5082},[162,114742,173],{"class":168},[162,114744,106833],{"class":179},[162,114746,104208],{"class":168},[19,114748,114749],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,114751,104317],{"id":104316},[153,114753,114755],{"className":155,"code":114754,"language":157,"meta":158,"style":158},"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",[71,114756,114757,114763,114773,114777,114781,114789,114794,114799,114803,114807,114812,114817,114821,114826,114831,114836,114840,114845,114850,114855,114860,114864,114868,114872,114876,114880,114885,114890,114894,114898,114902,114906,114910,114925,114934,114946,114969,114976,114980,114984,114994,115008,115022,115029,115033,115037,115051,115063,115075,115088,115103,115120,115124,115128,115140,115152,115160,115168,115172,115188,115193,115206,115219,115234,115238,115273,115305,115309,115313,115322,115326,115342,115352,115363,115379,115395,115411,115427,115431,115449,115469,115488,115492,115496,115508],{"__ignoreMap":158},[162,114758,114759,114761],{"class":164,"line":165},[162,114760,33478],{"class":172},[162,114762,104365],{"class":168},[162,114764,114765,114767,114769,114771],{"class":164,"line":197},[162,114766,33478],{"class":172},[162,114768,34463],{"class":168},[162,114770,34466],{"class":172},[162,114772,34469],{"class":168},[162,114774,114775],{"class":164,"line":228},[162,114776,301],{"emptyLinePlaceholder":300},[162,114778,114779],{"class":164,"line":252},[162,114780,301],{"emptyLinePlaceholder":300},[162,114782,114783,114785,114787],{"class":164,"line":328},[162,114784,104378],{"class":207},[162,114786,16659],{"class":172},[162,114788,104383],{"class":179},[162,114790,114791],{"class":164,"line":466},[162,114792,114793],{"class":179},"\u003Cmujoco model=\"two_link_reacher\">\n",[162,114795,114796],{"class":164,"line":471},[162,114797,114798],{"class":179},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[162,114800,114801],{"class":164,"line":687},[162,114802,301],{"emptyLinePlaceholder":300},[162,114804,114805],{"class":164,"line":692},[162,114806,104402],{"class":179},[162,114808,114809],{"class":164,"line":698},[162,114810,114811],{"class":179},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[162,114813,114814],{"class":164,"line":2955},[162,114815,114816],{"class":179},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[162,114818,114819],{"class":164,"line":2960},[162,114820,301],{"emptyLinePlaceholder":300},[162,114822,114823],{"class":164,"line":2971},[162,114824,114825],{"class":179},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[162,114827,114828],{"class":164,"line":2984},[162,114829,114830],{"class":179},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[162,114832,114833],{"class":164,"line":2989},[162,114834,114835],{"class":179},"      \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",[162,114837,114838],{"class":164,"line":3011},[162,114839,301],{"emptyLinePlaceholder":300},[162,114841,114842],{"class":164,"line":3022},[162,114843,114844],{"class":179},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[162,114846,114847],{"class":164,"line":3027},[162,114848,114849],{"class":179},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[162,114851,114852],{"class":164,"line":3046},[162,114853,114854],{"class":179},"        \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",[162,114856,114857],{"class":164,"line":3052},[162,114858,114859],{"class":179},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[162,114861,114862],{"class":164,"line":3057},[162,114863,109499],{"class":179},[162,114865,114866],{"class":164,"line":3072},[162,114867,104431],{"class":179},[162,114869,114870],{"class":164,"line":3077},[162,114871,104436],{"class":179},[162,114873,114874],{"class":164,"line":3100},[162,114875,301],{"emptyLinePlaceholder":300},[162,114877,114878],{"class":164,"line":3140},[162,114879,109516],{"class":179},[162,114881,114882],{"class":164,"line":4878},[162,114883,114884],{"class":179},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[162,114886,114887],{"class":164,"line":4883},[162,114888,114889],{"class":179},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[162,114891,114892],{"class":164,"line":4897},[162,114893,109526],{"class":179},[162,114895,114896],{"class":164,"line":4902},[162,114897,104441],{"class":179},[162,114899,114900],{"class":164,"line":5694},[162,114901,98763],{"class":179},[162,114903,114904],{"class":164,"line":5708},[162,114905,301],{"emptyLinePlaceholder":300},[162,114907,114908],{"class":164,"line":5716},[162,114909,301],{"emptyLinePlaceholder":300},[162,114911,114912,114914,114917,114920,114922],{"class":164,"line":5721},[162,114913,35026],{"class":172},[162,114915,114916],{"class":5082}," site_position",[162,114918,114919],{"class":168},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[162,114921,4442],{"class":207},[162,114923,114924],{"class":168},") -> np.ndarray:\n",[162,114926,114927,114929,114931],{"class":164,"line":5727},[162,114928,106462],{"class":168},[162,114930,173],{"class":172},[162,114932,114933],{"class":168}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[162,114935,114936,114938,114940,114942,114944],{"class":164,"line":5733},[162,114937,2283],{"class":172},[162,114939,106511],{"class":168},[162,114941,4187],{"class":172},[162,114943,2717],{"class":207},[162,114945,2316],{"class":168},[162,114947,114948,114950,114952,114954,114956,114959,114961,114963,114965,114967],{"class":164,"line":5738},[162,114949,106494],{"class":172},[162,114951,106497],{"class":207},[162,114953,604],{"class":168},[162,114955,961],{"class":172},[162,114957,114958],{"class":179},"\"site not found: ",[162,114960,967],{"class":207},[162,114962,82875],{"class":168},[162,114964,976],{"class":207},[162,114966,979],{"class":179},[162,114968,434],{"class":168},[162,114970,114971,114973],{"class":164,"line":11052},[162,114972,7203],{"class":172},[162,114974,114975],{"class":168}," data.site_xpos[site_id].copy()\n",[162,114977,114978],{"class":164,"line":11076},[162,114979,301],{"emptyLinePlaceholder":300},[162,114981,114982],{"class":164,"line":11081},[162,114983,301],{"emptyLinePlaceholder":300},[162,114985,114986,114988,114991],{"class":164,"line":11087},[162,114987,35026],{"class":172},[162,114989,114990],{"class":5082}," get_obs",[162,114992,114993],{"class":168},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[162,114995,114996,114999,115001,115004,115006],{"class":164,"line":11114},[162,114997,114998],{"class":168},"    tip ",[162,115000,173],{"class":172},[162,115002,115003],{"class":168}," site_position(model, data, ",[162,115005,114597],{"class":179},[162,115007,434],{"class":168},[162,115009,115010,115013,115015,115017,115020],{"class":164,"line":11119},[162,115011,115012],{"class":168},"    target ",[162,115014,173],{"class":172},[162,115016,115003],{"class":168},[162,115018,115019],{"class":179},"\"target\"",[162,115021,434],{"class":168},[162,115023,115024,115026],{"class":164,"line":11125},[162,115025,7203],{"class":172},[162,115027,115028],{"class":168}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[162,115030,115031],{"class":164,"line":11137},[162,115032,301],{"emptyLinePlaceholder":300},[162,115034,115035],{"class":164,"line":11149},[162,115036,301],{"emptyLinePlaceholder":300},[162,115038,115039,115041,115044,115047,115049],{"class":164,"line":11161},[162,115040,35026],{"class":172},[162,115042,115043],{"class":5082}," reward",[162,115045,115046],{"class":168},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[162,115048,3354],{"class":207},[162,115050,2316],{"class":168},[162,115052,115053,115055,115057,115059,115061],{"class":164,"line":12816},[162,115054,114998],{"class":168},[162,115056,173],{"class":172},[162,115058,115003],{"class":168},[162,115060,114597],{"class":179},[162,115062,434],{"class":168},[162,115064,115065,115067,115069,115071,115073],{"class":164,"line":12841},[162,115066,115012],{"class":168},[162,115068,173],{"class":172},[162,115070,115003],{"class":168},[162,115072,115019],{"class":179},[162,115074,434],{"class":168},[162,115076,115077,115080,115082,115084,115086],{"class":164,"line":12864},[162,115078,115079],{"class":168},"    dist ",[162,115081,173],{"class":172},[162,115083,114661],{"class":168},[162,115085,353],{"class":172},[162,115087,114666],{"class":168},[162,115089,115090,115093,115095,115098,115100],{"class":164,"line":12888},[162,115091,115092],{"class":168},"    control_cost ",[162,115094,173],{"class":172},[162,115096,115097],{"class":207}," 0.01",[162,115099,9624],{"class":172},[162,115101,115102],{"class":168}," np.sum(np.square(data.ctrl))\n",[162,115104,115105,115107,115109,115111,115113,115115,115117],{"class":164,"line":12893},[162,115106,7203],{"class":172},[162,115108,112858],{"class":207},[162,115110,604],{"class":168},[162,115112,353],{"class":172},[162,115114,114656],{"class":168},[162,115116,353],{"class":172},[162,115118,115119],{"class":168}," control_cost)\n",[162,115121,115122],{"class":164,"line":12898},[162,115123,301],{"emptyLinePlaceholder":300},[162,115125,115126],{"class":164,"line":12903},[162,115127,301],{"emptyLinePlaceholder":300},[162,115129,115130,115132,115134,115136,115138],{"class":164,"line":12912},[162,115131,35026],{"class":172},[162,115133,5092],{"class":5082},[162,115135,104462],{"class":168},[162,115137,98751],{"class":207},[162,115139,2316],{"class":168},[162,115141,115142,115144,115146,115148,115150],{"class":164,"line":12917},[162,115143,104471],{"class":168},[162,115145,173],{"class":172},[162,115147,104476],{"class":168},[162,115149,104378],{"class":207},[162,115151,434],{"class":168},[162,115153,115154,115156,115158],{"class":164,"line":12923},[162,115155,104485],{"class":168},[162,115157,173],{"class":172},[162,115159,104490],{"class":168},[162,115161,115162,115164,115166],{"class":164,"line":12944},[162,115163,113214],{"class":168},[162,115165,173],{"class":172},[162,115167,107822],{"class":207},[162,115169,115170],{"class":164,"line":12950},[162,115171,301],{"emptyLinePlaceholder":300},[162,115173,115174,115176,115178,115180,115182,115184,115186],{"class":164,"line":12964},[162,115175,6315],{"class":172},[162,115177,34696],{"class":168},[162,115179,814],{"class":172},[162,115181,2647],{"class":207},[162,115183,604],{"class":168},[162,115185,68141],{"class":207},[162,115187,33870],{"class":168},[162,115189,115190],{"class":164,"line":12970},[162,115191,115192],{"class":168},"        mujoco.mj_forward(model, data)\n",[162,115194,115195,115198,115200,115202,115204],{"class":164,"line":12997},[162,115196,115197],{"class":168},"        tip ",[162,115199,173],{"class":172},[162,115201,115003],{"class":168},[162,115203,114597],{"class":179},[162,115205,434],{"class":168},[162,115207,115208,115211,115213,115215,115217],{"class":164,"line":13006},[162,115209,115210],{"class":168},"        target ",[162,115212,173],{"class":172},[162,115214,115003],{"class":168},[162,115216,115019],{"class":179},[162,115218,434],{"class":168},[162,115220,115221,115224,115226,115229,115231],{"class":164,"line":13012},[162,115222,115223],{"class":168},"        error ",[162,115225,173],{"class":172},[162,115227,115228],{"class":168}," target ",[162,115230,353],{"class":172},[162,115232,115233],{"class":168}," tip\n",[162,115235,115236],{"class":164,"line":13020},[162,115237,301],{"emptyLinePlaceholder":300},[162,115239,115240,115242,115244,115246,115248,115251,115253,115255,115258,115260,115263,115265,115267,115269,115271],{"class":164,"line":13025},[162,115241,109678],{"class":168},[162,115243,312],{"class":207},[162,115245,1204],{"class":168},[162,115247,173],{"class":172},[162,115249,115250],{"class":168}," np.clip(",[162,115252,108321],{"class":207},[162,115254,9624],{"class":172},[162,115256,115257],{"class":168}," error[",[162,115259,213],{"class":207},[162,115261,115262],{"class":168},"], ",[162,115264,353],{"class":172},[162,115266,105466],{"class":207},[162,115268,183],{"class":168},[162,115270,105466],{"class":207},[162,115272,434],{"class":168},[162,115274,115275,115277,115279,115281,115283,115285,115287,115289,115291,115293,115295,115297,115299,115301,115303],{"class":164,"line":19695},[162,115276,109678],{"class":168},[162,115278,208],{"class":207},[162,115280,1204],{"class":168},[162,115282,173],{"class":172},[162,115284,115250],{"class":168},[162,115286,108321],{"class":207},[162,115288,9624],{"class":172},[162,115290,115257],{"class":168},[162,115292,312],{"class":207},[162,115294,115262],{"class":168},[162,115296,353],{"class":172},[162,115298,105466],{"class":207},[162,115300,183],{"class":168},[162,115302,105466],{"class":207},[162,115304,434],{"class":168},[162,115306,115307],{"class":164,"line":19701},[162,115308,301],{"emptyLinePlaceholder":300},[162,115310,115311],{"class":164,"line":19724},[162,115312,104580],{"class":168},[162,115314,115315,115317,115319],{"class":164,"line":19730},[162,115316,113358],{"class":168},[162,115318,926],{"class":172},[162,115320,115321],{"class":168}," reward(model, data)\n",[162,115323,115324],{"class":164,"line":19753},[162,115325,301],{"emptyLinePlaceholder":300},[162,115327,115328,115330,115332,115334,115336,115338,115340],{"class":164,"line":19767},[162,115329,5614],{"class":172},[162,115331,34696],{"class":168},[162,115333,2708],{"class":172},[162,115335,8861],{"class":207},[162,115337,2714],{"class":172},[162,115339,2717],{"class":207},[162,115341,2316],{"class":168},[162,115343,115344,115347,115349],{"class":164,"line":19787},[162,115345,115346],{"class":168},"            obs ",[162,115348,173],{"class":172},[162,115350,115351],{"class":168}," get_obs(model, data)\n",[162,115353,115354,115356,115358,115360],{"class":164,"line":19793},[162,115355,37725],{"class":207},[162,115357,604],{"class":168},[162,115359,113392],{"class":179},[162,115361,115362],{"class":168},", step)\n",[162,115364,115365,115367,115369,115372,115375,115377],{"class":164,"line":19804},[162,115366,37725],{"class":207},[162,115368,604],{"class":168},[162,115370,115371],{"class":179},"\"  tip:\"",[162,115373,115374],{"class":168},", np.round(tip, ",[162,115376,218],{"class":207},[162,115378,586],{"class":168},[162,115380,115381,115383,115385,115388,115391,115393],{"class":164,"line":19827},[162,115382,37725],{"class":207},[162,115384,604],{"class":168},[162,115386,115387],{"class":179},"\"  target:\"",[162,115389,115390],{"class":168},", np.round(target, ",[162,115392,218],{"class":207},[162,115394,586],{"class":168},[162,115396,115397,115399,115401,115404,115407,115409],{"class":164,"line":19849},[162,115398,37725],{"class":207},[162,115400,604],{"class":168},[162,115402,115403],{"class":179},"\"  ctrl:\"",[162,115405,115406],{"class":168},", np.round(data.ctrl.copy(), ",[162,115408,218],{"class":207},[162,115410,586],{"class":168},[162,115412,115413,115415,115417,115420,115423,115425],{"class":164,"line":19854},[162,115414,37725],{"class":207},[162,115416,604],{"class":168},[162,115418,115419],{"class":179},"\"  obs_dim:\"",[162,115421,115422],{"class":168},", obs.shape[",[162,115424,312],{"class":207},[162,115426,315],{"class":168},[162,115428,115429],{"class":164,"line":19860},[162,115430,301],{"emptyLinePlaceholder":300},[162,115432,115433,115435,115437,115439,115441,115443,115445,115447],{"class":164,"line":19874},[162,115434,822],{"class":207},[162,115436,604],{"class":168},[162,115438,113437],{"class":179},[162,115440,183],{"class":168},[162,115442,35097],{"class":207},[162,115444,113444],{"class":168},[162,115446,218],{"class":207},[162,115448,586],{"class":168},[162,115450,115451,115453,115455,115458,115461,115463,115465,115467],{"class":164,"line":19887},[162,115452,822],{"class":207},[162,115454,604],{"class":168},[162,115456,115457],{"class":179},"\"final tip:\"",[162,115459,115460],{"class":168},", np.round(site_position(model, data, ",[162,115462,114597],{"class":179},[162,115464,113406],{"class":168},[162,115466,218],{"class":207},[162,115468,586],{"class":168},[162,115470,115471,115473,115475,115478,115480,115482,115484,115486],{"class":164,"line":19892},[162,115472,822],{"class":207},[162,115474,604],{"class":168},[162,115476,115477],{"class":179},"\"target:\"",[162,115479,115460],{"class":168},[162,115481,115019],{"class":179},[162,115483,113406],{"class":168},[162,115485,218],{"class":207},[162,115487,586],{"class":168},[162,115489,115490],{"class":164,"line":19906},[162,115491,301],{"emptyLinePlaceholder":300},[162,115493,115494],{"class":164,"line":19911},[162,115495,301],{"emptyLinePlaceholder":300},[162,115497,115498,115500,115502,115504,115506],{"class":164,"line":19917},[162,115499,2703],{"class":172},[162,115501,34304],{"class":207},[162,115503,2714],{"class":172},[162,115505,104625],{"class":179},[162,115507,2316],{"class":168},[162,115509,115510],{"class":164,"line":19922},[162,115511,104632],{"class":168},[19,115513,106632],{},[153,115515,115517],{"className":26913,"code":115516,"language":26915,"meta":158,"style":158},"touch ch7_reacher.py\n",[71,115518,115519],{"__ignoreMap":158},[162,115520,115521,115523],{"class":164,"line":165},[162,115522,104347],{"class":5082},[162,115524,115525],{"class":179}," ch7_reacher.py\n",[19,115527,113505],{},[153,115529,115531],{"className":26913,"code":115530,"language":26915,"meta":158,"style":158},"python ch7_reacher.py\n",[71,115532,115533],{"__ignoreMap":158},[162,115534,115535,115537],{"class":164,"line":165},[162,115536,157],{"class":5082},[162,115538,115525],{"class":179},[3284,115540,104635],{"id":104635},[19,115542,115543],{},"读取 site 坐标：",[153,115545,115547],{"className":155,"code":115546,"language":157,"meta":158,"style":158},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[71,115548,115549],{"__ignoreMap":158},[162,115550,115551,115553,115555,115557,115559],{"class":164,"line":165},[162,115552,35026],{"class":172},[162,115554,114916],{"class":5082},[162,115556,114919],{"class":168},[162,115558,4442],{"class":207},[162,115560,114924],{"class":168},[19,115562,115563],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,115565,113521],{},[153,115567,115569],{"className":155,"code":115568,"language":157,"meta":158,"style":158},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[71,115570,115571],{"__ignoreMap":158},[162,115572,115573,115575],{"class":164,"line":165},[162,115574,20137],{"class":172},[162,115576,115028],{"class":168},[19,115578,115579],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,115581,112846],{},[153,115583,115585],{"className":155,"code":115584,"language":157,"meta":158,"style":158},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[71,115586,115587,115599,115612],{"__ignoreMap":158},[162,115588,115589,115591,115593,115595,115597],{"class":164,"line":165},[162,115590,114656],{"class":168},[162,115592,173],{"class":172},[162,115594,114661],{"class":168},[162,115596,353],{"class":172},[162,115598,114666],{"class":168},[162,115600,115601,115604,115606,115608,115610],{"class":164,"line":197},[162,115602,115603],{"class":168},"control_cost ",[162,115605,173],{"class":172},[162,115607,115097],{"class":207},[162,115609,9624],{"class":172},[162,115611,115102],{"class":168},[162,115613,115614,115616,115618,115620,115622,115624,115626],{"class":164,"line":228},[162,115615,20137],{"class":172},[162,115617,112858],{"class":207},[162,115619,604],{"class":168},[162,115621,353],{"class":172},[162,115623,114656],{"class":168},[162,115625,353],{"class":172},[162,115627,115119],{"class":168},[19,115629,115630],{},"奖励由两部分组成：",[1452,115632,115633,115638],{},[1455,115634,115635,115637],{},[71,115636,114683],{},"：末端离目标越远，奖励越低。",[1455,115639,115640,115643],{},[71,115641,115642],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,115645,115646],{},"简单控制器：",[153,115648,115650],{"className":155,"code":115649,"language":157,"meta":158,"style":158},"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",[71,115651,115652,115665,115697],{"__ignoreMap":158},[162,115653,115654,115657,115659,115661,115663],{"class":164,"line":165},[162,115655,115656],{"class":168},"error ",[162,115658,173],{"class":172},[162,115660,115228],{"class":168},[162,115662,353],{"class":172},[162,115664,115233],{"class":168},[162,115666,115667,115669,115671,115673,115675,115677,115679,115681,115683,115685,115687,115689,115691,115693,115695],{"class":164,"line":197},[162,115668,108932],{"class":168},[162,115670,312],{"class":207},[162,115672,1204],{"class":168},[162,115674,173],{"class":172},[162,115676,115250],{"class":168},[162,115678,108321],{"class":207},[162,115680,9624],{"class":172},[162,115682,115257],{"class":168},[162,115684,213],{"class":207},[162,115686,115262],{"class":168},[162,115688,353],{"class":172},[162,115690,105466],{"class":207},[162,115692,183],{"class":168},[162,115694,105466],{"class":207},[162,115696,434],{"class":168},[162,115698,115699,115701,115703,115705,115707,115709,115711,115713,115715,115717,115719,115721,115723,115725,115727],{"class":164,"line":228},[162,115700,108932],{"class":168},[162,115702,208],{"class":207},[162,115704,1204],{"class":168},[162,115706,173],{"class":172},[162,115708,115250],{"class":168},[162,115710,108321],{"class":207},[162,115712,9624],{"class":172},[162,115714,115257],{"class":168},[162,115716,312],{"class":207},[162,115718,115262],{"class":168},[162,115720,353],{"class":172},[162,115722,105466],{"class":207},[162,115724,183],{"class":168},[162,115726,105466],{"class":207},[162,115728,434],{"class":168},[19,115730,115731],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[3284,115733,104771],{"id":104771},[153,115735,115736],{"className":155,"code":115546,"language":157,"meta":158,"style":158},[71,115737,115738],{"__ignoreMap":158},[162,115739,115740,115742,115744,115746,115748],{"class":164,"line":165},[162,115741,35026],{"class":172},[162,115743,114916],{"class":5082},[162,115745,114919],{"class":168},[162,115747,4442],{"class":207},[162,115749,114924],{"class":168},[19,115751,115752,115753,115755,115756,85604,115758,3183],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[71,115754,82875],{}," 是 site 的名字，比如 ",[71,115757,114597],{},[71,115759,115019],{},[153,115761,115763],{"className":155,"code":115762,"language":157,"meta":158,"style":158},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[71,115764,115765],{"__ignoreMap":158},[162,115766,115767,115769,115771],{"class":164,"line":165},[162,115768,106696],{"class":168},[162,115770,173],{"class":172},[162,115772,114933],{"class":168},[19,115774,115775],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[153,115777,115779],{"className":155,"code":115778,"language":157,"meta":158,"style":158},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[71,115780,115781,115793],{"__ignoreMap":158},[162,115782,115783,115785,115787,115789,115791],{"class":164,"line":165},[162,115784,2703],{"class":172},[162,115786,106511],{"class":168},[162,115788,4187],{"class":172},[162,115790,2717],{"class":207},[162,115792,2316],{"class":168},[162,115794,115795,115797,115799,115801,115803,115805,115807,115809,115811,115813],{"class":164,"line":197},[162,115796,106957],{"class":172},[162,115798,106497],{"class":207},[162,115800,604],{"class":168},[162,115802,961],{"class":172},[162,115804,114958],{"class":179},[162,115806,967],{"class":207},[162,115808,82875],{"class":168},[162,115810,976],{"class":207},[162,115812,979],{"class":179},[162,115814,434],{"class":168},[19,115816,115817,115818,115821,115822,115824],{},"如果 site 没找到，就主动报错。",[71,115819,115820],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[71,115823,82875],{}," 的值放进字符串里。",[153,115826,115828],{"className":155,"code":115827,"language":157,"meta":158,"style":158},"return data.site_xpos[site_id].copy()\n",[71,115829,115830],{"__ignoreMap":158},[162,115831,115832,115834],{"class":164,"line":165},[162,115833,20137],{"class":172},[162,115835,114975],{"class":168},[19,115837,115838,115839,115841,115842,115845],{},"返回这个 site 的世界坐标。",[71,115840,106742],{}," 里的每一行都是一个 site 的 ",[71,115843,115844],{},"(x, y, z)"," 坐标。",[153,115847,115849],{"className":155,"code":115848,"language":157,"meta":158,"style":158},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[71,115850,115851],{"__ignoreMap":158},[162,115852,115853,115855,115857],{"class":164,"line":165},[162,115854,35026],{"class":172},[162,115856,114990],{"class":5082},[162,115858,114993],{"class":168},[19,115860,115861],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[153,115863,115865],{"className":155,"code":115864,"language":157,"meta":158,"style":158},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[71,115866,115867,115879],{"__ignoreMap":158},[162,115868,115869,115871,115873,115875,115877],{"class":164,"line":165},[162,115870,114629],{"class":168},[162,115872,173],{"class":172},[162,115874,115003],{"class":168},[162,115876,114597],{"class":179},[162,115878,434],{"class":168},[162,115880,115881,115883,115885,115887,115889],{"class":164,"line":197},[162,115882,2252],{"class":168},[162,115884,173],{"class":172},[162,115886,115003],{"class":168},[162,115888,115019],{"class":179},[162,115890,434],{"class":168},[19,115892,115893],{},"分别读取末端点和目标点的世界坐标。",[153,115895,115896],{"className":155,"code":115568,"language":157,"meta":158,"style":158},[71,115897,115898],{"__ignoreMap":158},[162,115899,115900,115902],{"class":164,"line":165},[162,115901,20137],{"class":172},[162,115903,115028],{"class":168},[19,115905,115906],{},"把四部分拼成一个观测数组：",[153,115908,115911],{"className":115909,"code":115910,"language":8295,"meta":158},[8293],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[71,115912,115910],{"__ignoreMap":158},[153,115914,115916],{"className":155,"code":115915,"language":157,"meta":158,"style":158},"dist = np.linalg.norm(tip - target)\n",[71,115917,115918],{"__ignoreMap":158},[162,115919,115920,115922,115924,115926,115928],{"class":164,"line":165},[162,115921,114656],{"class":168},[162,115923,173],{"class":172},[162,115925,114661],{"class":168},[162,115927,353],{"class":172},[162,115929,114666],{"class":168},[19,115931,115932,115933,115936,115937,115940],{},"计算 tip 到 target 的距离。",[71,115934,115935],{},"tip - target"," 得到一个三维向量，",[71,115938,115939],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,115942,17727],{},[153,115944,115947],{"className":115945,"code":115946,"language":8295,"meta":158},[8293],"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",[71,115948,115946],{"__ignoreMap":158},[153,115950,115952],{"className":155,"code":115951,"language":157,"meta":158,"style":158},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[71,115953,115954],{"__ignoreMap":158},[162,115955,115956,115958,115960,115962,115964],{"class":164,"line":165},[162,115957,115603],{"class":168},[162,115959,173],{"class":172},[162,115961,115097],{"class":207},[162,115963,9624],{"class":172},[162,115965,115102],{"class":168},[19,115967,115968,115969,115972,115973,115976],{},"计算动作惩罚。",[71,115970,115971],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[71,115974,115975],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[153,115978,115980],{"className":155,"code":115979,"language":157,"meta":158,"style":158},"return float(-dist - control_cost)\n",[71,115981,115982],{"__ignoreMap":158},[162,115983,115984,115986,115988,115990,115992,115994,115996],{"class":164,"line":165},[162,115985,20137],{"class":172},[162,115987,112858],{"class":207},[162,115989,604],{"class":168},[162,115991,353],{"class":172},[162,115993,114656],{"class":168},[162,115995,353],{"class":172},[162,115997,115119],{"class":168},[19,115999,116000],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[153,116002,116003],{"className":155,"code":113864,"language":157,"meta":158,"style":158},[71,116004,116005],{"__ignoreMap":158},[162,116006,116007,116009,116011],{"class":164,"line":165},[162,116008,113871],{"class":168},[162,116010,173],{"class":172},[162,116012,107822],{"class":207},[19,116014,116015],{},"累计奖励变量，记录整个运行过程的总分。",[153,116017,116019],{"className":155,"code":116018,"language":157,"meta":158,"style":158},"for step in range(500):\n",[71,116020,116021],{"__ignoreMap":158},[162,116022,116023,116025,116027,116029,116031,116033,116035],{"class":164,"line":165},[162,116024,808],{"class":172},[162,116026,34696],{"class":168},[162,116028,814],{"class":172},[162,116030,2647],{"class":207},[162,116032,604],{"class":168},[162,116034,68141],{"class":207},[162,116036,33870],{"class":168},[19,116038,116039],{},"运行 500 个控制步。",[153,116041,116042],{"className":155,"code":107604,"language":157,"meta":158,"style":158},[71,116043,116044],{"__ignoreMap":158},[162,116045,116046],{"class":164,"line":165},[162,116047,107604],{"class":168},[19,116049,116050,116051,104082,116053,116055],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[71,116052,106293],{},[71,116054,106296],{}," 是当前状态下的坐标。",[153,116057,116059],{"className":155,"code":116058,"language":157,"meta":158,"style":158},"error = target - tip\n",[71,116060,116061],{"__ignoreMap":158},[162,116062,116063,116065,116067,116069,116071],{"class":164,"line":165},[162,116064,115656],{"class":168},[162,116066,173],{"class":172},[162,116068,115228],{"class":168},[162,116070,353],{"class":172},[162,116072,115233],{"class":168},[19,116074,116075],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[153,116077,116079],{"className":155,"code":116078,"language":157,"meta":158,"style":158},"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",[71,116080,116081,116113],{"__ignoreMap":158},[162,116082,116083,116085,116087,116089,116091,116093,116095,116097,116099,116101,116103,116105,116107,116109,116111],{"class":164,"line":165},[162,116084,108932],{"class":168},[162,116086,312],{"class":207},[162,116088,1204],{"class":168},[162,116090,173],{"class":172},[162,116092,115250],{"class":168},[162,116094,108321],{"class":207},[162,116096,9624],{"class":172},[162,116098,115257],{"class":168},[162,116100,213],{"class":207},[162,116102,115262],{"class":168},[162,116104,353],{"class":172},[162,116106,105466],{"class":207},[162,116108,183],{"class":168},[162,116110,105466],{"class":207},[162,116112,434],{"class":168},[162,116114,116115,116117,116119,116121,116123,116125,116127,116129,116131,116133,116135,116137,116139,116141,116143],{"class":164,"line":197},[162,116116,108932],{"class":168},[162,116118,208],{"class":207},[162,116120,1204],{"class":168},[162,116122,173],{"class":172},[162,116124,115250],{"class":168},[162,116126,108321],{"class":207},[162,116128,9624],{"class":172},[162,116130,115257],{"class":168},[162,116132,312],{"class":207},[162,116134,115262],{"class":168},[162,116136,353],{"class":172},[162,116138,105466],{"class":207},[162,116140,183],{"class":168},[162,116142,105466],{"class":207},[162,116144,434],{"class":168},[19,116146,116147,116148,116151],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[71,116149,116150],{},"error -> ctrl -> step"," 的流程。",[153,116153,116154],{"className":155,"code":107566,"language":157,"meta":158,"style":158},[71,116155,116156],{"__ignoreMap":158},[162,116157,116158],{"class":164,"line":165},[162,116159,107566],{"class":168},[19,116161,116162],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[153,116164,116166],{"className":155,"code":116165,"language":157,"meta":158,"style":158},"obs = get_obs(model, data)\n",[71,116167,116168],{"__ignoreMap":158},[162,116169,116170,116172,116174],{"class":164,"line":165},[162,116171,113915],{"class":168},[162,116173,173],{"class":172},[162,116175,115351],{"class":168},[19,116177,116178,116179,116182],{},"读取最新观测。后面打印 ",[71,116180,116181],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,116184,105379],{"id":105378},[19,116186,116187],{},"观测维度为:",[153,116189,116192],{"className":116190,"code":116191,"language":8295,"meta":158},[8293],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[71,116193,116191],{"__ignoreMap":158},[19,116195,116196],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,116198,116199],{},"程序每 100 步打印：",[153,116201,116204],{"className":116202,"code":116203,"language":8295,"meta":158},[8293],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[71,116205,116203],{"__ignoreMap":158},[19,116207,116208,116209,116211],{},"如果控制有效，你应该看到最终 ",[71,116210,106293],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,116213,105411],{"id":105410},[1452,116215,116216,116219,116222,116228,116234,116241,116251],{},[1455,116217,116218],{},"修改目标点位置。",[1455,116220,116221],{},"重新运行，观察最终 tip 是否变化。",[1455,116223,116224,116225,116227],{},"把 gravity 改成 ",[71,116226,105652],{},"，观察控制是否变差。",[1455,116229,114242,116230,114246,116232,3183],{},[71,116231,105221],{},[71,116233,213],{},[1455,116235,105474,116236,105477,116238,116240],{},[71,116237,113657],{},[71,116239,110368],{},"，观察机械臂是否更难移动。",[1455,116242,105474,116243,85595,116245,105477,116247,116250],{},[71,116244,106296],{},[71,116246,107208],{},[71,116248,116249],{},"0.2 0 0.6","，观察 reward 和 final tip。",[1455,116252,116253],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,116255,105516],{"id":105515},[3284,116257,116259],{"id":116258},"site-not-found",[71,116260,116261],{},"site not found",[19,116263,116264,116265,104082,116268,3183],{},"检查 XML 中是否有 ",[71,116266,116267],{},"site name=\"tip\"",[71,116269,116270],{},"site name=\"target\"",[3284,116272,116273],{"id":116273},"机械臂完全不动",[19,116275,105586],{},[1452,116277,116278,116283,116286,116291],{},[1455,116279,116280,116282],{},[71,116281,105221],{}," 是否为 2",[1455,116284,116285],{},"actuator 是否引用正确 joint",[1455,116287,116288,116290],{},[71,116289,104140],{}," 是否被赋值",[1455,116292,116293,116294],{},"是否执行了 ",[71,116295,103749],{},[3284,116297,116298],{"id":116298},"控制效果不好",[19,116300,116301],{},"正常。本章重点不是控制器最优，而是任务结构:",[153,116303,116306],{"className":116304,"code":116305,"language":8295,"meta":158},[8293],"obs → action → mj_step → reward → next_obs\n",[71,116307,116305],{"__ignoreMap":158},[3284,116309,116311],{"id":116310},"tip-坐标不变化","tip 坐标不变化",[19,116313,105638],{},[1452,116315,116316,116321,116329,116338],{},[1455,116317,116318,116319,3183],{},"是否每步调用了 ",[71,116320,103749],{},[1455,116322,116323,116324,104082,116326,3183],{},"是否写入了 ",[71,116325,109187],{},[71,116327,116328],{},"data.ctrl[1]",[1455,116330,116331,116332,3513,116335,3183],{},"actuator 是否正确引用 ",[71,116333,116334],{},"joint1",[71,116336,116337],{},"joint2",[1455,116339,116340],{},"控制输入是否太小。",[3284,116342,116343],{"id":116343},"目标点不会动",[19,116345,116346],{},"本章的 target 是固定 site：",[153,116348,116350],{"className":56137,"code":116349,"language":56139,"meta":158,"style":158},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[71,116351,116352],{"__ignoreMap":158},[162,116353,116354,116356,116358,116360,116362,116364,116366,116368,116371],{"class":164,"line":165},[162,116355,4187],{"class":168},[162,116357,106272],{"class":54373},[162,116359,18013],{"class":5082},[162,116361,173],{"class":168},[162,116363,115019],{"class":179},[162,116365,104170],{"class":5082},[162,116367,173],{"class":168},[162,116369,116370],{"class":179},"\"0.5 0 0.4\"",[162,116372,116373],{"class":168}," ...\u002F>\n",[19,116375,116376,116377,116379],{},"它直接挂在 ",[71,116378,104904],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[3284,116381,116382],{"id":116382},"机械臂不像真实机械臂",[19,116384,116385],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,116387,105670],{"id":105669},[19,116389,116390],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,116392,116393],{},"核心公式：",[153,116395,116398],{"className":116396,"code":116397,"language":8295,"meta":158},[8293],"distance = ||tip - target||\nreward = -distance - action_cost\n",[71,116399,116397],{"__ignoreMap":158},[19,116401,116402],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[3219,116404,116405],{},"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":158,"searchDepth":197,"depth":197,"links":116407},[116408,116409,116410,116415,116419,116420,116421,116429],{"id":103710,"depth":197,"text":103711},{"id":103833,"depth":197,"text":103834},{"id":104108,"depth":197,"text":104109,"children":116411},[116412,116413,116414],{"id":114612,"depth":228,"text":114613},{"id":114687,"depth":228,"text":114687},{"id":114717,"depth":228,"text":114718},{"id":104316,"depth":197,"text":104317,"children":116416},[116417,116418],{"id":104635,"depth":228,"text":104635},{"id":104771,"depth":228,"text":104771},{"id":105378,"depth":197,"text":105379},{"id":105410,"depth":197,"text":105411},{"id":105515,"depth":197,"text":105516,"children":116422},[116423,116424,116425,116426,116427,116428],{"id":116258,"depth":228,"text":116261},{"id":116273,"depth":228,"text":116273},{"id":116298,"depth":228,"text":116298},{"id":116310,"depth":228,"text":116311},{"id":116343,"depth":228,"text":116343},{"id":116382,"depth":228,"text":116382},{"id":105669,"depth":197,"text":105670},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":114416,"description":158},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":116436,"title":116437,"body":116438,"description":158,"extension":3242,"meta":119899,"navigation":300,"path":119900,"seo":119901,"stem":119902,"__hash__":119903},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":116439,"toc":119870},[116440,116443,116445,116448,116451,116476,116479,116485,116488,116494,116496,116498,116522,116524,116542,116544,116587,116589,116616,116618,116621,116673,116676,116682,116691,116694,116732,116735,116774,116777,116785,116792,116795,116801,116803,116857,116864,116909,116912,116916,116932,116942,116944,118205,118207,118219,118221,118232,118234,118237,118258,118261,118264,118297,118303,118306,118339,118342,118345,118386,118391,118405,118408,118421,118426,118449,118451,118466,118476,118491,118498,118518,118533,118551,118554,118571,118579,118595,118601,118633,118646,118678,118688,118723,118737,118783,118797,118839,118850,118863,118869,118902,118905,118932,118942,118982,118992,119009,119016,119034,119037,119078,119091,119106,119109,119132,119135,119147,119150,119169,119174,119195,119198,119213,119216,119250,119262,119277,119280,119305,119308,119327,119330,119362,119365,119388,119394,119424,119431,119444,119447,119449,119451,119457,119460,119463,119475,119478,119480,119534,119536,119540,119546,119555,119558,119565,119567,119590,119593,119597,119599,119617,119623,119625,119658,119661,119667,119671,119674,119694,119699,119703,119710,119730,119735,119739,119742,119762,119765,119851,119855,119858,119864,119867],[10,116441,116437],{"id":116442},"_8gymnasium-风格强化学习接口基础",[14,116444,103711],{"id":103710},[19,116446,116447],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,116449,116450],{},"你将实现:",[153,116452,116454],{"className":155,"code":116453,"language":157,"meta":158,"style":158},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[71,116455,116456,116466],{"__ignoreMap":158},[162,116457,116458,116461,116463],{"class":164,"line":165},[162,116459,116460],{"class":168},"obs, info ",[162,116462,173],{"class":172},[162,116464,116465],{"class":168}," env.reset()\n",[162,116467,116468,116471,116473],{"class":164,"line":197},[162,116469,116470],{"class":168},"obs, reward, terminated, truncated, info ",[162,116472,173],{"class":172},[162,116474,116475],{"class":168}," env.step(action)\n",[19,116477,116478],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,116480,116481,116482,116484],{},"前面章节的代码都是“脚本式”的：在 ",[71,116483,105358],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,116486,116487],{},"可以先记住 Gymnasium 环境的核心交互：",[153,116489,116492],{"className":116490,"code":116491,"language":8295,"meta":158},[8293],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[71,116493,116491],{"__ignoreMap":158},[14,116495,103834],{"id":103833},[19,116497,103837],{},[153,116499,116500],{"className":26913,"code":107449,"language":26915,"meta":158,"style":158},[71,116501,116502],{"__ignoreMap":158},[162,116503,116504,116506,116508,116510,116512,116514,116516,116518,116520],{"class":164,"line":165},[162,116505,27668],{"class":5082},[162,116507,29405],{"class":179},[162,116509,26925],{"class":179},[162,116511,29490],{"class":207},[162,116513,107464],{"class":179},[162,116515,103862],{"class":179},[162,116517,105564],{"class":179},[162,116519,103878],{"class":179},[162,116521,107473],{"class":179},[19,116523,105882],{},[153,116525,116527],{"className":26913,"code":116526,"language":26915,"meta":158,"style":158},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[71,116528,116529],{"__ignoreMap":158},[162,116530,116531,116533,116535,116537,116539],{"class":164,"line":165},[162,116532,26922],{"class":5082},[162,116534,26925],{"class":179},[162,116536,103994],{"class":179},[162,116538,110772],{"class":179},[162,116540,116541],{"class":179}," gymnasium\n",[19,116543,105899],{},[153,116545,116547],{"className":26913,"code":116546,"language":26915,"meta":158,"style":158},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[71,116548,116549,116566,116575],{"__ignoreMap":158},[162,116550,116551,116553,116555,116557,116560,116562,116564],{"class":164,"line":165},[162,116552,33418],{"class":5082},[162,116554,32264],{"class":179},[162,116556,28207],{"class":207},[162,116558,116559],{"class":179}," mujoco-gym-api",[162,116561,104039],{"class":179},[162,116563,104042],{"class":207},[162,116565,104045],{"class":207},[162,116567,116568,116570,116572],{"class":164,"line":197},[162,116569,33418],{"class":5082},[162,116571,104052],{"class":179},[162,116573,116574],{"class":179}," mujoco-gym-api\n",[162,116576,116577,116579,116581,116583,116585],{"class":164,"line":228},[162,116578,26922],{"class":5082},[162,116580,26925],{"class":179},[162,116582,103994],{"class":179},[162,116584,110772],{"class":179},[162,116586,116541],{"class":179},[19,116588,104068],{},[1452,116590,116591,116601,116604,116610],{},[1455,116592,116593,116594,116597,116598,3183],{},"本章使用 ",[71,116595,116596],{},"gymnasium","，不是旧版 ",[71,116599,116600],{},"gym",[1455,116602,116603],{},"Gymnasium API 与旧 Gym API 有差异。",[1455,116605,116606,116607,3183],{},"旧 Gym 常见返回值是 4 个: ",[71,116608,116609],{},"obs, reward, done, info",[1455,116611,116612,116613,3183],{},"Gymnasium 返回值是 5 个: ",[71,116614,116615],{},"obs, reward, terminated, truncated, info",[14,116617,104109],{"id":104108},[19,116619,116620],{},"强化学习环境接口包含:",[26,116622,116623,116632],{},[29,116624,116625],{},[32,116626,116627,116630],{},[35,116628,116629],{"align":26827},"方法",[35,116631,105759],{"align":26827},[51,116633,116634,116644,116654,116664],{},[32,116635,116636,116641],{},[56,116637,116638],{"align":26827},[71,116639,116640],{},"reset()",[56,116642,116643],{"align":26827},"重置环境",[32,116645,116646,116651],{},[56,116647,116648],{"align":26827},[71,116649,116650],{},"step(action)",[56,116652,116653],{"align":26827},"执行动作",[32,116655,116656,116661],{},[56,116657,116658],{"align":26827},[71,116659,116660],{},"observation_space",[56,116662,116663],{"align":26827},"观测空间",[32,116665,116666,116671],{},[56,116667,116668],{"align":26827},[71,116669,116670],{},"action_space",[56,116672,26745],{"align":26827},[19,116674,116675],{},"一个最小环境需要完成:",[153,116677,116680],{"className":116678,"code":116679,"language":8295,"meta":158},[8293],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[71,116681,116679],{"__ignoreMap":158},[3284,116683,116685,104082,116688,107699],{"id":116684},"terminated-和-truncated-的区别",[71,116686,116687],{},"terminated",[71,116689,116690],{},"truncated",[19,116692,116693],{},"Gymnasium 把“结束”拆成两个概念：",[26,116695,116696,116706],{},[29,116697,116698],{},[32,116699,116700,116702,116704],{},[35,116701,107635],{"align":26827},[35,116703,103764],{"align":26827},[35,116705,24278],{"align":26827},[51,116707,116708,116720],{},[32,116709,116710,116714,116717],{},[56,116711,116712],{"align":26827},[71,116713,116687],{},[56,116715,116716],{"align":26827},"任务自然结束",[56,116718,116719],{"align":26827},"机械臂到达目标、机器人摔倒",[32,116721,116722,116726,116729],{},[56,116723,116724],{"align":26827},[71,116725,116690],{},[56,116727,116728],{"align":26827},"因外部限制截断",[56,116730,116731],{"align":26827},"达到最大步数、时间限制",[19,116733,116734],{},"本章中：",[153,116736,116738],{"className":155,"code":116737,"language":157,"meta":158,"style":158},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[71,116739,116740,116755],{"__ignoreMap":158},[162,116741,116742,116745,116747,116750,116752],{"class":164,"line":165},[162,116743,116744],{"class":168},"terminated ",[162,116746,173],{"class":172},[162,116748,116749],{"class":168}," dist ",[162,116751,4187],{"class":172},[162,116753,116754],{"class":207}," 0.05\n",[162,116756,116757,116760,116762,116764,116767,116769,116771],{"class":164,"line":197},[162,116758,116759],{"class":168},"truncated ",[162,116761,173],{"class":172},[162,116763,41948],{"class":207},[162,116765,116766],{"class":168},".steps ",[162,116768,3038],{"class":172},[162,116770,41948],{"class":207},[162,116772,116773],{"class":168},".max_steps\n",[19,116775,116776],{},"也就是：",[1452,116778,116779,116782],{},[1455,116780,116781],{},"末端距离目标小于 0.05，任务成功结束。",[1455,116783,116784],{},"步数超过上限，episode 被截断。",[3284,116786,116788,104082,116790],{"id":116787},"observation_space-和-action_space",[71,116789,116660],{},[71,116791,116670],{},[19,116793,116794],{},"这两个对象告诉算法：",[153,116796,116799],{"className":116797,"code":116798,"language":8295,"meta":158},[8293],"观测长什么样\n动作允许多大\n",[71,116800,116798],{"__ignoreMap":158},[19,116802,17727],{},[153,116804,116806],{"className":155,"code":116805,"language":157,"meta":158,"style":158},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[71,116807,116808],{"__ignoreMap":158},[162,116809,116810,116812,116815,116817,116820,116823,116826,116828,116830,116833,116835,116837,116839,116841,116843,116845,116847,116850,116852,116854],{"class":164,"line":165},[162,116811,33907],{"class":207},[162,116813,116814],{"class":168},".action_space ",[162,116816,173],{"class":172},[162,116818,116819],{"class":168}," spaces.Box(",[162,116821,116822],{"class":671},"low",[162,116824,116825],{"class":172},"=-",[162,116827,105466],{"class":207},[162,116829,183],{"class":168},[162,116831,116832],{"class":671},"high",[162,116834,173],{"class":172},[162,116836,105466],{"class":207},[162,116838,183],{"class":168},[162,116840,99028],{"class":671},[162,116842,173],{"class":172},[162,116844,604],{"class":168},[162,116846,213],{"class":207},[162,116848,116849],{"class":168},",), ",[162,116851,96565],{"class":671},[162,116853,173],{"class":172},[162,116855,116856],{"class":168},"np.float32)\n",[19,116858,116859,116860,116863],{},"表示动作是 2 维数组，每个值都在 ",[71,116861,116862],{},"[-1, 1]"," 范围内。",[153,116865,116867],{"className":155,"code":116866,"language":157,"meta":158,"style":158},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[71,116868,116869],{"__ignoreMap":158},[162,116870,116871,116873,116876,116878,116880,116882,116884,116887,116889,116891,116893,116895,116897,116899,116901,116903,116905,116907],{"class":164,"line":165},[162,116872,33907],{"class":207},[162,116874,116875],{"class":168},".observation_space ",[162,116877,173],{"class":172},[162,116879,116819],{"class":168},[162,116881,116822],{"class":671},[162,116883,116825],{"class":172},[162,116885,116886],{"class":168},"np.inf, ",[162,116888,116832],{"class":671},[162,116890,173],{"class":172},[162,116892,116886],{"class":168},[162,116894,99028],{"class":671},[162,116896,173],{"class":172},[162,116898,604],{"class":168},[162,116900,1006],{"class":207},[162,116902,116849],{"class":168},[162,116904,96565],{"class":671},[162,116906,173],{"class":172},[162,116908,116856],{"class":168},[19,116910,116911],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[3284,116913,116915],{"id":116914},"frame_skip-是什么","frame_skip 是什么",[153,116917,116919],{"className":155,"code":116918,"language":157,"meta":158,"style":158},"self.frame_skip = 5\n",[71,116920,116921],{"__ignoreMap":158},[162,116922,116923,116925,116928,116930],{"class":164,"line":165},[162,116924,33907],{"class":207},[162,116926,116927],{"class":168},".frame_skip ",[162,116929,173],{"class":172},[162,116931,57497],{"class":207},[19,116933,116934,116935,116938,116939,116941],{},"表示外部调用一次 ",[71,116936,116937],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[71,116940,104279],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,116943,104317],{"id":104316},[153,116945,116947],{"className":155,"code":116946,"language":157,"meta":158,"style":158},"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",[71,116948,116949,116961,116967,116977,116988,116992,116996,117004,117009,117013,117017,117021,117025,117029,117033,117037,117042,117046,117050,117054,117059,117063,117067,117071,117075,117079,117083,117087,117091,117095,117099,117103,117107,117111,117129,117144,117148,117161,117171,117186,117203,117207,117228,117247,117272,117286,117290,117300,117312,117322,117326,117368,117406,117410,117420,117436,117451,117470,117477,117481,117494,117509,117524,117537,117556,117572,117576,117617,117632,117647,117651,117690,117701,117714,117718,117728,117737,117741,117751,117766,117784,117788,117799,117816,117829,117833,117843,117847,117858,117869,117873,117887,117901,117917,117921,117934,117951,117966,117973,117977,117981,117993,118003,118021,118033,118045,118049,118057,118073,118082,118091,118099,118141,118154,118159,118163,118181,118185,118189,118201],{"__ignoreMap":158},[162,116950,116951,116953,116956,116958],{"class":164,"line":165},[162,116952,33478],{"class":172},[162,116954,116955],{"class":168}," gymnasium ",[162,116957,34466],{"class":172},[162,116959,116960],{"class":168}," gym\n",[162,116962,116963,116965],{"class":164,"line":197},[162,116964,33478],{"class":172},[162,116966,104365],{"class":168},[162,116968,116969,116971,116973,116975],{"class":164,"line":228},[162,116970,33478],{"class":172},[162,116972,34463],{"class":168},[162,116974,34466],{"class":172},[162,116976,34469],{"class":168},[162,116978,116979,116981,116983,116985],{"class":164,"line":252},[162,116980,33821],{"class":172},[162,116982,116955],{"class":168},[162,116984,33478],{"class":172},[162,116986,116987],{"class":168}," spaces\n",[162,116989,116990],{"class":164,"line":328},[162,116991,301],{"emptyLinePlaceholder":300},[162,116993,116994],{"class":164,"line":466},[162,116995,301],{"emptyLinePlaceholder":300},[162,116997,116998,117000,117002],{"class":164,"line":471},[162,116999,104378],{"class":207},[162,117001,16659],{"class":172},[162,117003,104383],{"class":179},[162,117005,117006],{"class":164,"line":687},[162,117007,117008],{"class":179},"\u003Cmujoco model=\"gym_reacher\">\n",[162,117010,117011],{"class":164,"line":692},[162,117012,114798],{"class":179},[162,117014,117015],{"class":164,"line":698},[162,117016,301],{"emptyLinePlaceholder":300},[162,117018,117019],{"class":164,"line":2955},[162,117020,104402],{"class":179},[162,117022,117023],{"class":164,"line":2960},[162,117024,114816],{"class":179},[162,117026,117027],{"class":164,"line":2971},[162,117028,301],{"emptyLinePlaceholder":300},[162,117030,117031],{"class":164,"line":2984},[162,117032,114825],{"class":179},[162,117034,117035],{"class":164,"line":2989},[162,117036,114830],{"class":179},[162,117038,117039],{"class":164,"line":3011},[162,117040,117041],{"class":179},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[162,117043,117044],{"class":164,"line":3022},[162,117045,301],{"emptyLinePlaceholder":300},[162,117047,117048],{"class":164,"line":3027},[162,117049,114844],{"class":179},[162,117051,117052],{"class":164,"line":3046},[162,117053,114849],{"class":179},[162,117055,117056],{"class":164,"line":3052},[162,117057,117058],{"class":179},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[162,117060,117061],{"class":164,"line":3057},[162,117062,114859],{"class":179},[162,117064,117065],{"class":164,"line":3072},[162,117066,109499],{"class":179},[162,117068,117069],{"class":164,"line":3077},[162,117070,104431],{"class":179},[162,117072,117073],{"class":164,"line":3100},[162,117074,104436],{"class":179},[162,117076,117077],{"class":164,"line":3140},[162,117078,301],{"emptyLinePlaceholder":300},[162,117080,117081],{"class":164,"line":4878},[162,117082,109516],{"class":179},[162,117084,117085],{"class":164,"line":4883},[162,117086,114884],{"class":179},[162,117088,117089],{"class":164,"line":4897},[162,117090,114889],{"class":179},[162,117092,117093],{"class":164,"line":4902},[162,117094,109526],{"class":179},[162,117096,117097],{"class":164,"line":5694},[162,117098,104441],{"class":179},[162,117100,117101],{"class":164,"line":5708},[162,117102,98763],{"class":179},[162,117104,117105],{"class":164,"line":5716},[162,117106,301],{"emptyLinePlaceholder":300},[162,117108,117109],{"class":164,"line":5721},[162,117110,301],{"emptyLinePlaceholder":300},[162,117112,117113,117115,117118,117120,117122,117124,117127],{"class":164,"line":5727},[162,117114,17788],{"class":172},[162,117116,117117],{"class":5082}," ReacherEnv",[162,117119,604],{"class":168},[162,117121,116600],{"class":5082},[162,117123,3847],{"class":168},[162,117125,117126],{"class":5082},"Env",[162,117128,33870],{"class":168},[162,117130,117131,117134,117136,117138,117141],{"class":164,"line":5733},[162,117132,117133],{"class":168},"    metadata ",[162,117135,173],{"class":172},[162,117137,1477],{"class":168},[162,117139,117140],{"class":179},"\"render_modes\"",[162,117142,117143],{"class":168},": []}\n",[162,117145,117146],{"class":164,"line":5738},[162,117147,301],{"emptyLinePlaceholder":300},[162,117149,117150,117152,117154,117157,117159],{"class":164,"line":11052},[162,117151,33885],{"class":172},[162,117153,33888],{"class":207},[162,117155,117156],{"class":168},"(self) -> ",[162,117158,98751],{"class":207},[162,117160,2316],{"class":168},[162,117162,117163,117165,117167,117169],{"class":164,"line":11076},[162,117164,33901],{"class":207},[162,117166,20352],{"class":168},[162,117168,33913],{"class":207},[162,117170,1526],{"class":168},[162,117172,117173,117175,117178,117180,117182,117184],{"class":164,"line":11081},[162,117174,33929],{"class":207},[162,117176,117177],{"class":168},".model ",[162,117179,173],{"class":172},[162,117181,104476],{"class":168},[162,117183,104378],{"class":207},[162,117185,434],{"class":168},[162,117187,117188,117190,117193,117195,117198,117200],{"class":164,"line":11087},[162,117189,33929],{"class":207},[162,117191,117192],{"class":168},".data ",[162,117194,173],{"class":172},[162,117196,117197],{"class":168}," mujoco.MjData(",[162,117199,33907],{"class":207},[162,117201,117202],{"class":168},".model)\n",[162,117204,117205],{"class":164,"line":11114},[162,117206,301],{"emptyLinePlaceholder":300},[162,117208,117209,117211,117214,117216,117219,117221,117224,117226],{"class":164,"line":11119},[162,117210,33929],{"class":207},[162,117212,117213],{"class":168},".tip_site_id ",[162,117215,173],{"class":172},[162,117217,117218],{"class":168}," mujoco.mj_name2id(",[162,117220,33907],{"class":207},[162,117222,117223],{"class":168},".model, mujoco.mjtObj.mjOBJ_SITE, ",[162,117225,114597],{"class":179},[162,117227,434],{"class":168},[162,117229,117230,117232,117235,117237,117239,117241,117243,117245],{"class":164,"line":11125},[162,117231,33929],{"class":207},[162,117233,117234],{"class":168},".target_site_id ",[162,117236,173],{"class":172},[162,117238,117218],{"class":168},[162,117240,33907],{"class":207},[162,117242,117223],{"class":168},[162,117244,115019],{"class":179},[162,117246,434],{"class":168},[162,117248,117249,117251,117253,117255,117257,117259,117262,117264,117266,117268,117270],{"class":164,"line":11137},[162,117250,5614],{"class":172},[162,117252,41948],{"class":207},[162,117254,117213],{"class":168},[162,117256,4187],{"class":172},[162,117258,2717],{"class":207},[162,117260,117261],{"class":172}," or",[162,117263,41948],{"class":207},[162,117265,117234],{"class":168},[162,117267,4187],{"class":172},[162,117269,2717],{"class":207},[162,117271,2316],{"class":168},[162,117273,117274,117277,117279,117281,117284],{"class":164,"line":11149},[162,117275,117276],{"class":172},"            raise",[162,117278,106497],{"class":207},[162,117280,604],{"class":168},[162,117282,117283],{"class":179},"\"required sites not found\"",[162,117285,434],{"class":168},[162,117287,117288],{"class":164,"line":11161},[162,117289,301],{"emptyLinePlaceholder":300},[162,117291,117292,117294,117296,117298],{"class":164,"line":12816},[162,117293,33929],{"class":207},[162,117295,116927],{"class":168},[162,117297,173],{"class":172},[162,117299,57497],{"class":207},[162,117301,117302,117304,117307,117309],{"class":164,"line":12841},[162,117303,33929],{"class":207},[162,117305,117306],{"class":168},".max_steps ",[162,117308,173],{"class":172},[162,117310,117311],{"class":207}," 200\n",[162,117313,117314,117316,117318,117320],{"class":164,"line":12864},[162,117315,33929],{"class":207},[162,117317,116766],{"class":168},[162,117319,173],{"class":172},[162,117321,902],{"class":207},[162,117323,117324],{"class":164,"line":12888},[162,117325,301],{"emptyLinePlaceholder":300},[162,117327,117328,117330,117332,117334,117336,117338,117340,117342,117344,117346,117348,117350,117352,117354,117356,117358,117360,117362,117364,117366],{"class":164,"line":12893},[162,117329,33929],{"class":207},[162,117331,116814],{"class":168},[162,117333,173],{"class":172},[162,117335,116819],{"class":168},[162,117337,116822],{"class":671},[162,117339,116825],{"class":172},[162,117341,105466],{"class":207},[162,117343,183],{"class":168},[162,117345,116832],{"class":671},[162,117347,173],{"class":172},[162,117349,105466],{"class":207},[162,117351,183],{"class":168},[162,117353,99028],{"class":671},[162,117355,173],{"class":172},[162,117357,604],{"class":168},[162,117359,213],{"class":207},[162,117361,116849],{"class":168},[162,117363,96565],{"class":671},[162,117365,173],{"class":172},[162,117367,116856],{"class":168},[162,117369,117370,117372,117374,117376,117378,117380,117382,117384,117386,117388,117390,117392,117394,117396,117398,117400,117402,117404],{"class":164,"line":12898},[162,117371,33929],{"class":207},[162,117373,116875],{"class":168},[162,117375,173],{"class":172},[162,117377,116819],{"class":168},[162,117379,116822],{"class":671},[162,117381,116825],{"class":172},[162,117383,116886],{"class":168},[162,117385,116832],{"class":671},[162,117387,173],{"class":172},[162,117389,116886],{"class":168},[162,117391,99028],{"class":671},[162,117393,173],{"class":172},[162,117395,604],{"class":168},[162,117397,1006],{"class":207},[162,117399,116849],{"class":168},[162,117401,96565],{"class":671},[162,117403,173],{"class":172},[162,117405,116856],{"class":168},[162,117407,117408],{"class":164,"line":12903},[162,117409,301],{"emptyLinePlaceholder":300},[162,117411,117412,117414,117417],{"class":164,"line":12912},[162,117413,33885],{"class":172},[162,117415,117416],{"class":5082}," _get_obs",[162,117418,117419],{"class":168},"(self) -> np.ndarray:\n",[162,117421,117422,117424,117426,117428,117431,117433],{"class":164,"line":12917},[162,117423,115197],{"class":168},[162,117425,173],{"class":172},[162,117427,41948],{"class":207},[162,117429,117430],{"class":168},".data.site_xpos[",[162,117432,33907],{"class":207},[162,117434,117435],{"class":168},".tip_site_id].copy()\n",[162,117437,117438,117440,117442,117444,117446,117448],{"class":164,"line":12923},[162,117439,115210],{"class":168},[162,117441,173],{"class":172},[162,117443,41948],{"class":207},[162,117445,117430],{"class":168},[162,117447,33907],{"class":207},[162,117449,117450],{"class":168},".target_site_id].copy()\n",[162,117452,117453,117455,117457,117460,117462,117465,117467],{"class":164,"line":12944},[162,117454,113243],{"class":168},[162,117456,173],{"class":172},[162,117458,117459],{"class":168}," np.concatenate([",[162,117461,33907],{"class":207},[162,117463,117464],{"class":168},".data.qpos.copy(), ",[162,117466,33907],{"class":207},[162,117468,117469],{"class":168},".data.qvel.copy(), tip, target])\n",[162,117471,117472,117474],{"class":164,"line":12950},[162,117473,17846],{"class":172},[162,117475,117476],{"class":168}," obs.astype(np.float32)\n",[162,117478,117479],{"class":164,"line":12964},[162,117480,301],{"emptyLinePlaceholder":300},[162,117482,117483,117485,117488,117490,117492],{"class":164,"line":12970},[162,117484,33885],{"class":172},[162,117486,117487],{"class":5082}," _get_reward",[162,117489,117156],{"class":168},[162,117491,3354],{"class":207},[162,117493,2316],{"class":168},[162,117495,117496,117498,117500,117502,117504,117506],{"class":164,"line":12997},[162,117497,115197],{"class":168},[162,117499,173],{"class":172},[162,117501,41948],{"class":207},[162,117503,117430],{"class":168},[162,117505,33907],{"class":207},[162,117507,117508],{"class":168},".tip_site_id]\n",[162,117510,117511,117513,117515,117517,117519,117521],{"class":164,"line":13006},[162,117512,115210],{"class":168},[162,117514,173],{"class":172},[162,117516,41948],{"class":207},[162,117518,117430],{"class":168},[162,117520,33907],{"class":207},[162,117522,117523],{"class":168},".target_site_id]\n",[162,117525,117526,117529,117531,117533,117535],{"class":164,"line":13012},[162,117527,117528],{"class":168},"        dist ",[162,117530,173],{"class":172},[162,117532,114661],{"class":168},[162,117534,353],{"class":172},[162,117536,114666],{"class":168},[162,117538,117539,117542,117544,117546,117548,117551,117553],{"class":164,"line":13020},[162,117540,117541],{"class":168},"        control_cost ",[162,117543,173],{"class":172},[162,117545,115097],{"class":207},[162,117547,9624],{"class":172},[162,117549,117550],{"class":168}," np.sum(np.square(",[162,117552,33907],{"class":207},[162,117554,117555],{"class":168},".data.ctrl))\n",[162,117557,117558,117560,117562,117564,117566,117568,117570],{"class":164,"line":13025},[162,117559,17846],{"class":172},[162,117561,112858],{"class":207},[162,117563,604],{"class":168},[162,117565,353],{"class":172},[162,117567,114656],{"class":168},[162,117569,353],{"class":172},[162,117571,115119],{"class":168},[162,117573,117574],{"class":164,"line":19695},[162,117575,301],{"emptyLinePlaceholder":300},[162,117577,117578,117580,117583,117586,117588,117591,117593,117595,117597,117599,117601,117604,117607,117609,117611,117613,117615],{"class":164,"line":19701},[162,117579,33885],{"class":172},[162,117581,117582],{"class":5082}," reset",[162,117584,117585],{"class":168},"(self, ",[162,117587,3745],{"class":172},[162,117589,117590],{"class":168},", seed: ",[162,117592,3319],{"class":207},[162,117594,28201],{"class":172},[162,117596,42008],{"class":207},[162,117598,16659],{"class":172},[162,117600,42008],{"class":207},[162,117602,117603],{"class":168},", options: ",[162,117605,117606],{"class":207},"dict",[162,117608,28201],{"class":172},[162,117610,42008],{"class":207},[162,117612,16659],{"class":172},[162,117614,42008],{"class":207},[162,117616,33870],{"class":168},[162,117618,117619,117621,117624,117627,117629],{"class":164,"line":19724},[162,117620,33901],{"class":207},[162,117622,117623],{"class":168},"().reset(",[162,117625,117626],{"class":671},"seed",[162,117628,173],{"class":172},[162,117630,117631],{"class":168},"seed)\n",[162,117633,117634,117637,117639,117642,117644],{"class":164,"line":19730},[162,117635,117636],{"class":168},"        mujoco.mj_resetData(",[162,117638,33907],{"class":207},[162,117640,117641],{"class":168},".model, ",[162,117643,33907],{"class":207},[162,117645,117646],{"class":168},".data)\n",[162,117648,117649],{"class":164,"line":19753},[162,117650,301],{"emptyLinePlaceholder":300},[162,117652,117653,117655,117658,117660,117662,117665,117667,117669,117671,117673,117675,117677,117679,117681,117683,117685,117687],{"class":164,"line":19767},[162,117654,33929],{"class":207},[162,117656,117657],{"class":168},".data.qpos[:] ",[162,117659,173],{"class":172},[162,117661,41948],{"class":207},[162,117663,117664],{"class":168},".np_random.uniform(",[162,117666,116822],{"class":671},[162,117668,116825],{"class":172},[162,117670,89275],{"class":207},[162,117672,183],{"class":168},[162,117674,116832],{"class":671},[162,117676,173],{"class":172},[162,117678,89275],{"class":207},[162,117680,183],{"class":168},[162,117682,34577],{"class":671},[162,117684,173],{"class":172},[162,117686,33907],{"class":207},[162,117688,117689],{"class":168},".model.nq)\n",[162,117691,117692,117694,117697,117699],{"class":164,"line":19787},[162,117693,33929],{"class":207},[162,117695,117696],{"class":168},".data.qvel[:] ",[162,117698,173],{"class":172},[162,117700,107822],{"class":207},[162,117702,117703,117706,117708,117710,117712],{"class":164,"line":19793},[162,117704,117705],{"class":168},"        mujoco.mj_forward(",[162,117707,33907],{"class":207},[162,117709,117641],{"class":168},[162,117711,33907],{"class":207},[162,117713,117646],{"class":168},[162,117715,117716],{"class":164,"line":19804},[162,117717,301],{"emptyLinePlaceholder":300},[162,117719,117720,117722,117724,117726],{"class":164,"line":19827},[162,117721,33929],{"class":207},[162,117723,116766],{"class":168},[162,117725,173],{"class":172},[162,117727,902],{"class":207},[162,117729,117730,117732,117734],{"class":164,"line":19849},[162,117731,17846],{"class":172},[162,117733,41948],{"class":207},[162,117735,117736],{"class":168},"._get_obs(), {}\n",[162,117738,117739],{"class":164,"line":19854},[162,117740,301],{"emptyLinePlaceholder":300},[162,117742,117743,117745,117748],{"class":164,"line":19860},[162,117744,33885],{"class":172},[162,117746,117747],{"class":5082}," step",[162,117749,117750],{"class":168},"(self, action):\n",[162,117752,117753,117755,117757,117760,117762,117764],{"class":164,"line":19874},[162,117754,113283],{"class":168},[162,117756,173],{"class":172},[162,117758,117759],{"class":168}," np.asarray(action, ",[162,117761,96565],{"class":671},[162,117763,173],{"class":172},[162,117765,116856],{"class":168},[162,117767,117768,117770,117772,117774,117776,117779,117781],{"class":164,"line":19887},[162,117769,113283],{"class":168},[162,117771,173],{"class":172},[162,117773,110508],{"class":168},[162,117775,33907],{"class":207},[162,117777,117778],{"class":168},".action_space.low, ",[162,117780,33907],{"class":207},[162,117782,117783],{"class":168},".action_space.high)\n",[162,117785,117786],{"class":164,"line":19892},[162,117787,301],{"emptyLinePlaceholder":300},[162,117789,117790,117792,117795,117797],{"class":164,"line":19906},[162,117791,33929],{"class":207},[162,117793,117794],{"class":168},".data.ctrl[:] ",[162,117796,173],{"class":172},[162,117798,110531],{"class":168},[162,117800,117801,117803,117805,117807,117809,117811,117813],{"class":164,"line":19911},[162,117802,6517],{"class":172},[162,117804,104565],{"class":168},[162,117806,814],{"class":172},[162,117808,2647],{"class":207},[162,117810,604],{"class":168},[162,117812,33907],{"class":207},[162,117814,117815],{"class":168},".frame_skip):\n",[162,117817,117818,117821,117823,117825,117827],{"class":164,"line":19917},[162,117819,117820],{"class":168},"            mujoco.mj_step(",[162,117822,33907],{"class":207},[162,117824,117641],{"class":168},[162,117826,33907],{"class":207},[162,117828,117646],{"class":168},[162,117830,117831],{"class":164,"line":19922},[162,117832,301],{"emptyLinePlaceholder":300},[162,117834,117835,117837,117839,117841],{"class":164,"line":19936},[162,117836,33929],{"class":207},[162,117838,116766],{"class":168},[162,117840,926],{"class":172},[162,117842,58768],{"class":207},[162,117844,117845],{"class":164,"line":19941},[162,117846,301],{"emptyLinePlaceholder":300},[162,117848,117849,117851,117853,117855],{"class":164,"line":19946},[162,117850,113243],{"class":168},[162,117852,173],{"class":172},[162,117854,41948],{"class":207},[162,117856,117857],{"class":168},"._get_obs()\n",[162,117859,117860,117862,117864,117866],{"class":164,"line":19960},[162,117861,113348],{"class":168},[162,117863,173],{"class":172},[162,117865,41948],{"class":207},[162,117867,117868],{"class":168},"._get_reward()\n",[162,117870,117871],{"class":164,"line":19972},[162,117872,301],{"emptyLinePlaceholder":300},[162,117874,117875,117877,117879,117881,117883,117885],{"class":164,"line":19977},[162,117876,115197],{"class":168},[162,117878,173],{"class":172},[162,117880,41948],{"class":207},[162,117882,117430],{"class":168},[162,117884,33907],{"class":207},[162,117886,117508],{"class":168},[162,117888,117889,117891,117893,117895,117897,117899],{"class":164,"line":19990},[162,117890,115210],{"class":168},[162,117892,173],{"class":172},[162,117894,41948],{"class":207},[162,117896,117430],{"class":168},[162,117898,33907],{"class":207},[162,117900,117523],{"class":168},[162,117902,117903,117905,117907,117909,117912,117914],{"class":164,"line":19995},[162,117904,117528],{"class":168},[162,117906,173],{"class":172},[162,117908,112858],{"class":207},[162,117910,117911],{"class":168},"(np.linalg.norm(tip ",[162,117913,353],{"class":172},[162,117915,117916],{"class":168}," target))\n",[162,117918,117919],{"class":164,"line":20000},[162,117920,301],{"emptyLinePlaceholder":300},[162,117922,117923,117926,117928,117930,117932],{"class":164,"line":20005},[162,117924,117925],{"class":168},"        terminated ",[162,117927,173],{"class":172},[162,117929,116749],{"class":168},[162,117931,4187],{"class":172},[162,117933,116754],{"class":207},[162,117935,117936,117939,117941,117943,117945,117947,117949],{"class":164,"line":20018},[162,117937,117938],{"class":168},"        truncated ",[162,117940,173],{"class":172},[162,117942,41948],{"class":207},[162,117944,116766],{"class":168},[162,117946,3038],{"class":172},[162,117948,41948],{"class":207},[162,117950,116773],{"class":168},[162,117952,117953,117956,117958,117960,117963],{"class":164,"line":20023},[162,117954,117955],{"class":168},"        info ",[162,117957,173],{"class":172},[162,117959,1477],{"class":168},[162,117961,117962],{"class":179},"\"distance\"",[162,117964,117965],{"class":168},": dist}\n",[162,117967,117968,117970],{"class":164,"line":35709},[162,117969,17846],{"class":172},[162,117971,117972],{"class":168}," obs, reward, terminated, truncated, info\n",[162,117974,117975],{"class":164,"line":35715},[162,117976,301],{"emptyLinePlaceholder":300},[162,117978,117979],{"class":164,"line":35721},[162,117980,301],{"emptyLinePlaceholder":300},[162,117982,117983,117985,117987,117989,117991],{"class":164,"line":35727},[162,117984,35026],{"class":172},[162,117986,5092],{"class":5082},[162,117988,104462],{"class":168},[162,117990,98751],{"class":207},[162,117992,2316],{"class":168},[162,117994,117995,117998,118000],{"class":164,"line":35733},[162,117996,117997],{"class":168},"    env ",[162,117999,173],{"class":172},[162,118001,118002],{"class":168}," ReacherEnv()\n",[162,118004,118005,118008,118010,118013,118015,118017,118019],{"class":164,"line":35744},[162,118006,118007],{"class":168},"    obs, info ",[162,118009,173],{"class":172},[162,118011,118012],{"class":168}," env.reset(",[162,118014,117626],{"class":671},[162,118016,173],{"class":172},[162,118018,312],{"class":207},[162,118020,434],{"class":168},[162,118022,118023,118025,118027,118030],{"class":164,"line":35750},[162,118024,822],{"class":207},[162,118026,604],{"class":168},[162,118028,118029],{"class":179},"\"initial obs shape:\"",[162,118031,118032],{"class":168},", obs.shape)\n",[162,118034,118035,118037,118039,118042],{"class":164,"line":35770},[162,118036,822],{"class":207},[162,118038,604],{"class":168},[162,118040,118041],{"class":179},"\"initial info:\"",[162,118043,118044],{"class":168},", info)\n",[162,118046,118047],{"class":164,"line":35776},[162,118048,301],{"emptyLinePlaceholder":300},[162,118050,118051,118053,118055],{"class":164,"line":35787},[162,118052,113214],{"class":168},[162,118054,173],{"class":172},[162,118056,107822],{"class":207},[162,118058,118059,118061,118063,118065,118067,118069,118071],{"class":164,"line":35793},[162,118060,6315],{"class":172},[162,118062,34696],{"class":168},[162,118064,814],{"class":172},[162,118066,2647],{"class":207},[162,118068,604],{"class":168},[162,118070,1011],{"class":207},[162,118072,33870],{"class":168},[162,118074,118075,118077,118079],{"class":164,"line":35799},[162,118076,113283],{"class":168},[162,118078,173],{"class":172},[162,118080,118081],{"class":168}," env.action_space.sample()\n",[162,118083,118084,118087,118089],{"class":164,"line":35805},[162,118085,118086],{"class":168},"        obs, reward, terminated, truncated, info ",[162,118088,173],{"class":172},[162,118090,116475],{"class":168},[162,118092,118093,118095,118097],{"class":164,"line":35811},[162,118094,113358],{"class":168},[162,118096,926],{"class":172},[162,118098,113363],{"class":168},[162,118100,118101,118103,118105,118107,118109,118112,118114,118116,118119,118121,118123,118126,118128,118130,118133,118135,118137,118139],{"class":164,"line":35817},[162,118102,2300],{"class":207},[162,118104,604],{"class":168},[162,118106,113392],{"class":179},[162,118108,113395],{"class":168},[162,118110,118111],{"class":179},"\"reward:\"",[162,118113,183],{"class":168},[162,118115,35097],{"class":207},[162,118117,118118],{"class":168},"(reward, ",[162,118120,218],{"class":207},[162,118122,113406],{"class":168},[162,118124,118125],{"class":179},"\"distance:\"",[162,118127,183],{"class":168},[162,118129,35097],{"class":207},[162,118131,118132],{"class":168},"(info[",[162,118134,117962],{"class":179},[162,118136,115262],{"class":168},[162,118138,218],{"class":207},[162,118140,586],{"class":168},[162,118142,118143,118145,118148,118151],{"class":164,"line":35823},[162,118144,5614],{"class":172},[162,118146,118147],{"class":168}," terminated ",[162,118149,118150],{"class":172},"or",[162,118152,118153],{"class":168}," truncated:\n",[162,118155,118156],{"class":164,"line":35829},[162,118157,118158],{"class":172},"            break\n",[162,118160,118161],{"class":164,"line":35849},[162,118162,301],{"emptyLinePlaceholder":300},[162,118164,118165,118167,118169,118171,118173,118175,118177,118179],{"class":164,"line":35855},[162,118166,822],{"class":207},[162,118168,604],{"class":168},[162,118170,113437],{"class":179},[162,118172,183],{"class":168},[162,118174,35097],{"class":207},[162,118176,113444],{"class":168},[162,118178,218],{"class":207},[162,118180,586],{"class":168},[162,118182,118183],{"class":164,"line":35871},[162,118184,301],{"emptyLinePlaceholder":300},[162,118186,118187],{"class":164,"line":35877},[162,118188,301],{"emptyLinePlaceholder":300},[162,118190,118191,118193,118195,118197,118199],{"class":164,"line":35891},[162,118192,2703],{"class":172},[162,118194,34304],{"class":207},[162,118196,2714],{"class":172},[162,118198,104625],{"class":179},[162,118200,2316],{"class":168},[162,118202,118203],{"class":164,"line":35897},[162,118204,104632],{"class":168},[19,118206,106632],{},[153,118208,118210],{"className":26913,"code":118209,"language":26915,"meta":158,"style":158},"touch ch8_gym_env.py\n",[71,118211,118212],{"__ignoreMap":158},[162,118213,118214,118216],{"class":164,"line":165},[162,118215,104347],{"class":5082},[162,118217,118218],{"class":179}," ch8_gym_env.py\n",[19,118220,113505],{},[153,118222,118224],{"className":26913,"code":118223,"language":26915,"meta":158,"style":158},"python ch8_gym_env.py\n",[71,118225,118226],{"__ignoreMap":158},[162,118227,118228,118230],{"class":164,"line":165},[162,118229,157],{"class":5082},[162,118231,118218],{"class":179},[3284,118233,104635],{"id":104635},[19,118235,118236],{},"继承 Gymnasium 环境：",[153,118238,118240],{"className":155,"code":118239,"language":157,"meta":158,"style":158},"class ReacherEnv(gym.Env):\n",[71,118241,118242],{"__ignoreMap":158},[162,118243,118244,118246,118248,118250,118252,118254,118256],{"class":164,"line":165},[162,118245,17788],{"class":172},[162,118247,117117],{"class":5082},[162,118249,604],{"class":168},[162,118251,116600],{"class":5082},[162,118253,3847],{"class":168},[162,118255,117126],{"class":5082},[162,118257,33870],{"class":168},[19,118259,118260],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,118262,118263],{},"初始化模型：",[153,118265,118267],{"className":155,"code":118266,"language":157,"meta":158,"style":158},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[71,118268,118269,118283],{"__ignoreMap":158},[162,118270,118271,118273,118275,118277,118279,118281],{"class":164,"line":165},[162,118272,33907],{"class":207},[162,118274,117177],{"class":168},[162,118276,173],{"class":172},[162,118278,104476],{"class":168},[162,118280,104378],{"class":207},[162,118282,434],{"class":168},[162,118284,118285,118287,118289,118291,118293,118295],{"class":164,"line":197},[162,118286,33907],{"class":207},[162,118288,117192],{"class":168},[162,118290,173],{"class":172},[162,118292,117197],{"class":168},[162,118294,33907],{"class":207},[162,118296,117202],{"class":168},[19,118298,118299,118300,118302],{},"这和前面章节一样，只是现在放到了类的 ",[71,118301,33913],{}," 里。",[19,118304,118305],{},"缓存 site ID：",[153,118307,118309],{"className":155,"code":118308,"language":157,"meta":158,"style":158},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[71,118310,118311,118325],{"__ignoreMap":158},[162,118312,118313,118315,118317,118319,118321,118323],{"class":164,"line":165},[162,118314,33907],{"class":207},[162,118316,117213],{"class":168},[162,118318,173],{"class":172},[162,118320,117218],{"class":168},[162,118322,92619],{"class":207},[162,118324,434],{"class":168},[162,118326,118327,118329,118331,118333,118335,118337],{"class":164,"line":197},[162,118328,33907],{"class":207},[162,118330,117234],{"class":168},[162,118332,173],{"class":172},[162,118334,117218],{"class":168},[162,118336,92619],{"class":207},[162,118338,434],{"class":168},[19,118340,118341],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,118343,118344],{},"reset：",[153,118346,118348],{"className":155,"code":118347,"language":157,"meta":158,"style":158},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[71,118349,118350],{"__ignoreMap":158},[162,118351,118352,118354,118356,118358,118360,118362,118364,118366,118368,118370,118372,118374,118376,118378,118380,118382,118384],{"class":164,"line":165},[162,118353,35026],{"class":172},[162,118355,117582],{"class":5082},[162,118357,117585],{"class":168},[162,118359,3745],{"class":172},[162,118361,117590],{"class":168},[162,118363,3319],{"class":207},[162,118365,28201],{"class":172},[162,118367,42008],{"class":207},[162,118369,16659],{"class":172},[162,118371,42008],{"class":207},[162,118373,117603],{"class":168},[162,118375,117606],{"class":207},[162,118377,28201],{"class":172},[162,118379,42008],{"class":207},[162,118381,16659],{"class":172},[162,118383,42008],{"class":207},[162,118385,33870],{"class":168},[19,118387,118388,118390],{},[71,118389,73121],{}," 做四件事：",[1452,118392,118393,118396,118399,118402],{},[1455,118394,118395],{},"设置随机种子。",[1455,118397,118398],{},"重置 MuJoCo data。",[1455,118400,118401],{},"随机初始化关节角。",[1455,118403,118404],{},"返回初始观测和 info。",[19,118406,118407],{},"step：",[153,118409,118411],{"className":155,"code":118410,"language":157,"meta":158,"style":158},"def step(self, action):\n",[71,118412,118413],{"__ignoreMap":158},[162,118414,118415,118417,118419],{"class":164,"line":165},[162,118416,35026],{"class":172},[162,118418,117747],{"class":5082},[162,118420,117750],{"class":168},[19,118422,118423,118425],{},[71,118424,110195],{}," 做六件事：",[1452,118427,118428,118431,118437,118440,118443,118446],{},[1455,118429,118430],{},"检查并裁剪 action。",[1455,118432,118433,118434,3183],{},"写入 ",[71,118435,118436],{},"self.data.ctrl",[1455,118438,118439],{},"连续推进若干个 MuJoCo 物理步。",[1455,118441,118442],{},"计算新观测。",[1455,118444,118445],{},"计算奖励和结束条件。",[1455,118447,118448],{},"返回 Gymnasium 标准五元组。",[3284,118450,104771],{"id":104771},[153,118452,118454],{"className":155,"code":118453,"language":157,"meta":158,"style":158},"import gymnasium as gym\n",[71,118455,118456],{"__ignoreMap":158},[162,118457,118458,118460,118462,118464],{"class":164,"line":165},[162,118459,33478],{"class":172},[162,118461,116955],{"class":168},[162,118463,34466],{"class":172},[162,118465,116960],{"class":168},[19,118467,118468,118469,118471,118472,118475],{},"导入 Gymnasium，并起别名 ",[71,118470,116600],{},"。后面写 ",[71,118473,118474],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[153,118477,118479],{"className":155,"code":118478,"language":157,"meta":158,"style":158},"from gymnasium import spaces\n",[71,118480,118481],{"__ignoreMap":158},[162,118482,118483,118485,118487,118489],{"class":164,"line":165},[162,118484,33821],{"class":172},[162,118486,116955],{"class":168},[162,118488,33478],{"class":172},[162,118490,116987],{"class":168},[19,118492,118493,118494,118497],{},"导入空间定义工具。",[71,118495,118496],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[153,118499,118500],{"className":155,"code":118239,"language":157,"meta":158,"style":158},[71,118501,118502],{"__ignoreMap":158},[162,118503,118504,118506,118508,118510,118512,118514,118516],{"class":164,"line":165},[162,118505,17788],{"class":172},[162,118507,117117],{"class":5082},[162,118509,604],{"class":168},[162,118511,116600],{"class":5082},[162,118513,3847],{"class":168},[162,118515,117126],{"class":5082},[162,118517,33870],{"class":168},[19,118519,118520,118521,118524,118525,118527,118528,104082,118530,118532],{},"定义一个类，名字叫 ",[71,118522,118523],{},"ReacherEnv","。括号里的 ",[71,118526,118474],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[71,118529,73121],{},[71,118531,110195],{}," 这两个核心方法。",[153,118534,118536],{"className":155,"code":118535,"language":157,"meta":158,"style":158},"metadata = {\"render_modes\": []}\n",[71,118537,118538],{"__ignoreMap":158},[162,118539,118540,118543,118545,118547,118549],{"class":164,"line":165},[162,118541,118542],{"class":168},"metadata ",[162,118544,173],{"class":172},[162,118546,1477],{"class":168},[162,118548,117140],{"class":179},[162,118550,117143],{"class":168},[19,118552,118553],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[153,118555,118557],{"className":155,"code":118556,"language":157,"meta":158,"style":158},"def __init__(self) -> None:\n",[71,118558,118559],{"__ignoreMap":158},[162,118560,118561,118563,118565,118567,118569],{"class":164,"line":165},[162,118562,35026],{"class":172},[162,118564,33888],{"class":207},[162,118566,117156],{"class":168},[162,118568,98751],{"class":207},[162,118570,2316],{"class":168},[19,118572,118573,118575,118576,3183],{},[71,118574,33913],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[71,118577,118578],{},"env = ReacherEnv()",[153,118580,118582],{"className":155,"code":118581,"language":157,"meta":158,"style":158},"super().__init__()\n",[71,118583,118584],{"__ignoreMap":158},[162,118585,118586,118589,118591,118593],{"class":164,"line":165},[162,118587,118588],{"class":207},"super",[162,118590,20352],{"class":168},[162,118592,33913],{"class":207},[162,118594,1526],{"class":168},[19,118596,118597,118598,118600],{},"调用父类 ",[71,118599,118474],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[153,118602,118603],{"className":155,"code":118266,"language":157,"meta":158,"style":158},[71,118604,118605,118619],{"__ignoreMap":158},[162,118606,118607,118609,118611,118613,118615,118617],{"class":164,"line":165},[162,118608,33907],{"class":207},[162,118610,117177],{"class":168},[162,118612,173],{"class":172},[162,118614,104476],{"class":168},[162,118616,104378],{"class":207},[162,118618,434],{"class":168},[162,118620,118621,118623,118625,118627,118629,118631],{"class":164,"line":197},[162,118622,33907],{"class":207},[162,118624,117192],{"class":168},[162,118626,173],{"class":172},[162,118628,117197],{"class":168},[162,118630,33907],{"class":207},[162,118632,117202],{"class":168},[19,118634,118635,118636,118638,118639,104082,118642,118645],{},"把 MuJoCo 模型和状态保存到 ",[71,118637,33907],{}," 上。",[71,118640,118641],{},"self.model",[71,118643,118644],{},"self.data"," 表示这个环境对象自己的模型和状态。",[153,118647,118648],{"className":155,"code":118308,"language":157,"meta":158,"style":158},[71,118649,118650,118664],{"__ignoreMap":158},[162,118651,118652,118654,118656,118658,118660,118662],{"class":164,"line":165},[162,118653,33907],{"class":207},[162,118655,117213],{"class":168},[162,118657,173],{"class":172},[162,118659,117218],{"class":168},[162,118661,92619],{"class":207},[162,118663,434],{"class":168},[162,118665,118666,118668,118670,118672,118674,118676],{"class":164,"line":197},[162,118667,33907],{"class":207},[162,118669,117234],{"class":168},[162,118671,173],{"class":172},[162,118673,117218],{"class":168},[162,118675,92619],{"class":207},[162,118677,434],{"class":168},[19,118679,118680,118681,104082,118684,118687],{},"提前查好 tip 和 target 的 site ID。这样 ",[71,118682,118683],{},"_get_obs",[71,118685,118686],{},"_get_reward"," 里就不用每次按名字查找。",[153,118689,118691],{"className":155,"code":118690,"language":157,"meta":158,"style":158},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[71,118692,118693,118703,118713],{"__ignoreMap":158},[162,118694,118695,118697,118699,118701],{"class":164,"line":165},[162,118696,33907],{"class":207},[162,118698,116927],{"class":168},[162,118700,173],{"class":172},[162,118702,57497],{"class":207},[162,118704,118705,118707,118709,118711],{"class":164,"line":197},[162,118706,33907],{"class":207},[162,118708,117306],{"class":168},[162,118710,173],{"class":172},[162,118712,117311],{"class":207},[162,118714,118715,118717,118719,118721],{"class":164,"line":228},[162,118716,33907],{"class":207},[162,118718,116766],{"class":168},[162,118720,173],{"class":172},[162,118722,902],{"class":207},[19,118724,118725,118728,118729,118732,118733,118736],{},[71,118726,118727],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[71,118730,118731],{},"max_steps"," 是一个 episode 最多运行多少步。",[71,118734,118735],{},"steps"," 记录当前 episode 已经走了多少步。",[153,118738,118739],{"className":155,"code":116805,"language":157,"meta":158,"style":158},[71,118740,118741],{"__ignoreMap":158},[162,118742,118743,118745,118747,118749,118751,118753,118755,118757,118759,118761,118763,118765,118767,118769,118771,118773,118775,118777,118779,118781],{"class":164,"line":165},[162,118744,33907],{"class":207},[162,118746,116814],{"class":168},[162,118748,173],{"class":172},[162,118750,116819],{"class":168},[162,118752,116822],{"class":671},[162,118754,116825],{"class":172},[162,118756,105466],{"class":207},[162,118758,183],{"class":168},[162,118760,116832],{"class":671},[162,118762,173],{"class":172},[162,118764,105466],{"class":207},[162,118766,183],{"class":168},[162,118768,99028],{"class":671},[162,118770,173],{"class":172},[162,118772,604],{"class":168},[162,118774,213],{"class":207},[162,118776,116849],{"class":168},[162,118778,96565],{"class":671},[162,118780,173],{"class":172},[162,118782,116856],{"class":168},[19,118784,118785,118786,118789,118790,104082,118793,118796],{},"定义动作空间。",[71,118787,118788],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[71,118791,118792],{},"low=-1.0",[71,118794,118795],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[153,118798,118799],{"className":155,"code":116866,"language":157,"meta":158,"style":158},[71,118800,118801],{"__ignoreMap":158},[162,118802,118803,118805,118807,118809,118811,118813,118815,118817,118819,118821,118823,118825,118827,118829,118831,118833,118835,118837],{"class":164,"line":165},[162,118804,33907],{"class":207},[162,118806,116875],{"class":168},[162,118808,173],{"class":172},[162,118810,116819],{"class":168},[162,118812,116822],{"class":671},[162,118814,116825],{"class":172},[162,118816,116886],{"class":168},[162,118818,116832],{"class":671},[162,118820,173],{"class":172},[162,118822,116886],{"class":168},[162,118824,99028],{"class":671},[162,118826,173],{"class":172},[162,118828,604],{"class":168},[162,118830,1006],{"class":207},[162,118832,116849],{"class":168},[162,118834,96565],{"class":671},[162,118836,173],{"class":172},[162,118838,116856],{"class":168},[19,118840,118841,118842,118845,118846,118849],{},"定义观测空间。",[71,118843,118844],{},"shape=(10,)"," 表示观测是 10 个数。",[71,118847,118848],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[153,118851,118853],{"className":155,"code":118852,"language":157,"meta":158,"style":158},"def _get_obs(self) -> np.ndarray:\n",[71,118854,118855],{"__ignoreMap":158},[162,118856,118857,118859,118861],{"class":164,"line":165},[162,118858,35026],{"class":172},[162,118860,117416],{"class":5082},[162,118862,117419],{"class":168},[19,118864,118865,118866,118868],{},"定义内部函数，用来生成观测。函数名前面的 ",[71,118867,4264],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[153,118870,118872],{"className":155,"code":118871,"language":157,"meta":158,"style":158},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[71,118873,118874,118888],{"__ignoreMap":158},[162,118875,118876,118878,118880,118882,118884,118886],{"class":164,"line":165},[162,118877,114629],{"class":168},[162,118879,173],{"class":172},[162,118881,41948],{"class":207},[162,118883,117430],{"class":168},[162,118885,33907],{"class":207},[162,118887,117435],{"class":168},[162,118889,118890,118892,118894,118896,118898,118900],{"class":164,"line":197},[162,118891,2252],{"class":168},[162,118893,173],{"class":172},[162,118895,41948],{"class":207},[162,118897,117430],{"class":168},[162,118899,33907],{"class":207},[162,118901,117450],{"class":168},[19,118903,118904],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[153,118906,118908],{"className":155,"code":118907,"language":157,"meta":158,"style":158},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[71,118909,118910,118926],{"__ignoreMap":158},[162,118911,118912,118914,118916,118918,118920,118922,118924],{"class":164,"line":165},[162,118913,113915],{"class":168},[162,118915,173],{"class":172},[162,118917,117459],{"class":168},[162,118919,33907],{"class":207},[162,118921,117464],{"class":168},[162,118923,33907],{"class":207},[162,118925,117469],{"class":168},[162,118927,118928,118930],{"class":164,"line":197},[162,118929,20137],{"class":172},[162,118931,117476],{"class":168},[19,118933,118934,118935,118938,118939,118941],{},"拼接观测，并转换成 ",[71,118936,118937],{},"float32","。很多强化学习库默认使用 ",[71,118940,118937],{},"，所以这里主动转换。",[153,118943,118944],{"className":155,"code":118347,"language":157,"meta":158,"style":158},[71,118945,118946],{"__ignoreMap":158},[162,118947,118948,118950,118952,118954,118956,118958,118960,118962,118964,118966,118968,118970,118972,118974,118976,118978,118980],{"class":164,"line":165},[162,118949,35026],{"class":172},[162,118951,117582],{"class":5082},[162,118953,117585],{"class":168},[162,118955,3745],{"class":172},[162,118957,117590],{"class":168},[162,118959,3319],{"class":207},[162,118961,28201],{"class":172},[162,118963,42008],{"class":207},[162,118965,16659],{"class":172},[162,118967,42008],{"class":207},[162,118969,117603],{"class":168},[162,118971,117606],{"class":207},[162,118973,28201],{"class":172},[162,118975,42008],{"class":207},[162,118977,16659],{"class":172},[162,118979,42008],{"class":207},[162,118981,33870],{"class":168},[19,118983,118984,118985,118987,118988,118991],{},"定义 reset。",[71,118986,117626],{}," 用来控制随机数，保证实验可以复现。",[71,118989,118990],{},"options"," 用来接收额外配置，本章暂时不用。",[153,118993,118995],{"className":155,"code":118994,"language":157,"meta":158,"style":158},"super().reset(seed=seed)\n",[71,118996,118997],{"__ignoreMap":158},[162,118998,118999,119001,119003,119005,119007],{"class":164,"line":165},[162,119000,118588],{"class":207},[162,119002,117623],{"class":168},[162,119004,117626],{"class":671},[162,119006,173],{"class":172},[162,119008,117631],{"class":168},[19,119010,119011,119012,119015],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[71,119013,119014],{},"self.np_random"," 生成可复现的随机数。",[153,119017,119019],{"className":155,"code":119018,"language":157,"meta":158,"style":158},"mujoco.mj_resetData(self.model, self.data)\n",[71,119020,119021],{"__ignoreMap":158},[162,119022,119023,119026,119028,119030,119032],{"class":164,"line":165},[162,119024,119025],{"class":168},"mujoco.mj_resetData(",[162,119027,33907],{"class":207},[162,119029,117641],{"class":168},[162,119031,33907],{"class":207},[162,119033,117646],{"class":168},[19,119035,119036],{},"把 MuJoCo 状态重置到默认状态。",[153,119038,119040],{"className":155,"code":119039,"language":157,"meta":158,"style":158},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[71,119041,119042],{"__ignoreMap":158},[162,119043,119044,119046,119048,119050,119052,119054,119056,119058,119060,119062,119064,119066,119068,119070,119072,119074,119076],{"class":164,"line":165},[162,119045,33907],{"class":207},[162,119047,117657],{"class":168},[162,119049,173],{"class":172},[162,119051,41948],{"class":207},[162,119053,117664],{"class":168},[162,119055,116822],{"class":671},[162,119057,116825],{"class":172},[162,119059,89275],{"class":207},[162,119061,183],{"class":168},[162,119063,116832],{"class":671},[162,119065,173],{"class":172},[162,119067,89275],{"class":207},[162,119069,183],{"class":168},[162,119071,34577],{"class":671},[162,119073,173],{"class":172},[162,119075,33907],{"class":207},[162,119077,117689],{"class":168},[19,119079,118401,119080,119083,119084,119087,119088,119090],{},[71,119081,119082],{},"[:]"," 表示修改整个数组。",[71,119085,119086],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[71,119089,105213],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[153,119092,119094],{"className":155,"code":119093,"language":157,"meta":158,"style":158},"self.data.qvel[:] = 0.0\n",[71,119095,119096],{"__ignoreMap":158},[162,119097,119098,119100,119102,119104],{"class":164,"line":165},[162,119099,33907],{"class":207},[162,119101,117696],{"class":168},[162,119103,173],{"class":172},[162,119105,107822],{"class":207},[19,119107,119108],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[153,119110,119112],{"className":155,"code":119111,"language":157,"meta":158,"style":158},"self.steps = 0\nreturn self._get_obs(), {}\n",[71,119113,119114,119124],{"__ignoreMap":158},[162,119115,119116,119118,119120,119122],{"class":164,"line":165},[162,119117,33907],{"class":207},[162,119119,116766],{"class":168},[162,119121,173],{"class":172},[162,119123,902],{"class":207},[162,119125,119126,119128,119130],{"class":164,"line":197},[162,119127,20137],{"class":172},[162,119129,41948],{"class":207},[162,119131,117736],{"class":168},[19,119133,119134],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[153,119136,119137],{"className":155,"code":118410,"language":157,"meta":158,"style":158},[71,119138,119139],{"__ignoreMap":158},[162,119140,119141,119143,119145],{"class":164,"line":165},[162,119142,35026],{"class":172},[162,119144,117747],{"class":5082},[162,119146,117750],{"class":168},[19,119148,119149],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[153,119151,119153],{"className":155,"code":119152,"language":157,"meta":158,"style":158},"action = np.asarray(action, dtype=np.float32)\n",[71,119154,119155],{"__ignoreMap":158},[162,119156,119157,119159,119161,119163,119165,119167],{"class":164,"line":165},[162,119158,110503],{"class":168},[162,119160,173],{"class":172},[162,119162,117759],{"class":168},[162,119164,96565],{"class":671},[162,119166,173],{"class":172},[162,119168,116856],{"class":168},[19,119170,119171,119172,3183],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[71,119173,118937],{},[153,119175,119177],{"className":155,"code":119176,"language":157,"meta":158,"style":158},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[71,119178,119179],{"__ignoreMap":158},[162,119180,119181,119183,119185,119187,119189,119191,119193],{"class":164,"line":165},[162,119182,110503],{"class":168},[162,119184,173],{"class":172},[162,119186,110508],{"class":168},[162,119188,33907],{"class":207},[162,119190,117778],{"class":168},[162,119192,33907],{"class":207},[162,119194,117783],{"class":168},[19,119196,119197],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[153,119199,119201],{"className":155,"code":119200,"language":157,"meta":158,"style":158},"self.data.ctrl[:] = action\n",[71,119202,119203],{"__ignoreMap":158},[162,119204,119205,119207,119209,119211],{"class":164,"line":165},[162,119206,33907],{"class":207},[162,119208,117794],{"class":168},[162,119210,173],{"class":172},[162,119212,110531],{"class":168},[19,119214,119215],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[153,119217,119219],{"className":155,"code":119218,"language":157,"meta":158,"style":158},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[71,119220,119221,119237],{"__ignoreMap":158},[162,119222,119223,119225,119227,119229,119231,119233,119235],{"class":164,"line":165},[162,119224,808],{"class":172},[162,119226,104565],{"class":168},[162,119228,814],{"class":172},[162,119230,2647],{"class":207},[162,119232,604],{"class":168},[162,119234,33907],{"class":207},[162,119236,117815],{"class":168},[162,119238,119239,119242,119244,119246,119248],{"class":164,"line":197},[162,119240,119241],{"class":168},"    mujoco.mj_step(",[162,119243,33907],{"class":207},[162,119245,117641],{"class":168},[162,119247,33907],{"class":207},[162,119249,117646],{"class":168},[19,119251,119252,119253,119256,119257,119259,119260,3183],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[71,119254,119255],{},"frame_skip=5","，所以外部调用一次 ",[71,119258,116937],{},"，内部实际执行 5 次 ",[71,119261,104279],{},[153,119263,119265],{"className":155,"code":119264,"language":157,"meta":158,"style":158},"self.steps += 1\n",[71,119266,119267],{"__ignoreMap":158},[162,119268,119269,119271,119273,119275],{"class":164,"line":165},[162,119270,33907],{"class":207},[162,119272,116766],{"class":168},[162,119274,926],{"class":172},[162,119276,58768],{"class":207},[19,119278,119279],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[153,119281,119283],{"className":155,"code":119282,"language":157,"meta":158,"style":158},"obs = self._get_obs()\nreward = self._get_reward()\n",[71,119284,119285,119295],{"__ignoreMap":158},[162,119286,119287,119289,119291,119293],{"class":164,"line":165},[162,119288,113915],{"class":168},[162,119290,173],{"class":172},[162,119292,41948],{"class":207},[162,119294,117857],{"class":168},[162,119296,119297,119299,119301,119303],{"class":164,"line":197},[162,119298,114066],{"class":168},[162,119300,173],{"class":172},[162,119302,41948],{"class":207},[162,119304,117868],{"class":168},[19,119306,119307],{},"计算新的观测和奖励。",[153,119309,119311],{"className":155,"code":119310,"language":157,"meta":158,"style":158},"dist = float(np.linalg.norm(tip - target))\n",[71,119312,119313],{"__ignoreMap":158},[162,119314,119315,119317,119319,119321,119323,119325],{"class":164,"line":165},[162,119316,114656],{"class":168},[162,119318,173],{"class":172},[162,119320,112858],{"class":207},[162,119322,117911],{"class":168},[162,119324,353],{"class":172},[162,119326,117916],{"class":168},[19,119328,119329],{},"计算末端到目标的距离，并转换成 Python float。",[153,119331,119332],{"className":155,"code":116737,"language":157,"meta":158,"style":158},[71,119333,119334,119346],{"__ignoreMap":158},[162,119335,119336,119338,119340,119342,119344],{"class":164,"line":165},[162,119337,116744],{"class":168},[162,119339,173],{"class":172},[162,119341,116749],{"class":168},[162,119343,4187],{"class":172},[162,119345,116754],{"class":207},[162,119347,119348,119350,119352,119354,119356,119358,119360],{"class":164,"line":197},[162,119349,116759],{"class":168},[162,119351,173],{"class":172},[162,119353,41948],{"class":207},[162,119355,116766],{"class":168},[162,119357,3038],{"class":172},[162,119359,41948],{"class":207},[162,119361,116773],{"class":168},[19,119363,119364],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[153,119366,119368],{"className":155,"code":119367,"language":157,"meta":158,"style":158},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[71,119369,119370,119382],{"__ignoreMap":158},[162,119371,119372,119374,119376,119378,119380],{"class":164,"line":165},[162,119373,1018],{"class":168},[162,119375,173],{"class":172},[162,119377,1477],{"class":168},[162,119379,117962],{"class":179},[162,119381,117965],{"class":168},[162,119383,119384,119386],{"class":164,"line":197},[162,119385,20137],{"class":172},[162,119387,117972],{"class":168},[19,119389,119390,119393],{},[71,119391,119392],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[153,119395,119397],{"className":155,"code":119396,"language":157,"meta":158,"style":158},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[71,119398,119399,119408],{"__ignoreMap":158},[162,119400,119401,119404,119406],{"class":164,"line":165},[162,119402,119403],{"class":168},"env ",[162,119405,173],{"class":172},[162,119407,118002],{"class":168},[162,119409,119410,119412,119414,119416,119418,119420,119422],{"class":164,"line":197},[162,119411,116460],{"class":168},[162,119413,173],{"class":172},[162,119415,118012],{"class":168},[162,119417,117626],{"class":671},[162,119419,173],{"class":172},[162,119421,312],{"class":207},[162,119423,434],{"class":168},[19,119425,119426,119427,119430],{},"创建环境并重置。",[71,119428,119429],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[153,119432,119434],{"className":155,"code":119433,"language":157,"meta":158,"style":158},"action = env.action_space.sample()\n",[71,119435,119436],{"__ignoreMap":158},[162,119437,119438,119440,119442],{"class":164,"line":165},[162,119439,110503],{"class":168},[162,119441,173],{"class":172},[162,119443,118081],{"class":168},[19,119445,119446],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,119448,105379],{"id":105378},[19,119450,108545],{},[153,119452,119455],{"className":119453,"code":119454,"language":8295,"meta":158},[8293],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[71,119456,119454],{"__ignoreMap":158},[19,119458,119459],{},"这个环境已经具备强化学习环境的基本结构。",[19,119461,119462],{},"主函数里使用随机动作：",[153,119464,119465],{"className":155,"code":119433,"language":157,"meta":158,"style":158},[71,119466,119467],{"__ignoreMap":158},[162,119468,119469,119471,119473],{"class":164,"line":165},[162,119470,110503],{"class":168},[162,119472,173],{"class":172},[162,119474,118081],{"class":168},[19,119476,119477],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,119479,105411],{"id":105410},[1452,119481,119482,119485,119491,119500,119509,119518,119524],{},[1455,119483,119484],{},"运行程序。",[1455,119486,119487,119488,3183],{},"确认 ",[71,119489,119490],{},"obs.shape == (10,)",[1455,119492,114242,119493,119496,119497,3183],{},[71,119494,119495],{},"env.action_space","，应类似 ",[71,119498,119499],{},"Box(-1.0, 1.0, (2,), float32)",[1455,119501,108646,119502,119505,119506,3183],{},[71,119503,119504],{},"self.max_steps = 10","，确认环境会更快 ",[71,119507,119508],{},"truncated=True",[1455,119510,105474,119511,105477,119514,119517],{},[71,119512,119513],{},"terminated = dist \u003C 0.05",[71,119515,119516],{},"dist \u003C 0.2","，观察是否更容易结束。",[1455,119519,105474,119520,119523],{},[71,119521,119522],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[1455,119525,119526,119527,119529,119530,119533],{},"在 ",[71,119528,119392],{}," 里加入 ",[71,119531,119532],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,119535,105516],{"id":105515},[3284,119537,119539],{"id":119538},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,119541,119542,119543,119545],{},"Gymnasium 的 ",[71,119544,110195],{}," 返回 5 个值:",[153,119547,119549],{"className":155,"code":119548,"language":157,"meta":158,"style":158},"obs, reward, terminated, truncated, info\n",[71,119550,119551],{"__ignoreMap":158},[162,119552,119553],{"class":164,"line":165},[162,119554,119548],{"class":168},[19,119556,119557],{},"不是旧 Gym 的 4 个值。",[3284,119559,119561,119564],{"id":119560},"datactrl-action-维度错误",[71,119562,119563],{},"data.ctrl[:] = action"," 维度错误",[19,119566,105586],{},[153,119568,119570],{"className":155,"code":119569,"language":157,"meta":158,"style":158},"print(self.model.nu)\nprint(action.shape)\n",[71,119571,119572,119583],{"__ignoreMap":158},[162,119573,119574,119576,119578,119580],{"class":164,"line":165},[162,119575,306],{"class":207},[162,119577,604],{"class":168},[162,119579,33907],{"class":207},[162,119581,119582],{"class":168},".model.nu)\n",[162,119584,119585,119587],{"class":164,"line":197},[162,119586,306],{"class":207},[162,119588,119589],{"class":168},"(action.shape)\n",[19,119591,119592],{},"两者必须匹配。",[3284,119594,119596],{"id":119595},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,119598,105525],{},[153,119600,119602],{"className":155,"code":119601,"language":157,"meta":158,"style":158},"mujoco.mj_forward(self.model, self.data)\n",[71,119603,119604],{"__ignoreMap":158},[162,119605,119606,119609,119611,119613,119615],{"class":164,"line":165},[162,119607,119608],{"class":168},"mujoco.mj_forward(",[162,119610,33907],{"class":207},[162,119612,117641],{"class":168},[162,119614,33907],{"class":207},[162,119616,117646],{"class":168},[3284,119618,119620,119622],{"id":119619},"observation_space-维度和-obs-不一致",[71,119621,116660],{}," 维度和 obs 不一致",[19,119624,105638],{},[153,119626,119628],{"className":155,"code":119627,"language":157,"meta":158,"style":158},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[71,119629,119630,119640,119647],{"__ignoreMap":158},[162,119631,119632,119634,119636,119638],{"class":164,"line":165},[162,119633,113915],{"class":168},[162,119635,173],{"class":172},[162,119637,41948],{"class":207},[162,119639,117857],{"class":168},[162,119641,119642,119644],{"class":164,"line":197},[162,119643,306],{"class":207},[162,119645,119646],{"class":168},"(obs.shape)\n",[162,119648,119649,119651,119653,119655],{"class":164,"line":228},[162,119650,306],{"class":207},[162,119652,604],{"class":168},[162,119654,33907],{"class":207},[162,119656,119657],{"class":168},".observation_space.shape)\n",[19,119659,119660],{},"两者必须一致。本章观测是：",[153,119662,119665],{"className":119663,"code":119664,"language":8295,"meta":158},[8293],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[71,119666,119664],{"__ignoreMap":158},[3284,119668,119670],{"id":119669},"action-超过范围","action 超过范围",[19,119672,119673],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[153,119675,119676],{"className":155,"code":119176,"language":157,"meta":158,"style":158},[71,119677,119678],{"__ignoreMap":158},[162,119679,119680,119682,119684,119686,119688,119690,119692],{"class":164,"line":165},[162,119681,110503],{"class":168},[162,119683,173],{"class":172},[162,119685,110508],{"class":168},[162,119687,33907],{"class":207},[162,119689,117778],{"class":168},[162,119691,33907],{"class":207},[162,119693,117783],{"class":168},[19,119695,119696,119697,3183],{},"这能避免无效动作直接写入 ",[71,119698,104140],{},[3284,119700,119702],{"id":119701},"忘记返回-info","忘记返回 info",[19,119704,119542,119705,104082,119707,119709],{},[71,119706,73121],{},[71,119708,110195],{}," 都会返回 info：",[153,119711,119712],{"className":155,"code":116453,"language":157,"meta":158,"style":158},[71,119713,119714,119722],{"__ignoreMap":158},[162,119715,119716,119718,119720],{"class":164,"line":165},[162,119717,116460],{"class":168},[162,119719,173],{"class":172},[162,119721,116465],{"class":168},[162,119723,119724,119726,119728],{"class":164,"line":197},[162,119725,116470],{"class":168},[162,119727,173],{"class":172},[162,119729,116475],{"class":168},[19,119731,119732,119733,3183],{},"即使暂时没有额外信息，也返回 ",[71,119734,1532],{},[14,119736,119738],{"id":119737},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,119740,119741],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[1452,119743,119744,119747,119750,119753,119756,119759],{},[1455,119745,119746],{},"更稳定的 reward。",[1455,119748,119749],{},"合理的 episode 长度。",[1455,119751,119752],{},"可重复的随机目标采样。",[1455,119754,119755],{},"render 接口。",[1455,119757,119758],{},"环境注册代码。",[1455,119760,119761],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,119763,119764],{},"如果只是自己写训练循环，最小形式是：",[153,119766,119768],{"className":155,"code":119767,"language":157,"meta":158,"style":158},"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",[71,119769,119770,119778,119794,119798,119814,119823,119832,119842],{"__ignoreMap":158},[162,119771,119772,119774,119776],{"class":164,"line":165},[162,119773,119403],{"class":168},[162,119775,173],{"class":172},[162,119777,118002],{"class":168},[162,119779,119780,119782,119784,119786,119788,119790,119792],{"class":164,"line":197},[162,119781,116460],{"class":168},[162,119783,173],{"class":172},[162,119785,118012],{"class":168},[162,119787,117626],{"class":671},[162,119789,173],{"class":172},[162,119791,312],{"class":207},[162,119793,434],{"class":168},[162,119795,119796],{"class":164,"line":228},[162,119797,301],{"emptyLinePlaceholder":300},[162,119799,119800,119802,119804,119806,119808,119810,119812],{"class":164,"line":252},[162,119801,808],{"class":172},[162,119803,104565],{"class":168},[162,119805,814],{"class":172},[162,119807,2647],{"class":207},[162,119809,604],{"class":168},[162,119811,9516],{"class":207},[162,119813,33870],{"class":168},[162,119815,119816,119819,119821],{"class":164,"line":328},[162,119817,119818],{"class":168},"    action ",[162,119820,173],{"class":172},[162,119822,118081],{"class":168},[162,119824,119825,119828,119830],{"class":164,"line":466},[162,119826,119827],{"class":168},"    obs, reward, terminated, truncated, info ",[162,119829,173],{"class":172},[162,119831,116475],{"class":168},[162,119833,119834,119836,119838,119840],{"class":164,"line":471},[162,119835,2283],{"class":172},[162,119837,118147],{"class":168},[162,119839,118150],{"class":172},[162,119841,118153],{"class":168},[162,119843,119844,119847,119849],{"class":164,"line":687},[162,119845,119846],{"class":168},"        obs, info ",[162,119848,173],{"class":172},[162,119850,116465],{"class":168},[14,119852,119854],{"id":119853},"_9本章小结","9.本章小结",[19,119856,119857],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[153,119859,119862],{"className":119860,"code":119861,"language":8295,"meta":158},[8293],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[71,119863,119861],{"__ignoreMap":158},[19,119865,119866],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[3219,119868,119869],{},"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":158,"searchDepth":197,"depth":197,"links":119871},[119872,119873,119874,119881,119885,119886,119887,119897,119898],{"id":103710,"depth":197,"text":103711},{"id":103833,"depth":197,"text":103834},{"id":104108,"depth":197,"text":104109,"children":119875},[119876,119878,119880],{"id":116684,"depth":228,"text":119877},"terminated 和 truncated 的区别",{"id":116787,"depth":228,"text":119879},"observation_space 和 action_space",{"id":116914,"depth":228,"text":116915},{"id":104316,"depth":197,"text":104317,"children":119882},[119883,119884],{"id":104635,"depth":228,"text":104635},{"id":104771,"depth":228,"text":104771},{"id":105378,"depth":197,"text":105379},{"id":105410,"depth":197,"text":105411},{"id":105515,"depth":197,"text":105516,"children":119888},[119889,119890,119892,119893,119895,119896],{"id":119538,"depth":228,"text":119539},{"id":119560,"depth":228,"text":119891},"data.ctrl[:] = action 维度错误",{"id":119595,"depth":228,"text":119596},{"id":119619,"depth":228,"text":119894},"observation_space 维度和 obs 不一致",{"id":119669,"depth":228,"text":119670},{"id":119701,"depth":228,"text":119702},{"id":119737,"depth":197,"text":119738},{"id":119853,"depth":197,"text":119854},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":116437,"description":158},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":119905,"title":119906,"body":119907,"description":120330,"extension":3242,"meta":120331,"navigation":300,"path":120332,"seo":120333,"stem":120334,"__hash__":120335},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":119908,"toc":120320},[119909,119913,119916,119919,119939,119945,119951,119961,119964,119967,119987,119990,119994,119997,120003,120006,120020,120023,120026,120100,120103,120109,120112,120135,120138,120188,120191,120197,120200,120203,120206,120225,120228,120234,120237,120240,120243,120263,120266,120269,120272,120317],[10,119910,119912],{"id":119911},"mujoco-学习","MuJoCo 学习",[19,119914,119915],{},"初版",[19,119917,119918],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[1452,119920,119921,119924,119927,119936],{},[1455,119922,119923],{},"MuJoCo 模型文件在描述什么。",[1455,119925,119926],{},"Python 代码怎样读取和推进仿真。",[1455,119928,119929,3513,119931,3513,119933,119935],{},[71,119930,107092],{},[71,119932,107422],{},[71,119934,107425],{}," 这些数组为什么重要。",[1455,119937,119938],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,119940,119941,119942,119944],{},"默认环境为 Fedora 44、Python >= 3.10、",[71,119943,104091],{}," 官方 Python bindings。",[19,119946,119947,119948,119950],{},"注意：本文禁止使用 ",[71,119949,104076],{},"。所有示例均使用：",[153,119952,119953],{"className":155,"code":104641,"language":157,"meta":158,"style":158},[71,119954,119955],{"__ignoreMap":158},[162,119956,119957,119959],{"class":164,"line":165},[162,119958,33478],{"class":172},[162,119960,104365],{"class":168},[14,119962,119963],{"id":119963},"适合谁阅读",[19,119965,119966],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[1452,119968,119969,119972,119975,119978],{},[1455,119970,119971],{},"没学过 MuJoCo，只会一点 Python。",[1455,119973,119974],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[1455,119976,119977],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[1455,119979,119980,119981,119983,119984,119986],{},"以前接触过 ",[71,119982,104076],{},"，现在想迁移到官方 ",[71,119985,104085],{}," Python bindings。",[19,119988,119989],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,119991,119993],{"id":119992},"mujoco-到底是什么","MuJoCo 到底是什么",[19,119995,119996],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[153,119998,120001],{"className":119999,"code":120000,"language":8295,"meta":158},[8293],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[71,120002,120000],{"__ignoreMap":158},[19,120004,120005],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[1452,120007,120008,120011,120014,120017],{},[1455,120009,120010],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[1455,120012,120013],{},"快速测试控制算法，不必一开始就上真实机器人。",[1455,120015,120016],{},"生成强化学习环境。",[1455,120018,120019],{},"采集状态、动作、图像、奖励等训练数据。",[14,120021,120022],{"id":120022},"学习前的心智模型",[19,120024,120025],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[26,120027,120028,120040],{},[29,120029,120030],{},[32,120031,120032,120035,120038],{},[35,120033,120034],{"align":26827},"部分",[35,120036,120037],{"align":26827},"负责什么",[35,120039,24278],{"align":26827},[51,120041,120042,120053,120065,120077,120089],{},[32,120043,120044,120047,120050],{},[56,120045,120046],{"align":26827},"MJCF XML",[56,120048,120049],{"align":26827},"定义世界和机器人结构",[56,120051,120052],{"align":26827},"地面、盒子、关节、电机、摄像头",[32,120054,120055,120059,120062],{},[56,120056,120057],{"align":26827},[71,120058,103773],{},[56,120060,120061],{"align":26827},"编译后的静态模型",[56,120063,120064],{"align":26827},"有几个关节、有几个电机、时间步长是多少",[32,120066,120067,120071,120074],{},[56,120068,120069],{"align":26827},[71,120070,103783],{},[56,120072,120073],{"align":26827},"运行中的动态状态",[56,120075,120076],{"align":26827},"当前时间、位置、速度、电机输入",[32,120078,120079,120083,120086],{},[56,120080,120081],{"align":26827},[71,120082,104279],{},[56,120084,120085],{"align":26827},"推进一步物理仿真",[56,120087,120088],{"align":26827},"根据重力、力、碰撞更新状态",[32,120090,120091,120094,120097],{},[56,120092,120093],{"align":26827},"Viewer \u002F Renderer",[56,120095,120096],{"align":26827},"把仿真显示出来",[56,120098,120099],{"align":26827},"打开窗口或保存图片",[19,120101,120102],{},"一句话总结：",[153,120104,120107],{"className":120105,"code":120106,"language":8295,"meta":158},[8293],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[71,120108,120106],{"__ignoreMap":158},[19,120110,120111],{},"参考来源：",[4279,120113,120114,120121,120128],{},[1455,120115,120116,120117],{},"MuJoCo Python 官方文档：",[3538,120118,120119],{"href":120119,"rel":120120},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[26956],[1455,120122,120123,120124],{},"MuJoCo XML Reference：",[3538,120125,120126],{"href":120126,"rel":120127},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[26956],[1455,120129,120130,120131],{},"MuJoCo Overview：",[3538,120132,120133],{"href":120133,"rel":120134},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[26956],[14,120136,120137],{"id":120137},"章节目录",[1452,120139,120140,120146,120152,120158,120164,120170,120176,120182],{},[1455,120141,120142],{},[3538,120143,120145],{"href":120144},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[1455,120147,120148],{},[3538,120149,120151],{"href":120150},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[1455,120153,120154],{},[3538,120155,120157],{"href":120156},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[1455,120159,120160],{},[3538,120161,120163],{"href":120162},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[1455,120165,120166],{},[3538,120167,120169],{"href":120168},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[1455,120171,120172],{},[3538,120173,120175],{"href":120174},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[1455,120177,120178],{},[3538,120179,120181],{"href":120180},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[1455,120183,120184],{},[3538,120185,120187],{"href":120186},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,120189,120190],{"id":120190},"推荐学习路线",[153,120192,120195],{"className":120193,"code":120194,"language":8295,"meta":158},[8293],"环境安装\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",[71,120196,120194],{"__ignoreMap":158},[19,120198,120199],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,120201,120202],{"id":120202},"建议的目录结构",[19,120204,120205],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[153,120207,120209],{"className":26913,"code":120208,"language":26915,"meta":158,"style":158},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[71,120210,120211,120219],{"__ignoreMap":158},[162,120212,120213,120215,120217],{"class":164,"line":165},[162,120214,104330],{"class":5082},[162,120216,32304],{"class":207},[162,120218,104335],{"class":179},[162,120220,120221,120223],{"class":164,"line":197},[162,120222,104340],{"class":207},[162,120224,104335],{"class":179},[19,120226,120227],{},"每一章的代码都单独保存：",[153,120229,120232],{"className":120230,"code":120231,"language":8295,"meta":158},[8293],"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",[71,120233,120231],{"__ignoreMap":158},[19,120235,120236],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,120238,120239],{"id":120239},"学习方法",[19,120241,120242],{},"每章建议按这个顺序操作：",[1452,120244,120245,120248,120251,120254,120257,120260],{},[1455,120246,120247],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[1455,120249,120250],{},"复制最小可运行代码，保存成指定文件。",[1455,120252,120253],{},"运行代码，确认没有报错。",[1455,120255,120256],{},"对照“运行结果说明”理解输出。",[1455,120258,120259],{},"做“验证步骤”，主动改一两个参数。",[1455,120261,120262],{},"遇到报错先看“常见错误与解决方案”。",[19,120264,120265],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,120267,120268],{"id":120268},"全局排错顺序",[19,120270,120271],{},"遇到问题时，按下面顺序查：",[1452,120273,120274,120280,120286,120291,120294,120297,120304,120314],{},[1455,120275,120276,120277],{},"Python 环境是否激活：",[71,120278,120279],{},"which python",[1455,120281,120282,120283],{},"MuJoCo 是否能导入：",[71,120284,120285],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[1455,120287,120288,120289],{},"是否误装了 ",[71,120290,104076],{},[1455,120292,120293],{},"XML 标签是否闭合、属性是否拼写正确",[1455,120295,120296],{},"actuator 引用的 joint 名字是否存在",[1455,120298,120299,120301,120302],{},[71,120300,104140],{}," 的长度是否等于 ",[71,120303,105221],{},[1455,120305,108646,120306,85604,120308,120310,120311],{},[71,120307,107092],{},[71,120309,107422],{}," 后是否调用了 ",[71,120312,120313],{},"mujoco.mj_forward",[1455,120315,120316],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[3219,120318,120319],{},"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":158,"searchDepth":197,"depth":197,"links":120321},[120322,120323,120324,120325,120326,120327,120328,120329],{"id":119963,"depth":197,"text":119963},{"id":119992,"depth":197,"text":119993},{"id":120022,"depth":197,"text":120022},{"id":120137,"depth":197,"text":120137},{"id":120190,"depth":197,"text":120190},{"id":120202,"depth":197,"text":120202},{"id":120239,"depth":197,"text":120239},{"id":120268,"depth":197,"text":120268},"仿真搭建。",{"category":26469},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":119906,"description":120330},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":120337,"title":120338,"body":120339,"description":3241,"extension":3242,"meta":120794,"navigation":300,"path":120795,"seo":120796,"stem":120797,"__hash__":120798},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":120340,"toc":120792},[120341,120344,120347,120353,120789],[10,120342,120338],{"id":120343},"_1-最常用的基本操作更新",[19,120345,120346],{},"装linux系统教程：",[19,120348,120349],{},[3538,120350,120351],{"href":120351,"rel":120352},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[26956],[153,120354,120358],{"className":120355,"code":120356,"language":120357,"meta":158,"style":158},"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",[71,120359,120360,120365,120370,120379,120384,120393,120398,120418,120423,120434,120439,120448,120453,120481,120486,120505,120510,120529,120533,120538,120554,120558,120563,120593,120597,120602,120618,120622,120627,120642,120646,120651,120667,120671,120676,120688,120700,120704,120709,120726,120730,120735,120753,120757,120762,120771,120775,120780],{"__ignoreMap":158},[162,120361,120362],{"class":164,"line":165},[162,120363,120364],{"class":361},"#更新相关的知识\n",[162,120366,120367],{"class":164,"line":197},[162,120368,120369],{"class":361},"# 更新软件包列表（从服务器获取最新软件信息）\n",[162,120371,120372,120374,120377],{"class":164,"line":228},[162,120373,27668],{"class":5082},[162,120375,120376],{"class":179}," apt",[162,120378,29332],{"class":179},[162,120380,120381],{"class":164,"line":252},[162,120382,120383],{"class":361},"# 升级所有可更新的软件包（不删除旧包）\n",[162,120385,120386,120388,120390],{"class":164,"line":328},[162,120387,27668],{"class":5082},[162,120389,120376],{"class":179},[162,120391,120392],{"class":179}," upgrade\n",[162,120394,120395],{"class":164,"line":466},[162,120396,120397],{"class":361},"#更新和升级软件包\n",[162,120399,120400,120402,120404,120407,120409,120411,120413,120416],{"class":164,"line":471},[162,120401,27668],{"class":5082},[162,120403,120376],{"class":179},[162,120405,120406],{"class":179}," update",[162,120408,29280],{"class":168},[162,120410,27668],{"class":5082},[162,120412,120376],{"class":179},[162,120414,120415],{"class":179}," upgrade",[162,120417,104045],{"class":207},[162,120419,120420],{"class":164,"line":687},[162,120421,120422],{"class":361},"#列出可更新的软件包及版本信息\n",[162,120424,120425,120428,120431],{"class":164,"line":692},[162,120426,120427],{"class":5082},"apt",[162,120429,120430],{"class":179}," list",[162,120432,120433],{"class":207}," --upgradable\n",[162,120435,120436],{"class":164,"line":698},[162,120437,120438],{"class":361},"#彻底升级（处理依赖关系，可能删除旧包）\n",[162,120440,120441,120443,120445],{"class":164,"line":2955},[162,120442,27668],{"class":5082},[162,120444,120376],{"class":179},[162,120446,120447],{"class":179}," full-upgrade\n",[162,120449,120450],{"class":164,"line":2960},[162,120451,120452],{"class":361},"#设置指定版本\n",[162,120454,120455,120457,120459,120461,120463,120466,120468,120470,120472,120474,120477,120479],{"class":164,"line":2971},[162,120456,27668],{"class":5082},[162,120458,120376],{"class":179},[162,120460,26925],{"class":179},[162,120462,31990],{"class":172},[162,120464,120465],{"class":179},"package_nam",[162,120467,3384],{"class":168},[162,120469,3000],{"class":172},[162,120471,173],{"class":179},[162,120473,4187],{"class":172},[162,120475,120476],{"class":179},"version_numbe",[162,120478,3955],{"class":168},[162,120480,54380],{"class":172},[162,120482,120483],{"class":164,"line":2984},[162,120484,120485],{"class":361},"#只安装软件包不升级\n",[162,120487,120488,120490,120492,120494,120496,120498,120500,120502],{"class":164,"line":2989},[162,120489,27668],{"class":5082},[162,120491,120376],{"class":179},[162,120493,26925],{"class":179},[162,120495,31990],{"class":172},[162,120497,120465],{"class":179},[162,120499,3384],{"class":168},[162,120501,3000],{"class":172},[162,120503,120504],{"class":207}," --no-upgrade\n",[162,120506,120507],{"class":164,"line":3011},[162,120508,120509],{"class":361},"#只升级，不存在就不安装\n",[162,120511,120512,120514,120516,120518,120520,120522,120524,120526],{"class":164,"line":3022},[162,120513,27668],{"class":5082},[162,120515,120376],{"class":179},[162,120517,26925],{"class":179},[162,120519,31990],{"class":172},[162,120521,120465],{"class":179},[162,120523,3384],{"class":168},[162,120525,3000],{"class":172},[162,120527,120528],{"class":207}," --only-upgrade\n",[162,120530,120531],{"class":164,"line":3027},[162,120532,301],{"emptyLinePlaceholder":300},[162,120534,120535],{"class":164,"line":3046},[162,120536,120537],{"class":361},"#安装指定的软件命令\n",[162,120539,120540,120542,120544,120546,120548,120550,120552],{"class":164,"line":3052},[162,120541,27668],{"class":5082},[162,120543,120376],{"class":179},[162,120545,26925],{"class":179},[162,120547,31990],{"class":172},[162,120549,120465],{"class":179},[162,120551,3384],{"class":168},[162,120553,54380],{"class":172},[162,120555,120556],{"class":164,"line":3057},[162,120557,301],{"emptyLinePlaceholder":300},[162,120559,120560],{"class":164,"line":3072},[162,120561,120562],{"class":361},"#安装多个软件包\n",[162,120564,120565,120567,120569,120571,120573,120576,120579,120581,120583,120586,120588,120590],{"class":164,"line":3077},[162,120566,27668],{"class":5082},[162,120568,120376],{"class":179},[162,120570,26925],{"class":179},[162,120572,31990],{"class":172},[162,120574,120575],{"class":179},"package_",[162,120577,120578],{"class":172},"1>",[162,120580,31990],{"class":172},[162,120582,120575],{"class":179},[162,120584,120585],{"class":172},"2>",[162,120587,31990],{"class":172},[162,120589,120575],{"class":179},[162,120591,120592],{"class":172},"3>\n",[162,120594,120595],{"class":164,"line":3100},[162,120596,301],{"emptyLinePlaceholder":300},[162,120598,120599],{"class":164,"line":3140},[162,120600,120601],{"class":361},"#更新指定的软件命令\n",[162,120603,120604,120606,120608,120610,120612,120614,120616],{"class":164,"line":4878},[162,120605,27668],{"class":5082},[162,120607,120376],{"class":179},[162,120609,120406],{"class":179},[162,120611,31990],{"class":172},[162,120613,120465],{"class":179},[162,120615,3384],{"class":168},[162,120617,54380],{"class":172},[162,120619,120620],{"class":164,"line":4883},[162,120621,301],{"emptyLinePlaceholder":300},[162,120623,120624],{"class":164,"line":4897},[162,120625,120626],{"class":361},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[162,120628,120629,120631,120634,120636,120638,120640],{"class":164,"line":4902},[162,120630,120427],{"class":5082},[162,120632,120633],{"class":179}," show",[162,120635,31990],{"class":172},[162,120637,120465],{"class":179},[162,120639,3384],{"class":168},[162,120641,54380],{"class":172},[162,120643,120644],{"class":164,"line":5694},[162,120645,301],{"emptyLinePlaceholder":300},[162,120647,120648],{"class":164,"line":5708},[162,120649,120650],{"class":361},"#删除软件包命令\n",[162,120652,120653,120655,120657,120659,120661,120663,120665],{"class":164,"line":5716},[162,120654,27668],{"class":5082},[162,120656,120376],{"class":179},[162,120658,29169],{"class":179},[162,120660,31990],{"class":172},[162,120662,120465],{"class":179},[162,120664,3384],{"class":168},[162,120666,54380],{"class":172},[162,120668,120669],{"class":164,"line":5721},[162,120670,301],{"emptyLinePlaceholder":300},[162,120672,120673],{"class":164,"line":5727},[162,120674,120675],{"class":361},"# 清理旧版本和缓存（释放磁盘空间）\n",[162,120677,120678,120680,120682,120685],{"class":164,"line":5733},[162,120679,27668],{"class":5082},[162,120681,120376],{"class":179},[162,120683,120684],{"class":179}," autoremove",[162,120686,120687],{"class":361},"  # 删除不再需要的依赖和库文件\n",[162,120689,120690,120692,120694,120697],{"class":164,"line":5738},[162,120691,27668],{"class":5082},[162,120693,120376],{"class":179},[162,120695,120696],{"class":179}," clean",[162,120698,120699],{"class":361},"       # 清理下载的缓存包\n",[162,120701,120702],{"class":164,"line":11052},[162,120703,301],{"emptyLinePlaceholder":300},[162,120705,120706],{"class":164,"line":11076},[162,120707,120708],{"class":361},"#移除软件包及配置文件\n",[162,120710,120711,120713,120715,120718,120720,120722,120724],{"class":164,"line":11081},[162,120712,27668],{"class":5082},[162,120714,120376],{"class":179},[162,120716,120717],{"class":179}," purge",[162,120719,31990],{"class":172},[162,120721,120465],{"class":179},[162,120723,3384],{"class":168},[162,120725,54380],{"class":172},[162,120727,120728],{"class":164,"line":11087},[162,120729,301],{"emptyLinePlaceholder":300},[162,120731,120732],{"class":164,"line":11114},[162,120733,120734],{"class":361},"#查找软件包命令\n",[162,120736,120737,120739,120741,120744,120746,120749,120751],{"class":164,"line":11119},[162,120738,27668],{"class":5082},[162,120740,120376],{"class":179},[162,120742,120743],{"class":179}," search",[162,120745,31990],{"class":172},[162,120747,120748],{"class":179},"keywor",[162,120750,3611],{"class":168},[162,120752,54380],{"class":172},[162,120754,120755],{"class":164,"line":11125},[162,120756,301],{"emptyLinePlaceholder":300},[162,120758,120759],{"class":164,"line":11137},[162,120760,120761],{"class":361},"#列出所有已安装的包\n",[162,120763,120764,120766,120768],{"class":164,"line":11149},[162,120765,120427],{"class":5082},[162,120767,120430],{"class":179},[162,120769,120770],{"class":207}," --installed\n",[162,120772,120773],{"class":164,"line":11161},[162,120774,301],{"emptyLinePlaceholder":300},[162,120776,120777],{"class":164,"line":12816},[162,120778,120779],{"class":361},"#列出所有已安装的包的版本信息\n",[162,120781,120782,120784,120786],{"class":164,"line":12841},[162,120783,120427],{"class":5082},[162,120785,120430],{"class":179},[162,120787,120788],{"class":207}," --all-versions\n",[3219,120790,120791],{},"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":158,"searchDepth":197,"depth":197,"links":120793},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":120338,"description":3241},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":120800,"title":120801,"body":120802,"description":3241,"extension":3242,"meta":121543,"navigation":300,"path":121544,"seo":121545,"stem":121546,"__hash__":121547},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":120803,"toc":121530},[120804,120807,120811,120814,120820,120824,120828,120834,120839,120844,120849,120854,120859,120862,120865,120868,120871,120875,120878,120883,120886,120891,120894,120899,120906,120909,120912,120915,120918,120921,120932,120936,120940,120945,120950,120954,120959,120963,120968,120972,120976,120981,120984,121029,121034,121038,121042,121047,121053,121058,121068,121073,121083,121088,121093,121120,121124,121127,121132,121135,121160,121164,121169,121172,121177,121182,121202,121207,121210,121225,121229,121282,121285,121290,121294,121297,121312,121315,121318,121323,121327,121331,121334,121338,121342,121345,121350,121355,121359,121366,121374,121377,121384,121389,121394,121397,121402,121409,121414,121421,121425,121427,121432,121436,121439,121442,121447,121450,121455,121458,121463,121468,121473,121477,121482,121486,121527],[10,120805,120801],{"id":120806},"_2-linux装机教程",[14,120808,120810],{"id":120809},"_21-实体机","2.1 实体机",[19,120812,120813],{},"使用清华源：（Ubuntu24.04）",[19,120815,120816],{},[3538,120817,120818],{"href":120818,"rel":120819},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[26956],[14,120821,120823],{"id":120822},"_22-普通虚拟机","2.2 普通虚拟机",[3284,120825,120827],{"id":120826},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,120829,120830],{},[3538,120831,120832],{"href":120832,"rel":120833},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[26956],[19,120835,120836],{},[4602,120837],{"alt":158,"src":120838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,120840,120841],{},[4602,120842],{"alt":158,"src":120843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,120845,120846],{},[4602,120847],{"alt":158,"src":120848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,120850,120851],{},[4602,120852],{"alt":158,"src":120853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,120855,120856],{},[4602,120857],{"alt":158,"src":120858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,120860,120861],{},"内存4G（4096MB）；",[19,120863,120864],{},"CPU给4个核；",[19,120866,120867],{},"硬盘动态分配60G；",[19,120869,120870],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[3284,120872,120874],{"id":120873},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,120876,120877],{},"按照1.1的步骤下载Ubuntu",[19,120879,120880],{},[4602,120881],{"alt":158,"src":120882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,120884,120885],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,120887,120888],{},[4602,120889],{"alt":158,"src":120890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,120892,120893],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,120895,120896],{},[4602,120897],{"alt":158,"src":120898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,120900,120901,120902,120905],{},"选择“正常安装”(找不到都用Alt+F7)， ",[3453,120903,120904],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,120907,120908],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,120910,120911],{},"将改动写入磁盘吗 继续",[19,120913,120914],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,120916,120917],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,120919,120920],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,120922,120923,120924,120927,120928,120931],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[3453,120925,120926],{},"除了"," 选不发送系统信息与不升级之外， ",[3453,120929,120930],{},"其它"," 都跳过或前进）",[3284,120933,120935],{"id":120934},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[25089,120937,120939],{"id":120938},"_2231-全屏","2.2.3.1 全屏",[19,120941,120942],{},[4602,120943],{"alt":158,"src":120944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,120946,120947],{},[4602,120948],{"alt":158,"src":120949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[25089,120951,120953],{"id":120952},"_2232-文件交换","2.2.3.2 文件交换",[19,120955,120956],{},[4602,120957],{"alt":158,"src":120958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[25089,120960,120962],{"id":120961},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,120964,120965],{},[4602,120966],{"alt":158,"src":120967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,120969,120971],{"id":120970},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[3284,120973,120975],{"id":120974},"_231-简介与优缺点","2.3.1 简介与优缺点",[1452,120977,120978],{},[1455,120979,120980],{},"什么情况下推荐？",[19,120982,120983],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[1452,120985,120986],{"start":197},[1455,120987,120988,120989],{},"优缺点：",[1452,120990,120991,121021],{},[1455,120992,120993,120994],{},"优点：",[1452,120995,120996,120999,121006,121009,121012,121015,121018],{},[1455,120997,120998],{},"WSL2是最好的Linux发行版;(bushi)",[1455,121000,121001,121002,121005],{},"性能损耗极低。且比在Windows上跑深度性能 ",[3453,121003,121004],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[1455,121007,121008],{},"非常方便调用USB设备，可以USB直通;",[1455,121010,121011],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[1455,121013,121014],{},"非常方便Win与WSL2互相传文件等协同操作;",[1455,121016,121017],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[1455,121019,121020],{},"非常方便使用Windows的VScode远程开发;",[1455,121022,121023,121024],{},"缺点：",[1452,121025,121026],{},[1455,121027,121028],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,121030,121031],{},[4602,121032],{"alt":158,"src":121033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[3284,121035,121037],{"id":121036},"_232-安装教程","2.3.2 安装教程",[25089,121039,121041],{"id":121040},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[1452,121043,121044],{},[1455,121045,121046],{},"方法一(图形界面)",[19,121048,121049,121050,27710],{},"用Win+R输入",[71,121051,121052],{},"appwiz.cpl",[19,121054,121055],{},[4602,121056],{"alt":158,"src":121057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,121059,121060,121061,121064,121065,29563],{},"点击OK进入 ",[3453,121062,121063],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[3453,121066,121067],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,121069,121070],{},[4602,121071],{"alt":158,"src":121072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,121074,121075,121076,104082,121079,121082],{},"选择 ",[3453,121077,121078],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[3453,121080,121081],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,121084,121085],{},[4602,121086],{"alt":158,"src":121087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[1452,121089,121090],{"start":197},[1455,121091,121092],{},"方法二(命令行)",[153,121094,121098],{"className":121095,"code":121096,"language":121097,"meta":158,"style":158},"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",[71,121099,121100,121105,121110,121115],{"__ignoreMap":158},[162,121101,121102],{"class":164,"line":165},[162,121103,121104],{},"# 开启 Linux 子系统\n",[162,121106,121107],{"class":164,"line":197},[162,121108,121109],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[162,121111,121112],{"class":164,"line":228},[162,121113,121114],{},"# 开启虚拟机平台\n",[162,121116,121117],{"class":164,"line":252},[162,121118,121119],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[25089,121121,121123],{"id":121122},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,121125,121126],{},"用管理员权限打开powershell",[19,121128,121129],{},[4602,121130],{"alt":158,"src":121131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,121133,121134],{},"升级WSL并设置默认版本为WSL2",[153,121136,121138],{"className":121095,"code":121137,"language":121097,"meta":158,"style":158},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[71,121139,121140,121145,121150,121155],{"__ignoreMap":158},[162,121141,121142],{"class":164,"line":165},[162,121143,121144],{},"# 更新 wsl\n",[162,121146,121147],{"class":164,"line":197},[162,121148,121149],{},"wsl --update\n",[162,121151,121152],{"class":164,"line":228},[162,121153,121154],{},"# 将 wsl 版本设置为 wsl2\n",[162,121156,121157],{"class":164,"line":252},[162,121158,121159],{},"wsl --set-default-version 2\n",[25089,121161,121163],{"id":121162},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[1452,121165,121166],{},[1455,121167,121168],{},"方式一(商店下载)",[19,121170,121171],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,121173,121174],{},[4602,121175],{"alt":158,"src":121176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[1452,121178,121179],{"start":197},[1455,121180,121181],{},"方式二(命令行安装)",[153,121183,121185],{"className":121095,"code":121184,"language":121097,"meta":158,"style":158},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[71,121186,121187,121192,121197],{"__ignoreMap":158},[162,121188,121189],{"class":164,"line":165},[162,121190,121191],{},"# 列出可安装的 Linux 版本\n",[162,121193,121194],{"class":164,"line":197},[162,121195,121196],{},"#（需要科学手段）\n",[162,121198,121199],{"class":164,"line":228},[162,121200,121201],{},"wsl --list --online\n",[19,121203,121204],{},[4602,121205],{"alt":158,"src":121206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,121208,121209],{},"选择对应发行版并安装",[153,121211,121213],{"className":121095,"code":121212,"language":121097,"meta":158,"style":158},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[71,121214,121215,121220],{"__ignoreMap":158},[162,121216,121217],{"class":164,"line":165},[162,121218,121219],{},"# Ubuntu安装完毕后需要重启系统\n",[162,121221,121222],{"class":164,"line":197},[162,121223,121224],{},"wsl --install -d Ubuntu-24.04\n",[25089,121226,121228],{"id":121227},"_2324-查看系统状态","2.3.2.4 查看系统状态",[153,121230,121232],{"className":121095,"code":121231,"language":121097,"meta":158,"style":158},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[71,121233,121234,121239,121244,121249,121254,121258,121262,121267,121272,121277],{"__ignoreMap":158},[162,121235,121236],{"class":164,"line":165},[162,121237,121238],{},"# 查看 wsl\n",[162,121240,121241],{"class":164,"line":197},[162,121242,121243],{},"wsl -l\n",[162,121245,121246],{"class":164,"line":228},[162,121247,121248],{},"# 查看 wsl 运行版本或模式\n",[162,121250,121251],{"class":164,"line":252},[162,121252,121253],{},"wsl -l -v\n",[162,121255,121256],{"class":164,"line":328},[162,121257,301],{"emptyLinePlaceholder":300},[162,121259,121260],{"class":164,"line":466},[162,121261,301],{"emptyLinePlaceholder":300},[162,121263,121264],{"class":164,"line":471},[162,121265,121266],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[162,121268,121269],{"class":164,"line":687},[162,121270,121271],{},"wsl --set-version \u003Cdistro> 2\n",[162,121273,121274],{"class":164,"line":692},[162,121275,121276],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[162,121278,121279],{"class":164,"line":698},[162,121280,121281],{},"wsl --unregister \u003Cdistro>\n",[19,121283,121284],{},"输出Version为2即正常",[19,121286,121287],{},[4602,121288],{"alt":158,"src":121289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[25089,121291,121293],{"id":121292},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,121295,121296],{},"直接在Powershell里输入wsl命令进入子系统",[153,121298,121300],{"className":121095,"code":121299,"language":121097,"meta":158,"style":158},"# 进入子系统\nwsl\n",[71,121301,121302,121307],{"__ignoreMap":158},[162,121303,121304],{"class":164,"line":165},[162,121305,121306],{},"# 进入子系统\n",[162,121308,121309],{"class":164,"line":197},[162,121310,121311],{},"wsl\n",[19,121313,121314],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,121316,121317],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,121319,121320],{},[4602,121321],{"alt":158,"src":121322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[3284,121324,121326],{"id":121325},"_233-配置各种环境","2.3.3 配置各种环境",[25089,121328,121330],{"id":121329},"_2331-换源","2.3.3.1 换源",[19,121332,121333],{},"(同实体机LINUX，往下找教程)",[25089,121335,121337],{"id":121336},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[26001,121339,121341],{"id":121340},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,121343,121344],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,121346,121347],{},[4602,121348],{"alt":158,"src":121349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,121351,121352],{},[4602,121353],{"alt":158,"src":121354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[26001,121356,121358],{"id":121357},"_23322-cuda","2.3.3.2.2 CUDA",[19,121360,121361,121362],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[3538,121363,121364],{"href":121364,"rel":121365},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[26956],[19,121367,121368,121371],{},[4602,121369],{"alt":158,"src":121370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[4602,121372],{"alt":158,"src":121373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,121375,121376],{},"在下方的网站，选择合适的版本。",[19,121378,121379,121380],{},"WSL2 专属 CUDA 指南：",[3538,121381,121382],{"href":121382,"rel":121383},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[26956],[19,121385,121386],{},[3453,121387,121388],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,121390,121391],{},[4602,121392],{"alt":158,"src":121393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,121395,121396],{},"挨行敲一遍",[19,121398,121399],{},[4602,121400],{"alt":158,"src":121401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,121403,121404,121405,121408],{},"敲完后，输入",[71,121406,121407],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,121410,121411],{},[4602,121412],{"alt":158,"src":121413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,121415,121416,121417,121420],{},"（请详看下方教程的",[3453,121418,121419],{},"安装CUDA的配置环境来看","如何配置环境）",[26001,121422,121424],{"id":121423},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,121426,121333],{},[19,121428,121429],{},[4602,121430],{"alt":158,"src":121431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[25089,121433,121435],{"id":121434},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,121437,121438],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,121440,121441],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,121443,121444],{},[4602,121445],{"alt":158,"src":121446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,121448,121449],{},"连接WSL2",[19,121451,121452],{},[4602,121453],{"alt":158,"src":121454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,121456,121457],{},"远程开发成功。",[19,121459,121460],{},[4602,121461],{"alt":158,"src":121462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,121464,121465],{},[4602,121466],{"alt":158,"src":121467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,121469,121470],{},[4602,121471],{"alt":158,"src":121472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[25089,121474,121476],{"id":121475},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,121478,121479],{},[4602,121480],{"alt":158,"src":121481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[25089,121483,121485],{"id":121484},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[153,121487,121489],{"className":120355,"code":121488,"language":120357,"meta":158,"style":158},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[71,121490,121491,121499,121507,121518,121522],{"__ignoreMap":158},[162,121492,121493,121495,121497],{"class":164,"line":165},[162,121494,27668],{"class":5082},[162,121496,120376],{"class":179},[162,121498,29332],{"class":179},[162,121500,121501,121503,121505],{"class":164,"line":197},[162,121502,27668],{"class":5082},[162,121504,120376],{"class":179},[162,121506,120392],{"class":179},[162,121508,121509,121511,121513,121515],{"class":164,"line":228},[162,121510,27668],{"class":5082},[162,121512,120376],{"class":179},[162,121514,26925],{"class":179},[162,121516,121517],{"class":179}," mesa-utils\n",[162,121519,121520],{"class":164,"line":252},[162,121521,301],{"emptyLinePlaceholder":300},[162,121523,121524],{"class":164,"line":328},[162,121525,121526],{"class":361},"#然后重启wsl2即可\n",[3219,121528,121529],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":158,"searchDepth":197,"depth":197,"links":121531},[121532,121533,121538],{"id":120809,"depth":197,"text":120810},{"id":120822,"depth":197,"text":120823,"children":121534},[121535,121536,121537],{"id":120826,"depth":228,"text":120827},{"id":120873,"depth":228,"text":120874},{"id":120934,"depth":228,"text":120935},{"id":120970,"depth":197,"text":120971,"children":121539},[121540,121541,121542],{"id":120974,"depth":228,"text":120975},{"id":121036,"depth":228,"text":121037},{"id":121325,"depth":228,"text":121326},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":120801,"description":3241},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":121549,"title":121550,"body":121551,"description":3241,"extension":3242,"meta":124486,"navigation":300,"path":124487,"seo":124488,"stem":124489,"__hash__":124490},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":121552,"toc":124458},[121553,121556,121560,121566,121570,121576,121580,121768,121771,121776,121780,121784,121787,121790,121796,121801,121804,121807,121812,121845,121850,121854,121931,121934,121939,121943,121946,121985,121988,121997,122015,122020,122027,122144,122149,122152,122179,122184,122188,122197,122247,122254,122258,122261,122275,122282,122316,122321,122325,122348,122351,122356,122360,122363,122366,122369,122411,122415,122418,122421,122462,122466,122470,122473,122478,122483,122486,122509,122512,122520,122525,122528,122533,122538,122541,122546,122550,122555,122578,122583,122645,122653,122658,122663,122666,122671,122674,122679,122684,122702,122707,122713,122718,122732,122736,122739,122742,122745,122787,122790,122795,122896,122899,122904,122908,122912,122949,122953,122957,122961,123007,123011,123056,123060,123067,123075,123130,123133,123210,123213,123236,123240,123243,123248,123253,123261,123264,123269,123274,123279,123282,123287,123296,123299,123304,123307,123378,123383,123386,123391,123394,123399,123402,123407,123410,123415,123420,123423,123498,123501,123514,123519,123522,123536,123539,123568,123573,123602,123605,123610,123614,123619,123628,123631,123636,123639,123644,123647,123650,123655,123658,123663,123668,123671,123676,123679,123804,123809,123839,123842,123847,123852,123869,123872,123915,123918,123945,123950,123963,124106,124110,124115,124129,124132,124183,124186,124216,124219,124235,124240,124254,124257,124324,124329,124338,124343,124346,124358,124363,124370,124394,124397,124402,124405,124424,124429,124436,124448,124455],[10,121554,121550],{"id":121555},"_3-安装必备配置",[14,121557,121559],{"id":121558},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[153,121561,121564],{"className":121562,"code":121563,"language":8295},[8293],"  打开下方网站（注意，该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",[71,121565,121563],{"__ignoreMap":158},[3284,121567,121569],{"id":121568},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[153,121571,121574],{"className":121572,"code":121573,"language":8295},[8293],"  输入以下命令\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",[71,121575,121573],{"__ignoreMap":158},[3284,121577,121579],{"id":121578},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[153,121581,121585],{"className":121582,"code":121583,"language":121584,"meta":158,"style":158},"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",[71,121586,121587,121595,121606,121618,121632,121636,121646,121651,121655,121659,121664,121668,121680,121684,121689,121693,121704,121708,121724,121728,121739,121743,121748,121752,121760],{"__ignoreMap":158},[162,121588,121589,121591,121593],{"class":164,"line":165},[162,121590,27668],{"class":5082},[162,121592,120376],{"class":179},[162,121594,29332],{"class":179},[162,121596,121597,121599,121601,121603],{"class":164,"line":197},[162,121598,27668],{"class":5082},[162,121600,120376],{"class":179},[162,121602,26925],{"class":179},[162,121604,121605],{"class":179}," vim\n",[162,121607,121608,121610,121613,121615],{"class":164,"line":228},[162,121609,27668],{"class":5082},[162,121611,121612],{"class":179}," rm",[162,121614,28417],{"class":207},[162,121616,121617],{"class":179}," \u002Fetc\u002Fapt\u002Fsources.list\n",[162,121619,121620,121622,121624,121626,121629],{"class":164,"line":252},[162,121621,27668],{"class":5082},[162,121623,121612],{"class":179},[162,121625,28417],{"class":207},[162,121627,121628],{"class":179}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[162,121630,121631],{"class":207},"**\n",[162,121633,121634],{"class":164,"line":328},[162,121635,301],{"emptyLinePlaceholder":300},[162,121637,121638,121640,121643],{"class":164,"line":466},[162,121639,27668],{"class":5082},[162,121641,121642],{"class":179}," vim",[162,121644,121645],{"class":179}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[162,121647,121648],{"class":164,"line":471},[162,121649,121650],{"class":179},"```\n",[162,121652,121653],{"class":164,"line":687},[162,121654,301],{"emptyLinePlaceholder":300},[162,121656,121657],{"class":164,"line":692},[162,121658,301],{"emptyLinePlaceholder":300},[162,121660,121661],{"class":164,"line":698},[162,121662,121663],{"class":5082},"选择好Ubuntu版本后，复制下方的内容。\n",[162,121665,121666],{"class":164,"line":2955},[162,121667,301],{"emptyLinePlaceholder":300},[162,121669,121670,121672,121675,121678],{"class":164,"line":2960},[162,121671,3526],{"class":172},[162,121673,121674],{"class":179},"[](",[162,121676,121677],{"class":5082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[162,121679,434],{"class":179},[162,121681,121682],{"class":164,"line":2971},[162,121683,301],{"emptyLinePlaceholder":300},[162,121685,121686],{"class":164,"line":2984},[162,121687,121688],{"class":5082},"粘贴进去\n",[162,121690,121691],{"class":164,"line":2989},[162,121692,301],{"emptyLinePlaceholder":300},[162,121694,121695,121697,121699,121702],{"class":164,"line":3011},[162,121696,3526],{"class":172},[162,121698,121674],{"class":179},[162,121700,121701],{"class":5082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[162,121703,434],{"class":179},[162,121705,121706],{"class":164,"line":3022},[162,121707,301],{"emptyLinePlaceholder":300},[162,121709,121710,121713,121716,121719,121721],{"class":164,"line":3027},[162,121711,121712],{"class":5082},"按一下ESC，然后英文冒号，输入",[162,121714,121715],{"class":179}," `",[162,121717,121718],{"class":5082},":wq!",[162,121720,4245],{"class":179},[162,121722,121723],{"class":5082},"然后回车\n",[162,121725,121726],{"class":164,"line":3046},[162,121727,301],{"emptyLinePlaceholder":300},[162,121729,121730,121732,121734,121737],{"class":164,"line":3052},[162,121731,3526],{"class":172},[162,121733,121674],{"class":179},[162,121735,121736],{"class":5082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[162,121738,434],{"class":179},[162,121740,121741],{"class":164,"line":3057},[162,121742,301],{"emptyLinePlaceholder":300},[162,121744,121745],{"class":164,"line":3072},[162,121746,121747],{"class":5082},"输入以下命令\n",[162,121749,121750],{"class":164,"line":3077},[162,121751,301],{"emptyLinePlaceholder":300},[162,121753,121754,121757],{"class":164,"line":3100},[162,121755,121756],{"class":179},"```",[162,121758,121759],{"class":5082},"Bash\n",[162,121761,121762,121764,121766],{"class":164,"line":3140},[162,121763,27668],{"class":5082},[162,121765,120376],{"class":179},[162,121767,29332],{"class":179},[19,121769,121770],{},"这里被替换成对应学校则成功",[19,121772,121773],{},[4602,121774],{"alt":158,"src":121775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,121777,121779],{"id":121778},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[3284,121781,121783],{"id":121782},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,121785,121786],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,121788,121789],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,121791,121792],{},[3538,121793,121794],{"href":121794,"rel":121795},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[26956],[19,121797,121798],{},[4602,121799],{"alt":158,"src":121800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,121802,121803],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,121805,121806],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,121808,121809],{},[4602,121810],{"alt":158,"src":121811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[153,121813,121815],{"className":120355,"code":121814,"language":120357,"meta":158,"style":158},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[71,121816,121817,121822,121829,121834],{"__ignoreMap":158},[162,121818,121819],{"class":164,"line":165},[162,121820,121821],{"class":361},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[162,121823,121824,121826],{"class":164,"line":197},[162,121825,104340],{"class":207},[162,121827,121828],{"class":179}," ~\u002FDownloads\n",[162,121830,121831],{"class":164,"line":228},[162,121832,121833],{"class":361},"#下方chrome安装包名不一定是这个，根据名字来看\n",[162,121835,121836,121838,121840,121842],{"class":164,"line":252},[162,121837,27668],{"class":5082},[162,121839,120376],{"class":179},[162,121841,26925],{"class":179},[162,121843,121844],{"class":179}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,121846,121847],{},[4602,121848],{"alt":158,"src":121849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[3284,121851,121853],{"id":121852},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[153,121855,121857],{"className":120355,"code":121856,"language":120357,"meta":158,"style":158},"# 老版\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",[71,121858,121859,121864,121872,121883,121888,121892,121897,121907,121915,121926],{"__ignoreMap":158},[162,121860,121861],{"class":164,"line":165},[162,121862,121863],{"class":361},"# 老版\n",[162,121865,121866,121868,121870],{"class":164,"line":197},[162,121867,27668],{"class":5082},[162,121869,120376],{"class":179},[162,121871,29332],{"class":179},[162,121873,121874,121876,121878,121880],{"class":164,"line":228},[162,121875,27668],{"class":5082},[162,121877,120376],{"class":179},[162,121879,26925],{"class":179},[162,121881,121882],{"class":179}," neofetch\n",[162,121884,121885],{"class":164,"line":252},[162,121886,121887],{"class":5082},"neofetch\n",[162,121889,121890],{"class":164,"line":328},[162,121891,301],{"emptyLinePlaceholder":300},[162,121893,121894],{"class":164,"line":466},[162,121895,121896],{"class":361},"# 新版\n",[162,121898,121899,121901,121904],{"class":164,"line":471},[162,121900,27668],{"class":5082},[162,121902,121903],{"class":179}," add-apt-repository",[162,121905,121906],{"class":179}," ppa:zhangsongcui3371\u002Ffastfetch\n",[162,121908,121909,121911,121913],{"class":164,"line":687},[162,121910,27668],{"class":5082},[162,121912,120376],{"class":179},[162,121914,29332],{"class":179},[162,121916,121917,121919,121921,121923],{"class":164,"line":692},[162,121918,27668],{"class":5082},[162,121920,120376],{"class":179},[162,121922,26925],{"class":179},[162,121924,121925],{"class":179}," fastfetch\n",[162,121927,121928],{"class":164,"line":698},[162,121929,121930],{"class":5082},"fastfetch\n",[19,121932,121933],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,121935,121936],{},[4602,121937],{"alt":158,"src":121938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[3284,121940,121942],{"id":121941},"_323-移除snap应用","3.2.3 移除snap应用",[19,121944,121945],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[153,121947,121949],{"className":120355,"code":121948,"language":120357,"meta":158,"style":158},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[71,121950,121951,121963,121974],{"__ignoreMap":158},[162,121952,121953,121955,121957,121960],{"class":164,"line":165},[162,121954,27668],{"class":5082},[162,121956,29603],{"class":179},[162,121958,121959],{"class":179}," disable",[162,121961,121962],{"class":179}," snapd.service\n",[162,121964,121965,121967,121969,121971],{"class":164,"line":197},[162,121966,27668],{"class":5082},[162,121968,29603],{"class":179},[162,121970,121959],{"class":179},[162,121972,121973],{"class":179}," snapd.socket\n",[162,121975,121976,121978,121980,121982],{"class":164,"line":228},[162,121977,27668],{"class":5082},[162,121979,29603],{"class":179},[162,121981,121959],{"class":179},[162,121983,121984],{"class":179}," snapd.seeded.service\n",[19,121986,121987],{},"然后查看snap应用列表",[19,121989,121990,121991,121996],{},"根据你安装的选择不同（最小安装或普通安装），有",[3538,121992,121995],{"href":121993,"rel":121994},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[26956],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[153,121998,122000],{"className":120355,"code":121999,"language":120357,"meta":158,"style":158},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[71,122001,122002,122007],{"__ignoreMap":158},[162,122003,122004],{"class":164,"line":165},[162,122005,122006],{"class":361},"# 查询当前系统上snap安装了哪些app\n",[162,122008,122009,122012],{"class":164,"line":197},[162,122010,122011],{"class":5082},"snap",[162,122013,122014],{"class":179}," list\n",[19,122016,122017],{},[4602,122018],{"alt":158,"src":122019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,122021,122022,122023,122026],{},"卸载掉图中所有应用，按照 ",[3453,122024,122025],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[153,122028,122030],{"className":120355,"code":122029,"language":120357,"meta":158,"style":158},"#移除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",[71,122031,122032,122037,122049,122054,122065,122070,122081,122086,122097,122102,122106,122111,122122,122133],{"__ignoreMap":158},[162,122033,122034],{"class":164,"line":165},[162,122035,122036],{"class":361},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[162,122038,122039,122041,122044,122046],{"class":164,"line":197},[162,122040,27668],{"class":5082},[162,122042,122043],{"class":179}," snap",[162,122045,29169],{"class":179},[162,122047,122048],{"class":179}," snap-store\n",[162,122050,122051],{"class":164,"line":228},[162,122052,122053],{"class":361},"#移除firefox浏览器\n",[162,122055,122056,122058,122060,122062],{"class":164,"line":252},[162,122057,27668],{"class":5082},[162,122059,122043],{"class":179},[162,122061,29169],{"class":179},[162,122063,122064],{"class":179}," firefox\n",[162,122066,122067],{"class":164,"line":328},[162,122068,122069],{"class":361},"#移除gnome-42-2204\n",[162,122071,122072,122074,122076,122078],{"class":164,"line":466},[162,122073,27668],{"class":5082},[162,122075,122043],{"class":179},[162,122077,29169],{"class":179},[162,122079,122080],{"class":179}," gnome-42-2204\n",[162,122082,122083],{"class":164,"line":471},[162,122084,122085],{"class":361},"#移除gtk-common-themes\n",[162,122087,122088,122090,122092,122094],{"class":164,"line":687},[162,122089,27668],{"class":5082},[162,122091,122043],{"class":179},[162,122093,29169],{"class":179},[162,122095,122096],{"class":179}," gtk-common-themes\n",[162,122098,122099],{"class":164,"line":692},[162,122100,122101],{"class":361},"#移除其它...\n",[162,122103,122104],{"class":164,"line":698},[162,122105,5791],{"class":168},[162,122107,122108],{"class":164,"line":2955},[162,122109,122110],{"class":361},"#移除core22,bare以及snapd\n",[162,122112,122113,122115,122117,122119],{"class":164,"line":2960},[162,122114,27668],{"class":5082},[162,122116,122043],{"class":179},[162,122118,29169],{"class":179},[162,122120,122121],{"class":179}," core22\n",[162,122123,122124,122126,122128,122130],{"class":164,"line":2971},[162,122125,27668],{"class":5082},[162,122127,122043],{"class":179},[162,122129,29169],{"class":179},[162,122131,122132],{"class":179}," bare\n",[162,122134,122135,122137,122139,122141],{"class":164,"line":2984},[162,122136,27668],{"class":5082},[162,122138,122043],{"class":179},[162,122140,29169],{"class":179},[162,122142,122143],{"class":179}," snapd\n",[19,122145,122146],{},[4602,122147],{"alt":158,"src":122148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,122150,122151],{},"输入以下命令查看是否还有snap包",[153,122153,122155],{"className":120355,"code":122154,"language":120357,"meta":158,"style":158},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[71,122156,122157,122163,122167,122171,122175],{"__ignoreMap":158},[162,122158,122159,122161],{"class":164,"line":165},[162,122160,122011],{"class":5082},[162,122162,122014],{"class":179},[162,122164,122165],{"class":164,"line":197},[162,122166,121863],{"class":361},[162,122168,122169],{"class":164,"line":228},[162,122170,121887],{"class":5082},[162,122172,122173],{"class":164,"line":252},[162,122174,121896],{"class":361},[162,122176,122177],{"class":164,"line":328},[162,122178,121930],{"class":5082},[19,122180,122181],{},[4602,122182],{"alt":158,"src":122183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[3284,122185,122187],{"id":122186},"_324-移除snap","3.2.4 移除snap",[19,122189,122190,122191,122196],{},"在删除掉",[3538,122192,122195],{"href":122193,"rel":122194},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[26956],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[153,122198,122200],{"className":120355,"code":122199,"language":120357,"meta":158,"style":158}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[71,122201,122202,122207,122220,122225,122236],{"__ignoreMap":158},[162,122203,122204],{"class":164,"line":165},[162,122205,122206],{"class":361}," #使用apt移除掉snap\n",[162,122208,122209,122211,122213,122215,122218],{"class":164,"line":197},[162,122210,27668],{"class":5082},[162,122212,120376],{"class":179},[162,122214,120684],{"class":179},[162,122216,122217],{"class":207}," --purge",[162,122219,122143],{"class":179},[162,122221,122222],{"class":164,"line":228},[162,122223,122224],{"class":361},"#移除snapd的一些目录\n",[162,122226,122227,122229,122231,122233],{"class":164,"line":252},[162,122228,27668],{"class":5082},[162,122230,121612],{"class":179},[162,122232,28417],{"class":207},[162,122234,122235],{"class":179}," \u002Fvar\u002Fcache\u002Fsnapd\n",[162,122237,122238,122240,122242,122244],{"class":164,"line":328},[162,122239,27668],{"class":5082},[162,122241,121612],{"class":179},[162,122243,28417],{"class":207},[162,122245,122246],{"class":179}," ~\u002Fsnap\n",[19,122248,122249,122250,122253],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[71,122251,122252],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[3284,122255,122257],{"id":122256},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,122259,122260],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[153,122262,122264],{"className":120355,"code":122263,"language":120357,"meta":158,"style":158},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[71,122265,122266],{"__ignoreMap":158},[162,122267,122268,122270,122272],{"class":164,"line":165},[162,122269,27668],{"class":5082},[162,122271,121642],{"class":179},[162,122273,122274],{"class":179}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,122276,122277,122278,122281],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[71,122279,122280],{},":wq"," 回车",[153,122283,122285],{"className":120355,"code":122284,"language":120357,"meta":158,"style":158},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[71,122286,122287,122294,122308],{"__ignoreMap":158},[162,122288,122289,122292],{"class":164,"line":165},[162,122290,122291],{"class":5082},"Package:",[162,122293,122143],{"class":179},[162,122295,122296,122299,122302,122305],{"class":164,"line":197},[162,122297,122298],{"class":5082},"Pin:",[162,122300,122301],{"class":179}," release",[162,122303,122304],{"class":179}," a=",[162,122306,122307],{"class":207},"*\n",[162,122309,122310,122313],{"class":164,"line":228},[162,122311,122312],{"class":5082},"Pin-Priority:",[162,122314,122315],{"class":207}," -10\n",[19,122317,122318],{},[4602,122319],{"alt":158,"src":122320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[3284,122322,122324],{"id":122323},"_326-测试是否成功","3.2.6 测试是否成功",[153,122326,122328],{"className":120355,"code":122327,"language":120357,"meta":158,"style":158},"sudo apt update\nsudo apt install firefox\n",[71,122329,122330,122338],{"__ignoreMap":158},[162,122331,122332,122334,122336],{"class":164,"line":165},[162,122333,27668],{"class":5082},[162,122335,120376],{"class":179},[162,122337,29332],{"class":179},[162,122339,122340,122342,122344,122346],{"class":164,"line":197},[162,122341,27668],{"class":5082},[162,122343,120376],{"class":179},[162,122345,26925],{"class":179},[162,122347,122064],{"class":179},[19,122349,122350],{},"这里提示snapd无法被安装，就证明成功了",[19,122352,122353],{},[4602,122354],{"alt":158,"src":122355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[3284,122357,122359],{"id":122358},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,122361,122362],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,122364,122365],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,122367,122368],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[153,122370,122372],{"className":120355,"code":122371,"language":120357,"meta":158,"style":158},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[71,122373,122374,122379,122388,122393,122401],{"__ignoreMap":158},[162,122375,122376],{"class":164,"line":165},[162,122377,122378],{"class":361},"# 添加Mozilla提供的源\n",[162,122380,122381,122383,122385],{"class":164,"line":197},[162,122382,27668],{"class":5082},[162,122384,121903],{"class":179},[162,122386,122387],{"class":179}," ppa:mozillateam\u002Fppa\n",[162,122389,122390],{"class":164,"line":228},[162,122391,122392],{"class":361},"# 安装Firefox\n",[162,122394,122395,122397,122399],{"class":164,"line":252},[162,122396,27668],{"class":5082},[162,122398,120376],{"class":179},[162,122400,29332],{"class":179},[162,122402,122403,122405,122407,122409],{"class":164,"line":328},[162,122404,27668],{"class":5082},[162,122406,120376],{"class":179},[162,122408,26925],{"class":179},[162,122410,122064],{"class":179},[3284,122412,122414],{"id":122413},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,122416,122417],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,122419,122420],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[153,122422,122424],{"className":120355,"code":122423,"language":120357,"meta":158,"style":158},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[71,122425,122426,122431,122441,122449,122453],{"__ignoreMap":158},[162,122427,122428],{"class":164,"line":165},[162,122429,122430],{"class":361},"#删掉禁止安装snap的配置文件\n",[162,122432,122433,122435,122437,122439],{"class":164,"line":197},[162,122434,27668],{"class":5082},[162,122436,121612],{"class":179},[162,122438,28417],{"class":207},[162,122440,122274],{"class":179},[162,122442,122443,122445,122447],{"class":164,"line":228},[162,122444,27668],{"class":5082},[162,122446,120376],{"class":179},[162,122448,29332],{"class":179},[162,122450,122451],{"class":164,"line":252},[162,122452,301],{"emptyLinePlaceholder":300},[162,122454,122455,122457,122459],{"class":164,"line":328},[162,122456,27668],{"class":5082},[162,122458,120376],{"class":179},[162,122460,122461],{"class":179}," dist-update\n",[14,122463,122465],{"id":122464},"_33-中文输入法","3.3 中文输入法",[3284,122467,122469],{"id":122468},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,122471,122472],{},"官网下载搜狗输入法",[19,122474,122475],{},[4602,122476],{"alt":158,"src":122477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,122479,122480],{},[4602,122481],{"alt":158,"src":122482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,122484,122485],{},"打开终端输入如下",[153,122487,122489],{"className":120355,"code":122488,"language":120357,"meta":158,"style":158},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[71,122490,122491,122498],{"__ignoreMap":158},[162,122492,122493,122495],{"class":164,"line":165},[162,122494,104340],{"class":207},[162,122496,122497],{"class":179}," ~\u002FDownloads\u002F\n",[162,122499,122500,122502,122504,122506],{"class":164,"line":197},[162,122501,27668],{"class":5082},[162,122503,120376],{"class":179},[162,122505,26925],{"class":179},[162,122507,122508],{"class":179}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,122510,122511],{},"打开Fcitx",[19,122513,122514,122517],{},[4602,122515],{"alt":158,"src":122516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[4602,122518],{"alt":158,"src":122519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,122521,122522],{},[4602,122523],{"alt":158,"src":122524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,122526,122527],{},"添加搜狗输入法",[19,122529,122530],{},[4602,122531],{"alt":158,"src":122532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,122534,122535],{},[4602,122536],{"alt":158,"src":122537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,122539,122540],{},"将搜狗输入法设置为唯一输入法",[19,122542,122543],{},[4602,122544],{"alt":158,"src":122545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[3284,122547,122549],{"id":122548},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[1452,122551,122552],{},[1455,122553,122554],{},"卸载旧输入法",[153,122556,122558],{"className":121582,"code":122557,"language":121584,"meta":158,"style":158},"sudo apt purge fcitx* ibus*\n",[71,122559,122560],{"__ignoreMap":158},[162,122561,122562,122564,122566,122568,122571,122573,122576],{"class":164,"line":165},[162,122563,27668],{"class":5082},[162,122565,120376],{"class":179},[162,122567,120717],{"class":179},[162,122569,122570],{"class":179}," fcitx",[162,122572,3745],{"class":207},[162,122574,122575],{"class":179}," ibus",[162,122577,122307],{"class":207},[1452,122579,122580],{"start":197},[1455,122581,122582],{},"安装Fcitx5",[153,122584,122586],{"className":120355,"code":122585,"language":120357,"meta":158,"style":158},"# 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",[71,122587,122588,122593,122607,122611,122616,122625,122633],{"__ignoreMap":158},[162,122589,122590],{"class":164,"line":165},[162,122591,122592],{"class":361},"# Ubuntu22.04及以上、Debian12及以上\n",[162,122594,122595,122597,122599,122601,122604],{"class":164,"line":197},[162,122596,27668],{"class":5082},[162,122598,120376],{"class":179},[162,122600,26925],{"class":179},[162,122602,122603],{"class":179}," fcitx5",[162,122605,122606],{"class":179}," fcitx5-chinese-addons\n",[162,122608,122609],{"class":164,"line":228},[162,122610,301],{"emptyLinePlaceholder":300},[162,122612,122613],{"class":164,"line":252},[162,122614,122615],{"class":361},"# Ubuntu20.04\n",[162,122617,122618,122620,122622],{"class":164,"line":328},[162,122619,27668],{"class":5082},[162,122621,121903],{"class":179},[162,122623,122624],{"class":179}," ppa:zhsj\u002Ffcitx5\n",[162,122626,122627,122629,122631],{"class":164,"line":466},[162,122628,27668],{"class":5082},[162,122630,120376],{"class":179},[162,122632,29332],{"class":179},[162,122634,122635,122637,122639,122641,122643],{"class":164,"line":471},[162,122636,27668],{"class":5082},[162,122638,120376],{"class":179},[162,122640,26925],{"class":179},[162,122642,122603],{"class":179},[162,122644,122606],{"class":179},[1452,122646,122647,122650],{"start":228},[1455,122648,122649],{},"Reboot System",[1455,122651,122652],{},"启动Fcitx5",[19,122654,122655],{},[4602,122656],{"alt":158,"src":122657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[1452,122659,122660],{"start":328},[1455,122661,122662],{},"修改一些设置",[19,122664,122665],{},"将Pinyin和Keyboard - English US加入到左边。",[19,122667,122668],{},[4602,122669],{"alt":158,"src":122670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,122672,122673],{},"添加快捷键以便于更好切换中英文",[19,122675,122676],{},[4602,122677],{"alt":158,"src":122678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[1452,122680,122681],{"start":466},[1455,122682,122683],{},"重启",[153,122685,122687],{"className":121582,"code":122686,"language":121584,"meta":158,"style":158},"sudo shutdown -r now\n",[71,122688,122689],{"__ignoreMap":158},[162,122690,122691,122693,122696,122699],{"class":164,"line":165},[162,122692,27668],{"class":5082},[162,122694,122695],{"class":179}," shutdown",[162,122697,122698],{"class":207}," -r",[162,122700,122701],{"class":179}," now\n",[1452,122703,122704],{"start":471},[1455,122705,122706],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,122708,122709],{},[3538,122710,122711],{"href":122711,"rel":122712},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[26956],[1452,122714,122715],{"start":687},[1455,122716,122717],{},"再重启",[153,122719,122720],{"className":121582,"code":122686,"language":121584,"meta":158,"style":158},[71,122721,122722],{"__ignoreMap":158},[162,122723,122724,122726,122728,122730],{"class":164,"line":165},[162,122725,27668],{"class":5082},[162,122727,122695],{"class":179},[162,122729,122698],{"class":207},[162,122731,122701],{"class":179},[14,122733,122735],{"id":122734},"_34-pip3源替换","3.4 pip3源替换",[19,122737,122738],{},"非Debian系发行版需要做。",[19,122740,122741],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,122743,122744],{},"使用dnf的系统也可能不用做。",[153,122746,122748],{"className":120355,"code":122747,"language":120357,"meta":158,"style":158},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[71,122749,122750,122755,122762,122767,122772],{"__ignoreMap":158},[162,122751,122752],{"class":164,"line":165},[162,122753,122754],{"class":361},"# 检查是否已安装 pip\n",[162,122756,122757,122760],{"class":164,"line":197},[162,122758,122759],{"class":5082},"pip3",[162,122761,29383],{"class":207},[162,122763,122764],{"class":164,"line":228},[162,122765,122766],{"class":361},"# 如果未安装，先安装 pip3（见下方）\n",[162,122768,122769],{"class":164,"line":252},[162,122770,122771],{"class":361},"# 配置 pip 使用清华源\n",[162,122773,122774,122776,122779,122781,122784],{"class":164,"line":328},[162,122775,122759],{"class":5082},[162,122777,122778],{"class":179}," config",[162,122780,1523],{"class":179},[162,122782,122783],{"class":179}," global.index-url",[162,122785,122786],{"class":179}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,122788,122789],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,122791,122792],{},[4602,122793],{"alt":158,"src":122794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[153,122796,122798],{"className":120355,"code":122797,"language":120357,"meta":158,"style":158},"#安装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",[71,122799,122800,122805,122813,122824,122828,122833,122852,122856,122861,122873,122877,122882],{"__ignoreMap":158},[162,122801,122802],{"class":164,"line":165},[162,122803,122804],{"class":361},"#安装pip3\n",[162,122806,122807,122809,122811],{"class":164,"line":197},[162,122808,27668],{"class":5082},[162,122810,120376],{"class":179},[162,122812,29332],{"class":179},[162,122814,122815,122817,122819,122821],{"class":164,"line":228},[162,122816,27668],{"class":5082},[162,122818,29166],{"class":179},[162,122820,26925],{"class":179},[162,122822,122823],{"class":179}," python3-pip\n",[162,122825,122826],{"class":164,"line":252},[162,122827,301],{"emptyLinePlaceholder":300},[162,122829,122830],{"class":164,"line":328},[162,122831,122832],{"class":361},"#更新pip3\n",[162,122834,122835,122837,122839,122841,122843,122845,122848,122850],{"class":164,"line":466},[162,122836,103943],{"class":5082},[162,122838,103946],{"class":207},[162,122840,103969],{"class":179},[162,122842,26925],{"class":179},[162,122844,29520],{"class":207},[162,122846,122847],{"class":179}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[162,122849,103974],{"class":207},[162,122851,103977],{"class":179},[162,122853,122854],{"class":164,"line":471},[162,122855,301],{"emptyLinePlaceholder":300},[162,122857,122858],{"class":164,"line":687},[162,122859,122860],{"class":361},"#设置pip源为清华源\n",[162,122862,122863,122865,122867,122869,122871],{"class":164,"line":692},[162,122864,122759],{"class":5082},[162,122866,122778],{"class":179},[162,122868,1523],{"class":179},[162,122870,122783],{"class":179},[162,122872,122786],{"class":179},[162,122874,122875],{"class":164,"line":698},[162,122876,301],{"emptyLinePlaceholder":300},[162,122878,122879],{"class":164,"line":2955},[162,122880,122881],{"class":361},"#测试\n",[162,122883,122884,122886,122888,122890,122892,122894],{"class":164,"line":2960},[162,122885,103943],{"class":5082},[162,122887,103946],{"class":207},[162,122889,103969],{"class":179},[162,122891,26925],{"class":179},[162,122893,103974],{"class":207},[162,122895,103977],{"class":179},[19,122897,122898],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,122900,122901],{},[4602,122902],{"alt":158,"src":122903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,122905,122907],{"id":122906},"_35-显卡驱动安装","3.5 显卡驱动安装",[3284,122909,122911],{"id":122910},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[153,122913,122915],{"className":121582,"code":122914,"language":121584,"meta":158,"style":158},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[71,122916,122917,122922,122937,122942],{"__ignoreMap":158},[162,122918,122919],{"class":164,"line":165},[162,122920,122921],{"class":361},"# 如果是使用apt安装的驱动\n",[162,122923,122924,122926,122928,122930,122932,122935],{"class":164,"line":197},[162,122925,27668],{"class":5082},[162,122927,29166],{"class":179},[162,122929,29169],{"class":179},[162,122931,122217],{"class":207},[162,122933,122934],{"class":179}," nvidia",[162,122936,122307],{"class":207},[162,122938,122939],{"class":164,"line":228},[162,122940,122941],{"class":361},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[162,122943,122944,122946],{"class":164,"line":252},[162,122945,27668],{"class":5082},[162,122947,122948],{"class":179}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[3284,122950,122952],{"id":122951},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[25089,122954,122956],{"id":122955},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[26001,122958,122960],{"id":122959},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[153,122962,122964],{"className":121582,"code":122963,"language":121584,"meta":158,"style":158},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[71,122965,122966,122971,122982,122987,122997,123002],{"__ignoreMap":158},[162,122967,122968],{"class":164,"line":165},[162,122969,122970],{"class":361},"# 安装英伟达驱动\n",[162,122972,122973,122975,122977,122979],{"class":164,"line":197},[162,122974,27668],{"class":5082},[162,122976,120376],{"class":179},[162,122978,26925],{"class":179},[162,122980,122981],{"class":179}," nvidia-driver-版本号\n",[162,122983,122984],{"class":164,"line":228},[162,122985,122986],{"class":361},"# 重启 \n",[162,122988,122989,122991,122993,122995],{"class":164,"line":252},[162,122990,27668],{"class":5082},[162,122992,122695],{"class":179},[162,122994,122698],{"class":207},[162,122996,122701],{"class":179},[162,122998,122999],{"class":164,"line":328},[162,123000,123001],{"class":361},"# 检查驱动是否安装成功\n",[162,123003,123004],{"class":164,"line":466},[162,123005,123006],{"class":5082},"nvidia-smi\n",[26001,123008,123010],{"id":123009},"_35212-debian","3.5.2.1.2 Debian",[153,123012,123014],{"className":121582,"code":123013,"language":121584,"meta":158,"style":158},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[71,123015,123016,123020,123034,123038,123048,123052],{"__ignoreMap":158},[162,123017,123018],{"class":164,"line":165},[162,123019,122970],{"class":361},[162,123021,123022,123024,123026,123028,123031],{"class":164,"line":197},[162,123023,27668],{"class":5082},[162,123025,120376],{"class":179},[162,123027,26925],{"class":179},[162,123029,123030],{"class":179}," nvidia-driver",[162,123032,123033],{"class":179}," nvidia-settings\n",[162,123035,123036],{"class":164,"line":228},[162,123037,122986],{"class":361},[162,123039,123040,123042,123044,123046],{"class":164,"line":252},[162,123041,27668],{"class":5082},[162,123043,122695],{"class":179},[162,123045,122698],{"class":207},[162,123047,122701],{"class":179},[162,123049,123050],{"class":164,"line":328},[162,123051,123001],{"class":361},[162,123053,123054],{"class":164,"line":466},[162,123055,123006],{"class":5082},[25089,123057,123059],{"id":123058},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,123061,123062,123063,123066],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[3453,123064,123065],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,123068,123069,123070],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[26644,123071,123072],{},[3453,123073,123074],{},"（也可以不禁用桌面环境，直接进行下一步。）",[153,123076,123078],{"className":121582,"code":123077,"language":121584,"meta":158,"style":158},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[71,123079,123080,123085,123095,123100,123113,123118],{"__ignoreMap":158},[162,123081,123082],{"class":164,"line":165},[162,123083,123084],{"class":361},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[162,123086,123087,123089,123092],{"class":164,"line":197},[162,123088,27668],{"class":5082},[162,123090,123091],{"class":179}," telinit",[162,123093,123094],{"class":207}," 3\n",[162,123096,123097],{"class":164,"line":228},[162,123098,123099],{"class":361},"# ubuntu 使用下方命令\n",[162,123101,123102,123104,123107,123110],{"class":164,"line":252},[162,123103,27668],{"class":5082},[162,123105,123106],{"class":179}," service",[162,123108,123109],{"class":179}," lightdm",[162,123111,123112],{"class":179}," stop\n",[162,123114,123115],{"class":164,"line":328},[162,123116,123117],{"class":361},"# Fedora 使用下方命令\n",[162,123119,123120,123122,123124,123127],{"class":164,"line":466},[162,123121,27668],{"class":5082},[162,123123,29603],{"class":179},[162,123125,123126],{"class":179}," isolate",[162,123128,123129],{"class":179}," multi-user.target\n",[19,123131,123132],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[153,123134,123136],{"className":121582,"code":123135,"language":121584,"meta":158,"style":158},"# 编译环境+准备工作\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",[71,123137,123138,123143,123154,123159,123166,123171,123183,123188,123195,123200],{"__ignoreMap":158},[162,123139,123140],{"class":164,"line":165},[162,123141,123142],{"class":361},"# 编译环境+准备工作\n",[162,123144,123145,123147,123149,123151],{"class":164,"line":197},[162,123146,27668],{"class":5082},[162,123148,120376],{"class":179},[162,123150,26925],{"class":179},[162,123152,123153],{"class":179}," build-essential\n",[162,123155,123156],{"class":164,"line":228},[162,123157,123158],{"class":361},"# 进入到.run目录中\n",[162,123160,123161,123163],{"class":164,"line":252},[162,123162,104340],{"class":207},[162,123164,123165],{"class":179}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[162,123167,123168],{"class":164,"line":328},[162,123169,123170],{"class":361},"# 给驱动文件增加可执行权限：\n",[162,123172,123173,123175,123177,123180],{"class":164,"line":466},[162,123174,27668],{"class":5082},[162,123176,27671],{"class":179},[162,123178,123179],{"class":179}," a+x",[162,123181,123182],{"class":179}," NVIDIA-Linux-x86_64-550.107.02.run\n",[162,123184,123185],{"class":164,"line":471},[162,123186,123187],{"class":361},"# 然后执行安装：\n",[162,123189,123190,123192],{"class":164,"line":687},[162,123191,27668],{"class":5082},[162,123193,123194],{"class":179}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[162,123196,123197],{"class":164,"line":692},[162,123198,123199],{"class":361},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[162,123201,123202,123204,123207],{"class":164,"line":698},[162,123203,27668],{"class":5082},[162,123205,123206],{"class":179}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[162,123208,123209],{"class":207},"  --no-opengl-files\n",[19,123211,123212],{},"安装完毕重启即可",[153,123214,123216],{"className":121582,"code":123215,"language":121584,"meta":158,"style":158},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[71,123217,123218,123222,123228,123232],{"__ignoreMap":158},[162,123219,123220],{"class":164,"line":165},[162,123221,122986],{"class":361},[162,123223,123224,123226],{"class":164,"line":197},[162,123225,27668],{"class":5082},[162,123227,29737],{"class":179},[162,123229,123230],{"class":164,"line":228},[162,123231,123001],{"class":361},[162,123233,123234],{"class":164,"line":252},[162,123235,123006],{"class":5082},[3284,123237,123239],{"id":123238},"_353-安装cuda","3.5.3 安装CUDA",[19,123241,123242],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,123244,123245],{},[4602,123246],{"alt":158,"src":123247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[1452,123249,123250],{},[1455,123251,123252],{},"先查看显卡驱动所支持的最高CUDA版本",[153,123254,123255],{"className":121582,"code":123006,"language":121584,"meta":158,"style":158},[71,123256,123257],{"__ignoreMap":158},[162,123258,123259],{"class":164,"line":165},[162,123260,123006],{"class":5082},[19,123262,123263],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,123265,123266],{},[4602,123267],{"alt":158,"src":123268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[1452,123270,123271],{"start":197},[1455,123272,123273],{},"下载CUDA并安装CUDA",[19,123275,121361,123276],{},[3538,123277,121364],{"href":121364,"rel":123278},[26956],[19,123280,123281],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,123283,123284],{},[4602,123285],{"alt":158,"src":123286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,123288,123289,123290,123295],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[3538,123291,123294],{"href":123292,"rel":123293},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[26956],"Vinci机器人队单片机教程","）",[19,123297,123298],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,123300,123301],{},[4602,123302],{"alt":158,"src":123303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,123305,123306],{},"将最下方框框里的命令敲入终端",[153,123308,123310],{"className":121582,"code":123309,"language":121584,"meta":158,"style":158},"# 在当前文件夹下创建一个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",[71,123311,123312,123317,123326,123331,123338,123343,123351,123356,123367,123372],{"__ignoreMap":158},[162,123313,123314],{"class":164,"line":165},[162,123315,123316],{"class":361},"# 在当前文件夹下创建一个ttt的子文件夹\n",[162,123318,123319,123321,123323],{"class":164,"line":197},[162,123320,104330],{"class":5082},[162,123322,32304],{"class":207},[162,123324,123325],{"class":179}," .\u002Fttt\n",[162,123327,123328],{"class":164,"line":228},[162,123329,123330],{"class":361},"# 进入ttt文件夹\n",[162,123332,123333,123335],{"class":164,"line":252},[162,123334,104340],{"class":207},[162,123336,123337],{"class":179}," ttt\n",[162,123339,123340],{"class":164,"line":328},[162,123341,123342],{"class":361},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[162,123344,123345,123348],{"class":164,"line":466},[162,123346,123347],{"class":5082},"wget",[162,123349,123350],{"class":179}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[162,123352,123353],{"class":164,"line":471},[162,123354,123355],{"class":361},"# 给予权限\n",[162,123357,123358,123360,123362,123364],{"class":164,"line":687},[162,123359,27668],{"class":5082},[162,123361,27671],{"class":179},[162,123363,123179],{"class":179},[162,123365,123366],{"class":179}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[162,123368,123369],{"class":164,"line":692},[162,123370,123371],{"class":361},"# 运行脚本\n",[162,123373,123374,123376],{"class":164,"line":698},[162,123375,27668],{"class":5082},[162,123377,123366],{"class":179},[19,123379,123380],{},[4602,123381],{"alt":158,"src":123382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,123384,123385],{},"正在安装中：",[19,123387,123388],{},[4602,123389],{"alt":158,"src":123390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,123392,123393],{},"输入accept接受即可",[19,123395,123396],{},[4602,123397],{"alt":158,"src":123398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,123400,123401],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,123403,123404],{},[4602,123405],{"alt":158,"src":123406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,123408,123409],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,123411,123412],{},[4602,123413],{"alt":158,"src":123414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[1452,123416,123417],{"start":228},[1455,123418,123419],{},"配置环境",[19,123421,123422],{},"根据上方确认一下路径，比如我上面红色框起来的为",[153,123424,123426],{"className":121582,"code":123425,"language":121584,"meta":158,"style":158},"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",[71,123427,123428,123444,123459],{"__ignoreMap":158},[162,123429,123430,123433,123436,123439,123442],{"class":164,"line":165},[162,123431,123432],{"class":5082},"Please",[162,123434,123435],{"class":179}," make",[162,123437,123438],{"class":179}," sure",[162,123440,123441],{"class":179}," that",[162,123443,5791],{"class":168},[162,123445,123446,123448,123451,123454,123457],{"class":164,"line":197},[162,123447,55341],{"class":5082},[162,123449,123450],{"class":179},"   PATH",[162,123452,123453],{"class":179}," includes",[162,123455,123456],{"class":179}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[162,123458,5791],{"class":168},[162,123460,123461,123463,123466,123468,123471,123474,123476,123479,123482,123485,123488,123490,123493,123495],{"class":164,"line":228},[162,123462,55341],{"class":5082},[162,123464,123465],{"class":179},"   LD_LIBRARY_PATH",[162,123467,123453],{"class":179},[162,123469,123470],{"class":179}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[162,123472,123473],{"class":179}," or,",[162,123475,8317],{"class":179},[162,123477,123478],{"class":179}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[162,123480,123481],{"class":179}," to",[162,123483,123484],{"class":179}," \u002Fetc\u002Fld.so.conf",[162,123486,123487],{"class":179}," and",[162,123489,30320],{"class":179},[162,123491,123492],{"class":179}," ldconfig",[162,123494,67671],{"class":179},[162,123496,123497],{"class":179}," root\n",[19,123499,123500],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[153,123502,123504],{"className":121582,"code":123503,"language":121584,"meta":158,"style":158},"which nvcc\n",[71,123505,123506],{"__ignoreMap":158},[162,123507,123508,123511],{"class":164,"line":165},[162,123509,123510],{"class":207},"which",[162,123512,123513],{"class":179}," nvcc\n",[19,123515,123516],{},[4602,123517],{"alt":158,"src":123518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,123520,123521],{},"所以我进行以下操作：",[153,123523,123525],{"className":121582,"code":123524,"language":121584,"meta":158,"style":158},"sudo vim ~\u002F.bashrc\n",[71,123526,123527],{"__ignoreMap":158},[162,123528,123529,123531,123533],{"class":164,"line":165},[162,123530,27668],{"class":5082},[162,123532,121642],{"class":179},[162,123534,123535],{"class":179}," ~\u002F.bashrc\n",[19,123537,123538],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[153,123540,123542],{"className":121582,"code":123541,"language":121584,"meta":158,"style":158},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[71,123543,123544,123556],{"__ignoreMap":158},[162,123545,123546,123548,123551,123553],{"class":164,"line":165},[162,123547,28134],{"class":172},[162,123549,123550],{"class":168}," PATH",[162,123552,173],{"class":172},[162,123554,123555],{"class":168},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[162,123557,123558,123560,123563,123565],{"class":164,"line":197},[162,123559,28134],{"class":172},[162,123561,123562],{"class":168}," LD_LIBRARY_PATH",[162,123564,173],{"class":172},[162,123566,123567],{"class":168},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,123569,123570],{},[4602,123571],{"alt":158,"src":123572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[153,123574,123576],{"className":121582,"code":123575,"language":121584,"meta":158,"style":158},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[71,123577,123578,123583,123589,123594],{"__ignoreMap":158},[162,123579,123580],{"class":164,"line":165},[162,123581,123582],{"class":361},"# 刷新当前终端的环境变量\n",[162,123584,123585,123587],{"class":164,"line":197},[162,123586,103957],{"class":207},[162,123588,123535],{"class":179},[162,123590,123591],{"class":164,"line":228},[162,123592,123593],{"class":361},"# 验证CUDA是否安装成功\n",[162,123595,123596,123599],{"class":164,"line":252},[162,123597,123598],{"class":5082},"nvcc",[162,123600,123601],{"class":207}," -V\n",[19,123603,123604],{},"出现下图这种则安装成功。",[19,123606,123607],{},[4602,123608],{"alt":158,"src":123609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[3284,123611,123613],{"id":123612},"_354-安装cudnn","3.5.4 安装cuDNN",[1452,123615,123616],{},[1455,123617,123618],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,123620,123621,123622,123627],{},"前往 NVIDIA cuDNN 下载页面：",[3538,123623,123626],{"href":123624,"rel":123625},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[26956],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,123629,123630],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,123632,123633],{},[4602,123634],{"alt":158,"src":123635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,123637,123638],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,123640,123641],{},[4602,123642],{"alt":158,"src":123643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,123645,123646],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,123648,123649],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,123651,123652],{},[3453,123653,123654],{},"我这里选择所有Linux X86_64最通用的办法：",[19,123656,123657],{},"下载好的：",[19,123659,123660],{},[4602,123661],{"alt":158,"src":123662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[1452,123664,123665],{"start":197},[1455,123666,123667],{},"安装cuDNN",[19,123669,123670],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,123672,123673],{},[4602,123674],{"alt":158,"src":123675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,123677,123678],{},"解压文件，并复制到对应位置完成安装",[153,123680,123682],{"className":121582,"code":123681,"language":121584,"meta":158,"style":158},"# 解压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",[71,123683,123684,123689,123700,123705,123712,123717,123733,123747,123752,123763,123772,123776,123792],{"__ignoreMap":158},[162,123685,123686],{"class":164,"line":165},[162,123687,123688],{"class":361},"# 解压cuDNN文件\n",[162,123690,123691,123694,123697],{"class":164,"line":197},[162,123692,123693],{"class":5082},"tar",[162,123695,123696],{"class":207}," -xvf",[162,123698,123699],{"class":179}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[162,123701,123702],{"class":164,"line":228},[162,123703,123704],{"class":361},"# cd进文件夹\n",[162,123706,123707,123709],{"class":164,"line":252},[162,123708,104340],{"class":207},[162,123710,123711],{"class":179}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[162,123713,123714],{"class":164,"line":328},[162,123715,123716],{"class":361},"# 复制cuDNN文件到CUDA目录\n",[162,123718,123719,123721,123723,123726,123728,123731],{"class":164,"line":466},[162,123720,27668],{"class":5082},[162,123722,30950],{"class":179},[162,123724,123725],{"class":179}," include\u002Fcudnn",[162,123727,3745],{"class":207},[162,123729,123730],{"class":179},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[162,123732,5791],{"class":168},[162,123734,123735,123737,123739,123742,123744],{"class":164,"line":471},[162,123736,27668],{"class":5082},[162,123738,30950],{"class":179},[162,123740,123741],{"class":179}," lib\u002Flibcudnn",[162,123743,3745],{"class":207},[162,123745,123746],{"class":179},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[162,123748,123749],{"class":164,"line":687},[162,123750,123751],{"class":361},"# 对比一下有没有缺文件\n",[162,123753,123754,123756,123759,123761],{"class":164,"line":692},[162,123755,29851],{"class":5082},[162,123757,123758],{"class":179}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[162,123760,3745],{"class":207},[162,123762,5791],{"class":168},[162,123764,123765,123767,123770],{"class":164,"line":698},[162,123766,29851],{"class":5082},[162,123768,123769],{"class":179}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[162,123771,122307],{"class":207},[162,123773,123774],{"class":164,"line":2955},[162,123775,123355],{"class":361},[162,123777,123778,123780,123782,123785,123787,123789],{"class":164,"line":2960},[162,123779,27668],{"class":5082},[162,123781,27671],{"class":179},[162,123783,123784],{"class":179}," a+r",[162,123786,123758],{"class":179},[162,123788,3745],{"class":207},[162,123790,123791],{"class":168},"   \n",[162,123793,123794,123796,123798,123800,123802],{"class":164,"line":2971},[162,123795,27668],{"class":5082},[162,123797,27671],{"class":179},[162,123799,123784],{"class":179},[162,123801,123769],{"class":179},[162,123803,122307],{"class":207},[1452,123805,123806],{"start":228},[1455,123807,123808],{},"检查是否安装成功",[153,123810,123812],{"className":121582,"code":123811,"language":121584,"meta":158,"style":158},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[71,123813,123814,123819],{"__ignoreMap":158},[162,123815,123816],{"class":164,"line":165},[162,123817,123818],{"class":361},"# 检查cuDNN版本命令\n",[162,123820,123821,123824,123827,123829,123831,123834,123837],{"class":164,"line":197},[162,123822,123823],{"class":5082},"cat",[162,123825,123826],{"class":179}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[162,123828,28201],{"class":172},[162,123830,33324],{"class":5082},[162,123832,123833],{"class":179}," CUDNN_MAJOR",[162,123835,123836],{"class":207}," -A",[162,123838,50796],{"class":207},[19,123840,123841],{},"出现下图这样的就是安装成功了",[19,123843,123844],{},[4602,123845],{"alt":158,"src":123846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[1452,123848,123849],{"start":252},[1455,123850,123851],{},"软链接(一般不需要)",[153,123853,123855],{"className":121582,"code":123854,"language":121584,"meta":158,"style":158},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[71,123856,123857,123862],{"__ignoreMap":158},[162,123858,123859],{"class":164,"line":165},[162,123860,123861],{"class":361},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[162,123863,123864,123866],{"class":164,"line":197},[162,123865,27668],{"class":5082},[162,123867,123868],{"class":179}," ldconfig\n",[19,123870,123871],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[153,123873,123878],{"className":123874,"code":123875,"language":123876,"meta":123877,"style":158},"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",[71,123879,123880,123885,123890,123895,123900,123905,123910],{"__ignoreMap":158},[162,123881,123882],{"class":164,"line":165},[162,123883,123884],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[162,123886,123887],{"class":164,"line":197},[162,123888,123889],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[162,123891,123892],{"class":164,"line":228},[162,123893,123894],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[162,123896,123897],{"class":164,"line":252},[162,123898,123899],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[162,123901,123902],{"class":164,"line":328},[162,123903,123904],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[162,123906,123907],{"class":164,"line":466},[162,123908,123909],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[162,123911,123912],{"class":164,"line":471},[162,123913,123914],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,123916,123917],{},"运行下方的命令",[153,123919,123921],{"className":121582,"code":123920,"language":121584,"meta":158,"style":158},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[71,123922,123923,123928,123935,123940],{"__ignoreMap":158},[162,123924,123925],{"class":164,"line":165},[162,123926,123927],{"class":361},"# cd进入CUDA路径\n",[162,123929,123930,123932],{"class":164,"line":197},[162,123931,104340],{"class":207},[162,123933,123934],{"class":179}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[162,123936,123937],{"class":164,"line":228},[162,123938,123939],{"class":361}," # 查看本路径下的需要软链接的文件名\n",[162,123941,123942],{"class":164,"line":252},[162,123943,123944],{"class":5082}," ls\n",[19,123946,123947],{},[4602,123948],{"alt":158,"src":123949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,123951,123952,123953,21501,123956,21501,123959,123962],{},"如上图，我需要将",[71,123954,123955],{},"libcudnn_xxx_xxxxx.so.8.9.7",[71,123957,123958],{},"libcudnn_xxx_xxxxx.so.8",[71,123960,123961],{},"libcudnn_xxx_xxxxx.so","软链接",[153,123964,123966],{"className":121582,"code":123965,"language":121584,"meta":158,"style":158},"# 创建符号链接。对于每个 .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",[71,123967,123968,123973,123989,124003,124017,124031,124045,124059,124073,124078,124084,124089],{"__ignoreMap":158},[162,123969,123970],{"class":164,"line":165},[162,123971,123972],{"class":361},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[162,123974,123975,123977,123980,123983,123986],{"class":164,"line":197},[162,123976,27668],{"class":5082},[162,123978,123979],{"class":179}," ln",[162,123981,123982],{"class":207}," -sf",[162,123984,123985],{"class":179}," libcudnn_cnn_train.so.8.9.7",[162,123987,123988],{"class":179}," libcudnn_cnn_train.so.8\n",[162,123990,123991,123993,123995,123997,124000],{"class":164,"line":228},[162,123992,27668],{"class":5082},[162,123994,123979],{"class":179},[162,123996,123982],{"class":207},[162,123998,123999],{"class":179}," libcudnn_adv_infer.so.8.9.7",[162,124001,124002],{"class":179}," libcudnn_adv_infer.so.8\n",[162,124004,124005,124007,124009,124011,124014],{"class":164,"line":252},[162,124006,27668],{"class":5082},[162,124008,123979],{"class":179},[162,124010,123982],{"class":207},[162,124012,124013],{"class":179}," libcudnn_adv_train.so.8.9.7",[162,124015,124016],{"class":179}," libcudnn_adv_train.so.8\n",[162,124018,124019,124021,124023,124025,124028],{"class":164,"line":328},[162,124020,27668],{"class":5082},[162,124022,123979],{"class":179},[162,124024,123982],{"class":207},[162,124026,124027],{"class":179}," libcudnn_cnn_infer.so.8.9.7",[162,124029,124030],{"class":179}," libcudnn_cnn_infer.so.8\n",[162,124032,124033,124035,124037,124039,124042],{"class":164,"line":466},[162,124034,27668],{"class":5082},[162,124036,123979],{"class":179},[162,124038,123982],{"class":207},[162,124040,124041],{"class":179}," libcudnn.so.8.9.7",[162,124043,124044],{"class":179}," libcudnn.so.8\n",[162,124046,124047,124049,124051,124053,124056],{"class":164,"line":471},[162,124048,27668],{"class":5082},[162,124050,123979],{"class":179},[162,124052,123982],{"class":207},[162,124054,124055],{"class":179}," libcudnn_ops_infer.so.8.9.7",[162,124057,124058],{"class":179}," libcudnn_ops_infer.so.8\n",[162,124060,124061,124063,124065,124067,124070],{"class":164,"line":687},[162,124062,27668],{"class":5082},[162,124064,123979],{"class":179},[162,124066,123982],{"class":207},[162,124068,124069],{"class":179}," libcudnn_ops_train.so.8.9.7",[162,124071,124072],{"class":179}," libcudnn_ops_train.so.8\n",[162,124074,124075],{"class":164,"line":692},[162,124076,124077],{"class":361},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[162,124079,124080,124082],{"class":164,"line":698},[162,124081,27668],{"class":5082},[162,124083,123868],{"class":179},[162,124085,124086],{"class":164,"line":2955},[162,124087,124088],{"class":361},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[162,124090,124091,124093,124096,124099,124101,124104],{"class":164,"line":2960},[162,124092,29851],{"class":5082},[162,124094,124095],{"class":207}," -l",[162,124097,124098],{"class":179}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[162,124100,3745],{"class":207},[162,124102,124103],{"class":179},".so",[162,124105,122307],{"class":207},[3284,124107,124109],{"id":124108},"_355-常见问题","3.5.5 常见问题",[1452,124111,124112],{},[1455,124113,124114],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[153,124116,124118],{"className":121582,"code":124117,"language":121584,"meta":158,"style":158},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[71,124119,124120],{"__ignoreMap":158},[162,124121,124122,124124,124126],{"class":164,"line":165},[162,124123,27668],{"class":5082},[162,124125,121642],{"class":179},[162,124127,124128],{"class":179}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,124130,124131],{},"blacklist-nouveau.conf文件内容如下：",[153,124133,124135],{"className":121582,"code":124134,"language":121584,"meta":158,"style":158},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[71,124136,124137,124145,124152,124164,124174],{"__ignoreMap":158},[162,124138,124139,124142],{"class":164,"line":165},[162,124140,124141],{"class":5082},"blacklist",[162,124143,124144],{"class":179}," nouveau\n",[162,124146,124147,124149],{"class":164,"line":197},[162,124148,124141],{"class":5082},[162,124150,124151],{"class":179}," lbm-nouveau\n",[162,124153,124154,124156,124159,124162],{"class":164,"line":228},[162,124155,118990],{"class":5082},[162,124157,124158],{"class":179}," nouveau",[162,124160,124161],{"class":179}," modeset=",[162,124163,6200],{"class":207},[162,124165,124166,124169,124171],{"class":164,"line":252},[162,124167,124168],{"class":207},"alias",[162,124170,124158],{"class":179},[162,124172,124173],{"class":179}," off\n",[162,124175,124176,124178,124181],{"class":164,"line":328},[162,124177,124168],{"class":207},[162,124179,124180],{"class":179}," lbm-nouveau",[162,124182,124173],{"class":179},[19,124184,124185],{},"接着运行下方命令",[153,124187,124189],{"className":121582,"code":124188,"language":121584,"meta":158,"style":158},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[71,124190,124191,124201,124206],{"__ignoreMap":158},[162,124192,124193,124195,124198],{"class":164,"line":165},[162,124194,27668],{"class":5082},[162,124196,124197],{"class":179}," update-initramfs",[162,124199,124200],{"class":207}," -u\n",[162,124202,124203],{"class":164,"line":197},[162,124204,124205],{"class":5082},"或者\n",[162,124207,124208,124210,124213],{"class":164,"line":228},[162,124209,27668],{"class":5082},[162,124211,124212],{"class":179}," dracut",[162,124214,124215],{"class":207}," --force\n",[19,124217,124218],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[153,124220,124222],{"className":121582,"code":124221,"language":121584,"meta":158,"style":158},"lsmod | grep nouveau\n",[71,124223,124224],{"__ignoreMap":158},[162,124225,124226,124229,124231,124233],{"class":164,"line":165},[162,124227,124228],{"class":5082},"lsmod",[162,124230,28201],{"class":172},[162,124232,33324],{"class":5082},[162,124234,124144],{"class":179},[1452,124236,124237],{"start":197},[1455,124238,124239],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[153,124241,124243],{"className":121582,"code":124242,"language":121584,"meta":158,"style":158},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[71,124244,124245],{"__ignoreMap":158},[162,124246,124247,124249,124251],{"class":164,"line":165},[162,124248,27668],{"class":5082},[162,124250,121642],{"class":179},[162,124252,124253],{"class":179}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,124255,124256],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[153,124258,124260],{"className":121582,"code":124259,"language":121584,"meta":158,"style":158},"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",[71,124261,124262,124270,124278,124286,124293,124301,124311,124319],{"__ignoreMap":158},[162,124263,124264,124267],{"class":164,"line":165},[162,124265,124266],{"class":5082},"Section",[162,124268,124269],{"class":179}," \"OutputClass\"\n",[162,124271,124272,124275],{"class":164,"line":197},[162,124273,124274],{"class":5082},"   Identifier",[162,124276,124277],{"class":179}," \"nvidia\"\n",[162,124279,124280,124283],{"class":164,"line":228},[162,124281,124282],{"class":5082},"   MatchDriver",[162,124284,124285],{"class":179}," \"nvidia-drm\"\n",[162,124287,124288,124291],{"class":164,"line":252},[162,124289,124290],{"class":5082},"   Driver",[162,124292,124277],{"class":179},[162,124294,124295,124298],{"class":164,"line":328},[162,124296,124297],{"class":5082},"   Option",[162,124299,124300],{"class":179}," \"AllowEmptyInitialConfiguration\"\n",[162,124302,124303,124305,124308],{"class":164,"line":466},[162,124304,124297],{"class":5082},[162,124306,124307],{"class":179}," \"PrimaryGPU\"",[162,124309,124310],{"class":179}," \"yes\"\n",[162,124312,124313,124316],{"class":164,"line":471},[162,124314,124315],{"class":5082},"   ModulePath",[162,124317,124318],{"class":179}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[162,124320,124321],{"class":164,"line":687},[162,124322,124323],{"class":5082},"EndSection\n",[1452,124325,124326],{"start":228},[1455,124327,124328],{},"安装N卡驱动提示错误",[153,124330,124332],{"className":123874,"code":124331,"language":123876,"meta":123877,"style":158},"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",[71,124333,124334],{"__ignoreMap":158},[162,124335,124336],{"class":164,"line":165},[162,124337,124331],{},[1452,124339,124340],{},[1455,124341,124342],{},"检查当前运行的内核版本：",[19,124344,124345],{},"运行以下命令以查看你当前正在使用的内核版本：",[153,124347,124349],{"className":120355,"code":124348,"language":120357,"meta":158,"style":158},"uname -r\n",[71,124350,124351],{"__ignoreMap":158},[162,124352,124353,124355],{"class":164,"line":165},[162,124354,73269],{"class":5082},[162,124356,124357],{"class":207}," -r\n",[1452,124359,124360],{"start":197},[1455,124361,124362],{},"安装内核开发文件：",[19,124364,124365,124366,124369],{},"确保你已经安装了与当前内核版本相匹配的 ",[71,124367,124368],{},"kernel-devel"," 包。运行以下命令来安装：",[153,124371,124373],{"className":120355,"code":124372,"language":120357,"meta":158,"style":158},"sudo dnf install kernel-devel-$(uname -r)\n",[71,124374,124375],{"__ignoreMap":158},[162,124376,124377,124379,124381,124383,124386,124388,124390,124392],{"class":164,"line":165},[162,124378,27668],{"class":5082},[162,124380,29405],{"class":179},[162,124382,26925],{"class":179},[162,124384,124385],{"class":179}," kernel-devel-",[162,124387,28191],{"class":168},[162,124389,73269],{"class":5082},[162,124391,122698],{"class":207},[162,124393,434],{"class":168},[19,124395,124396],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[1452,124398,124399],{"start":228},[1455,124400,124401],{},"安装内核源代码（如果需要）：",[19,124403,124404],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[153,124406,124408],{"className":120355,"code":124407,"language":120357,"meta":158,"style":158},"sudo dnf install kernel-headers kernel-source\n",[71,124409,124410],{"__ignoreMap":158},[162,124411,124412,124414,124416,124418,124421],{"class":164,"line":165},[162,124413,27668],{"class":5082},[162,124415,29405],{"class":179},[162,124417,26925],{"class":179},[162,124419,124420],{"class":179}," kernel-headers",[162,124422,124423],{"class":179}," kernel-source\n",[1452,124425,124426],{"start":252},[1455,124427,124428],{},"检查安装：",[19,124430,124431,124432,124435],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[71,124433,124434],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[153,124437,124439],{"className":120355,"code":124438,"language":120357,"meta":158,"style":158},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[71,124440,124441],{"__ignoreMap":158},[162,124442,124443,124445],{"class":164,"line":165},[162,124444,29851],{"class":5082},[162,124446,124447],{"class":179}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,124449,124450,124451,124454],{},"如果仍然遇到问题，可以通过 ",[71,124452,124453],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[3219,124456,124457],{},"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":158,"searchDepth":197,"depth":197,"links":124459},[124460,124464,124474,124478,124479],{"id":121558,"depth":197,"text":121559,"children":124461},[124462,124463],{"id":121568,"depth":228,"text":121569},{"id":121578,"depth":228,"text":121579},{"id":121778,"depth":197,"text":121779,"children":124465},[124466,124467,124468,124469,124470,124471,124472,124473],{"id":121782,"depth":228,"text":121783},{"id":121852,"depth":228,"text":121853},{"id":121941,"depth":228,"text":121942},{"id":122186,"depth":228,"text":122187},{"id":122256,"depth":228,"text":122257},{"id":122323,"depth":228,"text":122324},{"id":122358,"depth":228,"text":122359},{"id":122413,"depth":228,"text":122414},{"id":122464,"depth":197,"text":122465,"children":124475},[124476,124477],{"id":122468,"depth":228,"text":122469},{"id":122548,"depth":228,"text":122549},{"id":122734,"depth":197,"text":122735},{"id":122906,"depth":197,"text":122907,"children":124480},[124481,124482,124483,124484,124485],{"id":122910,"depth":228,"text":122911},{"id":122951,"depth":228,"text":122952},{"id":123238,"depth":228,"text":123239},{"id":123612,"depth":228,"text":123613},{"id":124108,"depth":228,"text":124109},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":121550,"description":3241},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":124492,"title":124493,"body":124494,"description":3241,"extension":3242,"meta":124834,"navigation":300,"path":124835,"seo":124836,"stem":124837,"__hash__":124838},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":124495,"toc":124832},[124496,124499,124504,124507,124753,124758,124761,124797,124800,124829],[10,124497,124493],{"id":124498},"_4-命令教程长期积累",[1452,124500,124501],{},[1455,124502,124503],{},"大多数命令",[19,124505,124506],{},"常用 Linux 命令速查：",[153,124508,124510],{"className":120355,"code":124509,"language":120357,"meta":158,"style":158},"# 文件与目录\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",[71,124511,124512,124517,124524,124531,124539,124546,124553,124561,124569,124576,124583,124591,124595,124600,124607,124615,124622,124626,124631,124638,124646,124654,124662,124670,124674,124679,124687,124694,124701,124709,124717,124721,124726,124735,124744],{"__ignoreMap":158},[162,124513,124514],{"class":164,"line":165},[162,124515,124516],{"class":361},"# 文件与目录\n",[162,124518,124519,124521],{"class":164,"line":197},[162,124520,29851],{"class":5082},[162,124522,124523],{"class":361},"        # 列出目录内容\n",[162,124525,124526,124528],{"class":164,"line":228},[162,124527,104340],{"class":207},[162,124529,124530],{"class":361},"        # 切换目录\n",[162,124532,124533,124536],{"class":164,"line":252},[162,124534,124535],{"class":207},"pwd",[162,124537,124538],{"class":361},"       # 显示当前路径\n",[162,124540,124541,124543],{"class":164,"line":328},[162,124542,104330],{"class":5082},[162,124544,124545],{"class":361},"     # 创建目录\n",[162,124547,124548,124550],{"class":164,"line":466},[162,124549,28414],{"class":5082},[162,124551,124552],{"class":361},"        # 删除文件或目录\n",[162,124554,124555,124558],{"class":164,"line":471},[162,124556,124557],{"class":5082},"cp",[162,124559,124560],{"class":361},"        # 复制文件或目录\n",[162,124562,124563,124566],{"class":164,"line":687},[162,124564,124565],{"class":5082},"mv",[162,124567,124568],{"class":361},"        # 移动\u002F重命名文件或目录\n",[162,124570,124571,124573],{"class":164,"line":692},[162,124572,104347],{"class":5082},[162,124574,124575],{"class":361},"     # 创建空文件\n",[162,124577,124578,124580],{"class":164,"line":698},[162,124579,123823],{"class":5082},[162,124581,124582],{"class":361},"       # 查看文件内容\n",[162,124584,124585,124588],{"class":164,"line":2955},[162,124586,124587],{"class":5082},"head\u002Ftail",[162,124589,124590],{"class":361}," # 查看文件头部\u002F尾部\n",[162,124592,124593],{"class":164,"line":2960},[162,124594,301],{"emptyLinePlaceholder":300},[162,124596,124597],{"class":164,"line":2971},[162,124598,124599],{"class":361},"# 权限管理\n",[162,124601,124602,124604],{"class":164,"line":2984},[162,124603,27703],{"class":5082},[162,124605,124606],{"class":361},"     # 修改文件权限\n",[162,124608,124609,124612],{"class":164,"line":2989},[162,124610,124611],{"class":5082},"chown",[162,124613,124614],{"class":361},"     # 修改文件所有者\n",[162,124616,124617,124619],{"class":164,"line":3011},[162,124618,27668],{"class":5082},[162,124620,124621],{"class":361},"      # 以管理员身份执行\n",[162,124623,124624],{"class":164,"line":3022},[162,124625,301],{"emptyLinePlaceholder":300},[162,124627,124628],{"class":164,"line":3027},[162,124629,124630],{"class":361},"# 系统信息\n",[162,124632,124633,124635],{"class":164,"line":3046},[162,124634,73269],{"class":5082},[162,124636,124637],{"class":361},"     # 系统信息\n",[162,124639,124640,124643],{"class":164,"line":3052},[162,124641,124642],{"class":5082},"df",[162,124644,124645],{"class":361},"        # 磁盘使用情况\n",[162,124647,124648,124651],{"class":164,"line":3057},[162,124649,124650],{"class":5082},"free",[162,124652,124653],{"class":361},"      # 内存使用情况\n",[162,124655,124656,124659],{"class":164,"line":3072},[162,124657,124658],{"class":5082},"top\u002Fhtop",[162,124660,124661],{"class":361},"  # 进程监控\n",[162,124663,124664,124667],{"class":164,"line":3077},[162,124665,124666],{"class":5082},"ps",[162,124668,124669],{"class":361},"        # 查看进程\n",[162,124671,124672],{"class":164,"line":3100},[162,124673,301],{"emptyLinePlaceholder":300},[162,124675,124676],{"class":164,"line":3140},[162,124677,124678],{"class":361},"# 网络\n",[162,124680,124681,124684],{"class":164,"line":4878},[162,124682,124683],{"class":5082},"ping",[162,124685,124686],{"class":361},"      # 测试网络连通性\n",[162,124688,124689,124691],{"class":164,"line":4883},[162,124690,29939],{"class":5082},[162,124692,124693],{"class":361},"      # 发送 HTTP 请求\n",[162,124695,124696,124698],{"class":164,"line":4897},[162,124697,123347],{"class":5082},[162,124699,124700],{"class":361},"      # 下载文件\n",[162,124702,124703,124706],{"class":164,"line":4902},[162,124704,124705],{"class":5082},"ssh",[162,124707,124708],{"class":361},"       # 远程登录\n",[162,124710,124711,124714],{"class":164,"line":5694},[162,124712,124713],{"class":5082},"scp",[162,124715,124716],{"class":361},"       # 远程文件传输\n",[162,124718,124719],{"class":164,"line":5708},[162,124720,301],{"emptyLinePlaceholder":300},[162,124722,124723],{"class":164,"line":5716},[162,124724,124725],{"class":361},"# 包管理（Debian\u002FUbuntu）\n",[162,124727,124728,124730,124732],{"class":164,"line":5721},[162,124729,120427],{"class":5082},[162,124731,120406],{"class":179},[162,124733,124734],{"class":361},"   # 更新软件源\n",[162,124736,124737,124739,124741],{"class":164,"line":5727},[162,124738,120427],{"class":5082},[162,124740,26925],{"class":179},[162,124742,124743],{"class":361},"  # 安装软件包\n",[162,124745,124746,124748,124750],{"class":164,"line":5733},[162,124747,120427],{"class":5082},[162,124749,29169],{"class":179},[162,124751,124752],{"class":361},"   # 卸载软件包\n",[1452,124754,124755],{"start":197},[1455,124756,124757],{},"KDE Dolphin 以root打开",[19,124759,124760],{},"kde5",[153,124762,124764],{"className":120355,"code":124763,"language":120357,"meta":158,"style":158},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[71,124765,124766],{"__ignoreMap":158},[162,124767,124768,124771,124774,124777,124779,124781,124784,124787,124789,124792,124794],{"class":164,"line":165},[162,124769,124770],{"class":5082},"pkexec",[162,124772,124773],{"class":179}," env",[162,124775,124776],{"class":179}," DISPLAY=",[162,124778,31232],{"class":168},[162,124780,31290],{"class":179},[162,124782,124783],{"class":168},"$XAUTHORITY ",[162,124785,124786],{"class":179},"KDE_SESSION_VERSION=",[162,124788,637],{"class":207},[162,124790,124791],{"class":179}," KDE_FULL_SESSION=",[162,124793,4502],{"class":207},[162,124795,124796],{"class":179}," dolphin\n",[19,124798,124799],{},"kde6",[153,124801,124803],{"className":120355,"code":124802,"language":120357,"meta":158,"style":158},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[71,124804,124805],{"__ignoreMap":158},[162,124806,124807,124809,124811,124813,124815,124817,124819,124821,124823,124825,124827],{"class":164,"line":165},[162,124808,124770],{"class":5082},[162,124810,124773],{"class":179},[162,124812,124776],{"class":179},[162,124814,31232],{"class":168},[162,124816,31290],{"class":179},[162,124818,124783],{"class":168},[162,124820,124786],{"class":179},[162,124822,1314],{"class":207},[162,124824,124791],{"class":179},[162,124826,4502],{"class":207},[162,124828,124796],{"class":179},[3219,124830,124831],{},"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":158,"searchDepth":197,"depth":197,"links":124833},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":124493,"description":3241},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":124840,"title":124841,"body":124842,"description":3241,"extension":3242,"meta":124856,"navigation":300,"path":124857,"seo":124858,"stem":124859,"__hash__":124860},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":124843,"toc":124854},[124844,124847],[10,124845,124841],{"id":124846},"_5-各种环境配置",[19,124848,124849],{},[3538,124850,124853],{"href":124851,"rel":124852},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[26956],"电控组环境搭建大全",{"title":158,"searchDepth":197,"depth":197,"links":124855},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":124841,"description":3241},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":124862,"title":124863,"body":124864,"description":3241,"extension":3242,"meta":125212,"navigation":300,"path":125213,"seo":125214,"stem":125215,"__hash__":125216},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":124865,"toc":125204},[124866,124869,124873,124877,124881,124886,124893,124897,125190,125194,125201],[10,124867,124863],{"id":124868},"_6-拓展功能",[14,124870,124872],{"id":124871},"_61-wine","6.1 Wine",[14,124874,124876],{"id":124875},"_62-android","6.2 Android",[3284,124878,124880],{"id":124879},"_621-i卡a卡","6.2.1 I卡、A卡",[1452,124882,124883],{},[1455,124884,124885],{},"Wayland-Waydroid(体验超级好)",[19,124887,124888,124889],{},"Waydroid 官网与安装指南：",[3538,124890,124891],{"href":124891,"rel":124892},"https:\u002F\u002Fwaydro.id\u002F",[26956],[3284,124894,124896],{"id":124895},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[1452,124898,124899],{},[1455,124900,124901,124902,124904,124905,124909,124911,124914,124919,125116],{},"QEMU-KVM虚拟机 + BlissOS-X86",[56786,124903],{},"BlissOS 官网下载：",[3538,124906,124907],{"href":124907,"rel":124908},"https:\u002F\u002Fblissos.org\u002F",[26956],[56786,124910],{},[4602,124912],{"alt":158,"src":124913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[1452,124915,124916],{"start":228},[1455,124917,124918],{},"比较推荐的配置",[153,124920,124922],{"className":120355,"code":124921,"language":120357,"meta":158,"style":158},"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",[71,124923,124924,124931,124941,124951,124961,124973,124983,124990,125000,125009,125018,125028,125038,125047,125057,125067,125079,125089,125098,125108],{"__ignoreMap":158},[162,124925,124926,124929],{"class":164,"line":165},[162,124927,124928],{"class":5082},"qemu-system-x86_64",[162,124930,27770],{"class":207},[162,124932,124933,124936,124939],{"class":164,"line":197},[162,124934,124935],{"class":207},"        -M",[162,124937,124938],{"class":179}," q35,vmport=off",[162,124940,27770],{"class":207},[162,124942,124943,124946,124949],{"class":164,"line":228},[162,124944,124945],{"class":207},"        -accel",[162,124947,124948],{"class":179}," kvm",[162,124950,27770],{"class":207},[162,124952,124953,124956,124959],{"class":164,"line":252},[162,124954,124955],{"class":207},"        -cpu",[162,124957,124958],{"class":179}," qemu64,+sse3,+sse4.2",[162,124960,27770],{"class":207},[162,124962,124963,124966,124969,124971],{"class":164,"line":328},[162,124964,124965],{"class":207},"        -smp",[162,124967,124968],{"class":179}," 8,cores=",[162,124970,223],{"class":207},[162,124972,27770],{"class":207},[162,124974,124975,124978,124981],{"class":164,"line":466},[162,124976,124977],{"class":207},"        -m",[162,124979,124980],{"class":179}," 6G",[162,124982,27770],{"class":207},[162,124984,124985,124988],{"class":164,"line":471},[162,124986,124987],{"class":207},"        -usb",[162,124989,27770],{"class":207},[162,124991,124992,124995,124998],{"class":164,"line":687},[162,124993,124994],{"class":207},"        -device",[162,124996,124997],{"class":179}," virtio-tablet",[162,124999,27770],{"class":207},[162,125001,125002,125004,125007],{"class":164,"line":692},[162,125003,124994],{"class":207},[162,125005,125006],{"class":179}," virtio-keyboard",[162,125008,27770],{"class":207},[162,125010,125011,125013,125016],{"class":164,"line":698},[162,125012,124994],{"class":207},[162,125014,125015],{"class":179}," usb-tablet",[162,125017,27770],{"class":207},[162,125019,125020,125023,125026],{"class":164,"line":2955},[162,125021,125022],{"class":207},"        -bios",[162,125024,125025],{"class":179}," OVMF-pure-efi64.fd",[162,125027,27770],{"class":207},[162,125029,125030,125033,125036],{"class":164,"line":2960},[162,125031,125032],{"class":207},"        -net",[162,125034,125035],{"class":179}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[162,125037,27770],{"class":207},[162,125039,125040,125042,125045],{"class":164,"line":2971},[162,125041,125032],{"class":207},[162,125043,125044],{"class":179}," nic,model=virtio",[162,125046,27770],{"class":207},[162,125048,125049,125052,125055],{"class":164,"line":2984},[162,125050,125051],{"class":207},"        -audio",[162,125053,125054],{"class":179}," sdl,model=hda",[162,125056,27770],{"class":207},[162,125058,125059,125062,125065],{"class":164,"line":2989},[162,125060,125061],{"class":207},"        -display",[162,125063,125064],{"class":179}," sdl,gl=on,show-cursor=on",[162,125066,27770],{"class":207},[162,125068,125069,125071,125074,125077],{"class":164,"line":3011},[162,125070,124994],{"class":207},[162,125072,125073],{"class":179}," virtio-vga-gl,xres=1920,yres=",[162,125075,125076],{"class":207},"1080",[162,125078,27770],{"class":207},[162,125080,125081,125084,125087],{"class":164,"line":3022},[162,125082,125083],{"class":207},"        -drive",[162,125085,125086],{"class":179}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[162,125088,27770],{"class":207},[162,125090,125091,125093,125096],{"class":164,"line":3027},[162,125092,125083],{"class":207},[162,125094,125095],{"class":179}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[162,125097,27770],{"class":207},[162,125099,125100,125103,125106],{"class":164,"line":3046},[162,125101,125102],{"class":207},"        -monitor",[162,125104,125105],{"class":179}," stdio",[162,125107,27770],{"class":207},[162,125109,125110,125113],{"class":164,"line":3052},[162,125111,125112],{"class":207},"        -serial",[162,125114,125115],{"class":179}," none\n",[1452,125117,125118],{"start":328},[1455,125119,125120,125121],{},"常用操作：",[1452,125122,125123,125126,125182],{},[1455,125124,125125],{},"全屏：Ctrl+Alt+F",[1455,125127,125128,125129,125134],{},"adb调试",[1452,125130,125131],{},[1455,125132,125133],{},"使Linux与Android用ADB连接。",[153,125135,125137],{"className":120355,"code":125136,"language":120357,"meta":158,"style":158},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[71,125138,125139,125144,125155,125160,125172,125177],{"__ignoreMap":158},[162,125140,125141],{"class":164,"line":165},[162,125142,125143],{"class":361},"# 连接安卓\n",[162,125145,125146,125149,125152],{"class":164,"line":197},[162,125147,125148],{"class":5082},"adb",[162,125150,125151],{"class":179}," connect",[162,125153,125154],{"class":207}," 127.0.0.1\n",[162,125156,125157],{"class":164,"line":228},[162,125158,125159],{"class":361},"# 打开shell\n",[162,125161,125162,125164,125166,125169],{"class":164,"line":252},[162,125163,125148],{"class":5082},[162,125165,29973],{"class":207},[162,125167,125168],{"class":179}," 127.0.0.1:5555",[162,125170,125171],{"class":179}," shell\n",[162,125173,125174],{"class":164,"line":328},[162,125175,125176],{"class":361},"# 使用root权限\n",[162,125178,125179],{"class":164,"line":466},[162,125180,125181],{"class":5082},"su\n",[1455,125183,125184,125185],{},"中文输入法",[1452,125186,125187],{},[1455,125188,125189],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,125191,125193],{"id":125192},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,125195,125196,125197],{},"rEFInd 官网与文档：",[3538,125198,125199],{"href":125199,"rel":125200},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[26956],[3219,125202,125203],{},"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":158,"searchDepth":197,"depth":197,"links":125205},[125206,125207,125211],{"id":124871,"depth":197,"text":124872},{"id":124875,"depth":197,"text":124876,"children":125208},[125209,125210],{"id":124879,"depth":228,"text":124880},{"id":124895,"depth":228,"text":124896},{"id":125192,"depth":197,"text":125193},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":124863,"description":3241},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":125218,"title":125219,"body":125220,"description":3241,"extension":3242,"meta":128519,"navigation":300,"path":128520,"seo":128521,"stem":128522,"__hash__":128523},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":125221,"toc":128493},[125222,125225,125229,125232,125239,125489,125492,125564,125567,125571,125575,125580,125583,125586,125589,125594,125597,125600,125603,125608,125611,125616,125619,125622,125627,125630,125635,125638,125642,125646,125649,125654,125657,125671,125674,125677,125686,125689,125698,125701,125704,125713,125716,125725,125728,125731,125740,125743,125746,125761,125764,125767,125776,125781,125784,125787,125796,125799,125808,125811,125820,125823,125832,125837,125840,125848,125853,125856,125865,125868,125876,125881,125884,125893,125896,125899,125903,125906,125911,125914,125919,125933,125938,125943,125954,125959,125965,125970,125985,125990,125993,125998,126003,126008,126016,126021,126028,126033,126044,126049,126052,126056,126059,126062,126067,126070,126089,126094,126097,126106,126111,126114,126136,126139,126169,126172,126177,126180,126194,126199,126218,126221,126224,126229,126241,126246,126251,126254,126259,126262,126277,126280,126285,126290,126294,126299,126339,126342,126346,126352,126358,126363,126366,126373,126378,126385,126388,126391,126398,126412,126415,126475,126478,126492,126504,126507,126510,126513,126577,126580,126583,126586,126606,126609,126614,126621,126625,126628,126632,126637,126642,126646,126649,126652,126694,126699,126702,126724,126739,126741,126746,126758,126818,126820,126822,126876,126878,126880,126886,126891,126894,126899,126903,126906,126968,126973,126976,126978,126982,126994,127076,127078,127080,127134,127140,127142,127146,127151,127153,127158,127162,127182,127217,127221,127224,127227,127230,127237,127240,127252,127255,127270,127273,127292,127340,127343,127360,127363,127377,127382,127385,127394,127409,127421,127459,127464,127473,127478,127483,127509,127518,127522,127526,127531,127534,127538,127542,127547,127550,127555,127558,127563,127566,127571,127574,127578,127583,127586,127591,127594,127598,127603,127606,127611,127614,127619,127622,127626,127631,127634,127639,127642,127647,127650,127654,127659,127662,127667,127670,127675,127678,127683,127686,127691,127694,127699,127702,127706,127711,127714,127719,127726,127730,127735,127738,127743,127746,127750,127755,127758,127761,127764,127767,127770,127774,127777,127787,127792,127797,127819,127824,127829,127836,127840,127845,127848,127851,127856,127859,127862,127865,127868,127871,127874,127877,127880,127883,127886,127889,127892,127897,127902,127907,127912,127917,127922,127927,127930,127934,127937,127941,127946,127951,127956,127961,127965,127971,127979,127984,127987,127992,128007,128010,128015,128049,128064,128067,128122,128148,128160,128163,128172,128175,128190,128195,128198,128204,128209,128212,128217,128220,128225,128230,128237,128240,128255,128258,128293,128298,128306,128344,128347,128350,128355,128358,128363,128374,128408,128413,128416,128425,128430,128436,128439,128444,128453,128458,128461,128464,128469,128477,128480,128485,128490],[10,125223,125219],{"id":125224},"_7-其他操作",[14,125226,125228],{"id":125227},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,125230,125231],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,125233,125234,125235,125238],{},"进入工控机的硬盘目录，进入",[71,125236,125237],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[153,125240,125244],{"className":125241,"code":125242,"language":125243,"meta":158,"style":158},"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",[71,125245,125246,125254,125265,125272,125279,125291,125298,125310,125321,125332,125339,125346,125353,125365,125377,125384,125396,125408,125415,125427,125439,125451,125462,125469,125480],{"__ignoreMap":158},[162,125247,125248,125251],{"class":164,"line":165},[162,125249,125250],{"class":54373},"network",[162,125252,125253],{"class":168},": \n",[162,125255,125256,125259,125261,125263],{"class":164,"line":197},[162,125257,125258],{"class":54373},"  version",[162,125260,1730],{"class":168},[162,125262,213],{"class":207},[162,125264,5791],{"class":168},[162,125266,125267,125270],{"class":164,"line":228},[162,125268,125269],{"class":54373},"  wifis",[162,125271,125253],{"class":168},[162,125273,125274,125277],{"class":164,"line":252},[162,125275,125276],{"class":54373},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[162,125278,125253],{"class":168},[162,125280,125281,125284,125286,125289],{"class":164,"line":328},[162,125282,125283],{"class":54373},"      renderer",[162,125285,1730],{"class":168},[162,125287,125288],{"class":179},"NetworkManager",[162,125290,5791],{"class":168},[162,125292,125293,125296],{"class":164,"line":466},[162,125294,125295],{"class":54373},"      match",[162,125297,125253],{"class":168},[162,125299,125300,125303,125305,125308],{"class":164,"line":471},[162,125301,125302],{"class":54373},"        name",[162,125304,1730],{"class":168},[162,125306,125307],{"class":179},"\"wlan0\"",[162,125309,5791],{"class":168},[162,125311,125312,125315,125317,125319],{"class":164,"line":687},[162,125313,125314],{"class":54373},"      dhcp4",[162,125316,1730],{"class":168},[162,125318,4502],{"class":207},[162,125320,5791],{"class":168},[162,125322,125323,125326,125328,125330],{"class":164,"line":692},[162,125324,125325],{"class":54373},"      dhcp6",[162,125327,1730],{"class":168},[162,125329,4502],{"class":207},[162,125331,5791],{"class":168},[162,125333,125334,125337],{"class":164,"line":698},[162,125335,125336],{"class":54373},"      access-points",[162,125338,125253],{"class":168},[162,125340,125341,125344],{"class":164,"line":2955},[162,125342,125343],{"class":179},"        \"EMIS_Vinci_Robocon_5G\"",[162,125345,125253],{"class":168},[162,125347,125348,125351],{"class":164,"line":2960},[162,125349,125350],{"class":54373},"          auth",[162,125352,125253],{"class":168},[162,125354,125355,125358,125360,125363],{"class":164,"line":2971},[162,125356,125357],{"class":54373},"            key-management",[162,125359,1730],{"class":168},[162,125361,125362],{"class":179},"\"psk\"",[162,125364,5791],{"class":168},[162,125366,125367,125370,125372,125375],{"class":164,"line":2984},[162,125368,125369],{"class":54373},"            password",[162,125371,1730],{"class":168},[162,125373,125374],{"class":179},"\"vinci666\"",[162,125376,5791],{"class":168},[162,125378,125379,125382],{"class":164,"line":2989},[162,125380,125381],{"class":54373},"          networkmanager",[162,125383,125253],{"class":168},[162,125385,125386,125389,125391,125394],{"class":164,"line":3011},[162,125387,125388],{"class":54373},"            uuid",[162,125390,1730],{"class":168},[162,125392,125393],{"class":179},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[162,125395,5791],{"class":168},[162,125397,125398,125401,125403,125406],{"class":164,"line":3022},[162,125399,125400],{"class":54373},"            name",[162,125402,1730],{"class":168},[162,125404,125405],{"class":179},"\"EMIS_Vinci_Robocon_5G\"",[162,125407,5791],{"class":168},[162,125409,125410,125413],{"class":164,"line":3027},[162,125411,125412],{"class":54373},"            passthrough",[162,125414,125253],{"class":168},[162,125416,125417,125420,125422,125425],{"class":164,"line":3046},[162,125418,125419],{"class":54373},"              wifi-security.auth-alg",[162,125421,1730],{"class":168},[162,125423,125424],{"class":179},"\"open\"",[162,125426,5791],{"class":168},[162,125428,125429,125432,125434,125437],{"class":164,"line":3052},[162,125430,125431],{"class":54373},"              ipv6.addr-gen-mode",[162,125433,1730],{"class":168},[162,125435,125436],{"class":179},"\"default\"",[162,125438,5791],{"class":168},[162,125440,125441,125444,125446,125449],{"class":164,"line":3057},[162,125442,125443],{"class":54373},"              ipv6.ip6-privacy",[162,125445,1730],{"class":168},[162,125447,125448],{"class":179},"\"-1\"",[162,125450,5791],{"class":168},[162,125452,125453,125456,125458,125460],{"class":164,"line":3072},[162,125454,125455],{"class":54373},"              proxy._",[162,125457,1730],{"class":168},[162,125459,10756],{"class":179},[162,125461,5791],{"class":168},[162,125463,125464,125467],{"class":164,"line":3077},[162,125465,125466],{"class":54373},"      networkmanager",[162,125468,125253],{"class":168},[162,125470,125471,125474,125476,125478],{"class":164,"line":3100},[162,125472,125473],{"class":54373},"        uuid",[162,125475,1730],{"class":168},[162,125477,125393],{"class":179},[162,125479,5791],{"class":168},[162,125481,125482,125484,125486],{"class":164,"line":3140},[162,125483,125302],{"class":54373},[162,125485,1730],{"class":168},[162,125487,125488],{"class":179},"\"EMIS_Vinci_Robocon_5G\"\n",[19,125490,125491],{},"将其改为新wifi的名和密码：",[153,125493,125495],{"className":125241,"code":125494,"language":125243,"meta":158,"style":158},"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",[71,125496,125497,125503,125512,125518,125525,125534,125542,125548,125554],{"__ignoreMap":158},[162,125498,125499,125501],{"class":164,"line":165},[162,125500,125250],{"class":54373},[162,125502,2316],{"class":168},[162,125504,125505,125507,125509],{"class":164,"line":197},[162,125506,125258],{"class":54373},[162,125508,1730],{"class":168},[162,125510,125511],{"class":207},"2\n",[162,125513,125514,125516],{"class":164,"line":228},[162,125515,125269],{"class":54373},[162,125517,2316],{"class":168},[162,125519,125520,125523],{"class":164,"line":252},[162,125521,125522],{"class":54373},"    wlan0",[162,125524,2316],{"class":168},[162,125526,125527,125529,125531],{"class":164,"line":328},[162,125528,125314],{"class":54373},[162,125530,1730],{"class":168},[162,125532,125533],{"class":207},"true\n",[162,125535,125536,125538,125540],{"class":164,"line":466},[162,125537,125325],{"class":54373},[162,125539,1730],{"class":168},[162,125541,125533],{"class":207},[162,125543,125544,125546],{"class":164,"line":471},[162,125545,125336],{"class":54373},[162,125547,2316],{"class":168},[162,125549,125550,125552],{"class":164,"line":687},[162,125551,125343],{"class":179},[162,125553,2316],{"class":168},[162,125555,125556,125559,125561],{"class":164,"line":692},[162,125557,125558],{"class":54373},"          password",[162,125560,1730],{"class":168},[162,125562,125563],{"class":179},"\"vinci666\"\n",[19,125565,125566],{},"工控机开机即可连上网。",[14,125568,125570],{"id":125569},"_72-ssh远程开发","7.2 SSH远程开发",[3284,125572,125574],{"id":125573},"_721-环境准备","7.2.1 环境准备",[19,125576,125577],{},[3453,125578,125579],{},"1.硬件准备",[19,125581,125582],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,125584,125585],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,125587,125588],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,125590,125591],{},[3453,125592,125593],{},"2.设置固定IP",[19,125595,125596],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,125598,125599],{},"1.进入设置界面",[19,125601,125602],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,125604,125605],{},[4602,125606],{"alt":158,"src":125607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,125609,125610],{},"2.配置所连接的网络",[19,125612,125613],{},[4602,125614],{"alt":158,"src":125615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,125617,125618],{},"3.设置固定IP",[19,125620,125621],{},"查看当前IP地址。",[19,125623,125624],{},[4602,125625],{"alt":158,"src":125626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,125628,125629],{},"设置固定IP。",[19,125631,125632],{},[4602,125633],{"alt":158,"src":125634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,125636,125637],{},"至此，IP配置完毕。",[3284,125639,125641],{"id":125640},"_722-环境搭建","7.2.2 环境搭建",[19,125643,125644],{},[3453,125645,28845],{},[19,125647,125648],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,125650,125651],{},[3453,125652,125653],{},"实现",[19,125655,125656],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[1452,125658,125659,125662,125665,125668],{},[1455,125660,125661],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[1455,125663,125664],{},"远程主机启动SSH服务；",[1455,125666,125667],{},"本地主机登陆远程主机；",[1455,125669,125670],{},"实现数据传输。",[19,125672,125673],{},"1.安装SSH客户端与服务端",[19,125675,125676],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[153,125678,125680],{"className":123874,"code":125679,"language":123876,"meta":123877,"style":158}," sudo apt install openssh-server\n",[71,125681,125682],{"__ignoreMap":158},[162,125683,125684],{"class":164,"line":165},[162,125685,125679],{},[19,125687,125688],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[153,125690,125692],{"className":123874,"code":125691,"language":123876,"meta":123877,"style":158},"sudo apt install openssh-client\n",[71,125693,125694],{"__ignoreMap":158},[162,125695,125696],{"class":164,"line":165},[162,125697,125691],{},[19,125699,125700],{},"2.远程主机启动SSH服务",[19,125702,125703],{},"远程主机启动 ssh 服务命令如下：",[153,125705,125707],{"className":123874,"code":125706,"language":123876,"meta":123877,"style":158},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[71,125708,125709],{"__ignoreMap":158},[162,125710,125711],{"class":164,"line":165},[162,125712,125706],{},[19,125714,125715],{},"启动后可使用如下命令查看服务是否正常运行：",[153,125717,125719],{"className":123874,"code":125718,"language":123876,"meta":123877,"style":158},"ps -e | grep ssh\n",[71,125720,125721],{"__ignoreMap":158},[162,125722,125723],{"class":164,"line":165},[162,125724,125718],{},[19,125726,125727],{},"如果启动成功，会包含 sshd 程序。",[19,125729,125730],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[153,125732,125734],{"className":123874,"code":125733,"language":123876,"meta":123877,"style":158},"sudo systemctl enable ssh\n",[71,125735,125736],{"__ignoreMap":158},[162,125737,125738],{"class":164,"line":165},[162,125739,125733],{},[19,125741,125742],{},"3.本地远程登录",[19,125744,125745],{},"登录远程主机可以调用如下命令:",[153,125747,125749],{"className":120355,"code":125748,"language":120357,"meta":158,"style":158},"ssh -X 用户名@ip地址\n",[71,125750,125751],{"__ignoreMap":158},[162,125752,125753,125755,125758],{"class":164,"line":165},[162,125754,124705],{"class":5082},[162,125756,125757],{"class":207}," -X",[162,125759,125760],{"class":179}," 用户名@ip地址\n",[19,125762,125763],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,125765,125766],{},"如果退出，可以调用exit命令：",[153,125768,125770],{"className":123874,"code":125769,"language":123876,"meta":123877,"style":158},"exit\n",[71,125771,125772],{"__ignoreMap":158},[162,125773,125774],{"class":164,"line":165},[162,125775,125769],{},[19,125777,125778],{},[3453,125779,125780],{},"4.实现数据传输",[19,125782,125783],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,125785,125786],{},"上传文件指令格式如下：",[153,125788,125790],{"className":123874,"code":125789,"language":123876,"meta":123877,"style":158},"scp 本地文件路径 账号@ip:路径\n",[71,125791,125792],{"__ignoreMap":158},[162,125793,125794],{"class":164,"line":165},[162,125795,125789],{},[19,125797,125798],{},"上传文件夹指令格式如下：",[153,125800,125802],{"className":123874,"code":125801,"language":123876,"meta":123877,"style":158},"scp -r 本地文件夹路径 账号@ip:路径\n",[71,125803,125804],{"__ignoreMap":158},[162,125805,125806],{"class":164,"line":165},[162,125807,125801],{},[19,125809,125810],{},"下载文件指令格式如下：",[153,125812,125814],{"className":123874,"code":125813,"language":123876,"meta":123877,"style":158},"scp 账号@ip:路径 本地文件夹路径\n",[71,125815,125816],{"__ignoreMap":158},[162,125817,125818],{"class":164,"line":165},[162,125819,125813],{},[19,125821,125822],{},"下载文件夹指令格式如下：",[153,125824,125826],{"className":123874,"code":125825,"language":123876,"meta":123877,"style":158},"scp -r 账号@ip:路径 本地文件夹路径\n",[71,125827,125828],{"__ignoreMap":158},[162,125829,125830],{"class":164,"line":165},[162,125831,125825],{},[19,125833,125834],{},[3453,125835,125836],{},"优化",[19,125838,125839],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[1452,125841,125842,125845],{},[1455,125843,125844],{},"本地生成密钥对；",[1455,125846,125847],{},"将公钥上传至远程主机。",[19,125849,125850],{},[3453,125851,125852],{},"1.生成密钥对",[19,125854,125855],{},"本地客户端生成公私钥：（一路回车默认即可）",[153,125857,125859],{"className":123874,"code":125858,"language":123876,"meta":123877,"style":158},"ssh-keygen\n",[71,125860,125861],{"__ignoreMap":158},[162,125862,125863],{"class":164,"line":165},[162,125864,125858],{},[19,125866,125867],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[1452,125869,125870,125873],{},[1455,125871,125872],{},"id_rsa （私钥）；",[1455,125874,125875],{},"id_rsa.pub (公钥)。",[19,125877,125878],{},[3453,125879,125880],{},"2.公钥上传",[19,125882,125883],{},"上传指令如下：",[153,125885,125887],{"className":123874,"code":125886,"language":123876,"meta":123877,"style":158},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[71,125888,125889],{"__ignoreMap":158},[162,125890,125891],{"class":164,"line":165},[162,125892,125886],{},[19,125894,125895],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,125897,125898],{},"以后再远程登录就无需录入密码了。",[3284,125900,125902],{"id":125901},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,125904,125905],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,125907,125908],{},[3453,125909,125910],{},"1.准备工作",[19,125912,125913],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,125915,125916],{},[3453,125917,125918],{},"2.为VScode安装远程开发插件",[19,125920,125921,125922,125925,125926,125929,125930,3183],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[71,125923,125924],{},"扩展：商店","的搜索栏输入",[71,125927,125928],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[71,125931,125932],{},"安装",[19,125934,125935],{},[4602,125936],{"alt":158,"src":125937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,125939,125940],{},[3453,125941,125942],{},"3.配置远程连接",[19,125944,125945,125946,125949,125950,125953],{},"步骤1：使用快捷键",[71,125947,125948],{},"ctrl + shift + p","打开命令输入窗口，并输入",[71,125951,125952],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,125955,125956],{},[4602,125957],{"alt":158,"src":125958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,125960,125961,125962,3183],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[71,125963,125964],{},"Add New SSH Host",[19,125966,125967],{},[4602,125968],{"alt":158,"src":125969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,125971,125972,125973,125976,125977,125980,125981,125984],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[71,125974,125975],{},"ssh +X ubuntu@192.168.43.164","，其中，",[71,125978,125979],{},"ubuntu","需要替换为你的登录用户名，",[71,125982,125983],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,125986,125987],{},[4602,125988],{"alt":158,"src":125989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,125991,125992],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,125994,125995],{},[4602,125996],{"alt":158,"src":125997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,125999,126000],{},[4602,126001],{"alt":158,"src":126002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,126004,126005],{},[3453,126006,126007],{},"4.使用",[19,126009,126010,126011,125949,126013,126015],{},"步骤1：继续使用快捷键",[71,126012,125948],{},[71,126014,125952],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,126017,126018],{},[4602,126019],{"alt":158,"src":126020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,126022,126023,126024,126027],{},"或者，也可以点击侧边栏的",[71,126025,126026],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,126029,126030],{},[4602,126031],{"alt":158,"src":126032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,126034,126035,126036,126039,126040,126043],{},"步骤2：选择菜单栏的",[71,126037,126038],{},"文件","下的",[71,126041,126042],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,126045,126046],{},[4602,126047],{"alt":158,"src":126048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,126050,126051],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,126053,126055],{"id":126054},"_73-远程桌面","7.3 远程桌面",[19,126057,126058],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,126060,126061],{},"我们选择使用VNC来看。",[1452,126063,126064],{},[1455,126065,126066],{},"安装VNC服务器：",[19,126068,126069],{},"这里以TigerVNC为例进行安装：",[153,126071,126073],{"className":120355,"code":126072,"language":120357,"meta":158,"style":158},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[71,126074,126075],{"__ignoreMap":158},[162,126076,126077,126079,126081,126083,126086],{"class":164,"line":165},[162,126078,27668],{"class":5082},[162,126080,120376],{"class":179},[162,126082,26925],{"class":179},[162,126084,126085],{"class":179}," tigervnc-standalone-server",[162,126087,126088],{"class":179}," tigervnc-common\n",[1452,126090,126091],{"start":197},[1455,126092,126093],{},"设置VNC密码：",[19,126095,126096],{},"为VNC用户设置密码，运行以下命令：",[153,126098,126100],{"className":120355,"code":126099,"language":120357,"meta":158,"style":158},"vncpasswd\n",[71,126101,126102],{"__ignoreMap":158},[162,126103,126104],{"class":164,"line":165},[162,126105,126099],{"class":5082},[1452,126107,126108],{"start":228},[1455,126109,126110],{},"配置VNC启动脚本:",[19,126112,126113],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[153,126115,126117],{"className":120355,"code":126116,"language":120357,"meta":158,"style":158},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[71,126118,126119,126128],{"__ignoreMap":158},[162,126120,126121,126123,126125],{"class":164,"line":165},[162,126122,104330],{"class":5082},[162,126124,32304],{"class":207},[162,126126,126127],{"class":179}," ~\u002F.vnc\n",[162,126129,126130,126133],{"class":164,"line":197},[162,126131,126132],{"class":5082},"nano",[162,126134,126135],{"class":179}," ~\u002F.vnc\u002Fxstartup\n",[19,126137,126138],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[153,126140,126142],{"className":120355,"code":126141,"language":120357,"meta":158,"style":158},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[71,126143,126144,126149,126157,126164],{"__ignoreMap":158},[162,126145,126146],{"class":164,"line":165},[162,126147,126148],{"class":361},"#!\u002Fbin\u002Fsh\n",[162,126150,126151,126154],{"class":164,"line":197},[162,126152,126153],{"class":207},"unset",[162,126155,126156],{"class":179}," SESSION_MANAGER\n",[162,126158,126159,126161],{"class":164,"line":228},[162,126160,126153],{"class":207},[162,126162,126163],{"class":179}," DBUS_SESSION_BUS_ADDRESS\n",[162,126165,126166],{"class":164,"line":252},[162,126167,126168],{"class":5082},"gnome-session\n",[19,126170,126171],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[1452,126173,126174],{"start":252},[1455,126175,126176],{},"给予执行权限：",[19,126178,126179],{},"为xstartup文件设置执行权限：",[153,126181,126183],{"className":120355,"code":126182,"language":120357,"meta":158,"style":158},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[71,126184,126185],{"__ignoreMap":158},[162,126186,126187,126189,126192],{"class":164,"line":165},[162,126188,27703],{"class":5082},[162,126190,126191],{"class":179}," +x",[162,126193,126135],{"class":179},[1452,126195,126196],{"start":328},[1455,126197,126198],{},"启动VNC服务器：",[153,126200,126202],{"className":120355,"code":126201,"language":120357,"meta":158,"style":158},"vncserver -geometry 1920x1080 -localhost=0\n",[71,126203,126204],{"__ignoreMap":158},[162,126205,126206,126209,126212,126215],{"class":164,"line":165},[162,126207,126208],{"class":5082},"vncserver",[162,126210,126211],{"class":207}," -geometry",[162,126213,126214],{"class":179}," 1920x1080",[162,126216,126217],{"class":207}," -localhost=0\n",[19,126219,126220],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,126222,126223],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[1452,126225,126226],{"start":466},[1455,126227,126228],{},"查看已开启的VNC服务器：",[153,126230,126232],{"className":120355,"code":126231,"language":120357,"meta":158,"style":158},"vncserver -list\n",[71,126233,126234],{"__ignoreMap":158},[162,126235,126236,126238],{"class":164,"line":165},[162,126237,126208],{"class":5082},[162,126239,126240],{"class":207}," -list\n",[19,126242,126243],{},[4602,126244],{"alt":158,"src":126245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[1452,126247,126248],{"start":471},[1455,126249,126250],{},"连接到VNC服务器：",[19,126252,126253],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[1452,126255,126256],{"start":687},[1455,126257,126258],{},"停止VNC服务器：",[19,126260,126261],{},"如果需要停止VNC服务器，可以使用以下命令：",[153,126263,126265],{"className":120355,"code":126264,"language":120357,"meta":158,"style":158},"vncserver -kill :1\n",[71,126266,126267],{"__ignoreMap":158},[162,126268,126269,126271,126274],{"class":164,"line":165},[162,126270,126208],{"class":5082},[162,126272,126273],{"class":207}," -kill",[162,126275,126276],{"class":179}," :1\n",[19,126278,126279],{},"将:1替换为你实际使用的显示编号。",[19,126281,126282],{},[4602,126283],{"alt":158,"src":126284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,126286,126287],{},[4602,126288],{"alt":158,"src":126289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,126291,126293],{"id":126292},"_74-usb端口设置","7.4 USB端口设置",[19,126295,126296],{},[3453,126297,126298],{},"首先先配置好权限",[153,126300,126302],{"className":120355,"code":126301,"language":120357,"meta":158,"style":158},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[71,126303,126304,126309,126322,126329,126334],{"__ignoreMap":158},[162,126305,126306],{"class":164,"line":165},[162,126307,126308],{"class":361},"# 将用户权限提高\n",[162,126310,126311,126313,126315,126317,126320],{"class":164,"line":197},[162,126312,27668],{"class":5082},[162,126314,29664],{"class":179},[162,126316,29667],{"class":207},[162,126318,126319],{"class":179}," dialout",[162,126321,29672],{"class":168},[162,126323,126324,126326],{"class":164,"line":228},[162,126325,29691],{"class":5082},[162,126327,126328],{"class":179}," dialout\n",[162,126330,126331],{"class":164,"line":252},[162,126332,126333],{"class":361},"# 查看下面命令是否输出dialout（若输出才正常）\n",[162,126335,126336],{"class":164,"line":328},[162,126337,126338],{"class":5082},"groups\n",[19,126340,126341],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[3284,126343,126345],{"id":126344},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,126347,126348,126351],{},[3453,126349,126350],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,126353,126354,126357],{},[3453,126355,126356],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,126359,126360],{},[3453,126361,126362],{},"流程如下：",[19,126364,126365],{},"（1）.查找设备idVendor和idProduct",[19,126367,126368,126369,126372],{},"接入两个USB设备，在终端调用指令",[71,126370,126371],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,126374,126375],{},[4602,126376],{"alt":158,"src":126377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,126379,126380,126381,126384],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[71,126382,126383],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,126386,126387],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,126389,126390],{},"（2）.编写映射规则",[19,126392,126393,126394,126397],{},"在",[71,126395,126396],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[153,126399,126401],{"className":120355,"code":126400,"language":120357,"meta":158,"style":158},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[71,126402,126403],{"__ignoreMap":158},[162,126404,126405,126407,126409],{"class":164,"line":165},[162,126406,27668],{"class":5082},[162,126408,121642],{"class":179},[162,126410,126411],{"class":179}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,126413,126414],{},"输入如下内容：",[153,126416,126418],{"className":120355,"code":126417,"language":120357,"meta":158,"style":158},"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",[71,126419,126420,126450],{"__ignoreMap":158},[162,126421,126422,126425,126427,126430,126433,126436,126439,126441,126444,126447],{"class":164,"line":165},[162,126423,126424],{"class":168},"KERNEL",[162,126426,173],{"class":172},[162,126428,126429],{"class":179},"=\"ttyUSB*\",",[162,126431,126432],{"class":5082}," ATTRS",[162,126434,126435],{"class":179},"{idVendor}==",[162,126437,126438],{"class":5082},"\"10c4\"",[162,126440,3670],{"class":5082},[162,126442,126443],{"class":179}," ATTRS{idProduct}==\"ea60\",",[162,126445,126446],{"class":179}," MODE:=\"0777\",",[162,126448,126449],{"class":179}," SYMLINK+=\"mylidar\"\n",[162,126451,126452,126454,126456,126458,126460,126462,126465,126467,126470,126472],{"class":164,"line":197},[162,126453,126424],{"class":168},[162,126455,173],{"class":172},[162,126457,126429],{"class":179},[162,126459,126432],{"class":5082},[162,126461,126435],{"class":179},[162,126463,126464],{"class":5082},"\"1a86\"",[162,126466,3670],{"class":5082},[162,126468,126469],{"class":179}," ATTRS{idProduct}==\"7523\",",[162,126471,126446],{"class":179},[162,126473,126474],{"class":179}," SYMLINK+=\"mycar\"\n",[19,126476,126477],{},"代码解释：",[4279,126479,126480,126483,126486,126489],{},[1455,126481,126482],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[1455,126484,126485],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[1455,126487,126488],{},"SYMLINK是符号连接，即绑定的别名；",[1455,126490,126491],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,126493,126494,126495,126498,126501],{},"***小提示：***",[26644,126496,126497],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[71,126499,126500],{},"\u002Fetc\u002Fudev\u002Frule.d",[26644,126502,126503],{},"目录即可。",[19,126505,126506],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,126508,126509],{},"（3）.使规则生效",[19,126511,126512],{},"在终端下输入如下指令：",[153,126514,126516],{"className":120355,"code":126515,"language":120357,"meta":158,"style":158},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[71,126517,126518,126523,126535,126546,126550,126555,126568],{"__ignoreMap":158},[162,126519,126520],{"class":164,"line":165},[162,126521,126522],{"class":361},"# Ubuntu用下方命令\n",[162,126524,126525,126527,126529,126532],{"class":164,"line":197},[162,126526,27668],{"class":5082},[162,126528,123106],{"class":179},[162,126530,126531],{"class":179}," udev",[162,126533,126534],{"class":179}," reload\n",[162,126536,126537,126539,126541,126543],{"class":164,"line":228},[162,126538,27668],{"class":5082},[162,126540,123106],{"class":179},[162,126542,126531],{"class":179},[162,126544,126545],{"class":179}," restart\n",[162,126547,126548],{"class":164,"line":252},[162,126549,301],{"emptyLinePlaceholder":300},[162,126551,126552],{"class":164,"line":328},[162,126553,126554],{"class":361},"#Fedora用下方命令\n",[162,126556,126557,126559,126562,126565],{"class":164,"line":466},[162,126558,27668],{"class":5082},[162,126560,126561],{"class":179}," udevadm",[162,126563,126564],{"class":179}," control",[162,126566,126567],{"class":207}," --reload\n",[162,126569,126570,126572,126574],{"class":164,"line":471},[162,126571,27668],{"class":5082},[162,126573,126561],{"class":179},[162,126575,126576],{"class":179}," trigger\n",[19,126578,126579],{},"再重新插拔设备即可。",[19,126581,126582],{},"（4）.测试",[19,126584,126585],{},"终端下输入如下指令",[153,126587,126589],{"className":120355,"code":126588,"language":120357,"meta":158,"style":158},"ll \u002Fdev | grep ttyUSB\n",[71,126590,126591],{"__ignoreMap":158},[162,126592,126593,126596,126599,126601,126603],{"class":164,"line":165},[162,126594,126595],{"class":5082},"ll",[162,126597,126598],{"class":179}," \u002Fdev",[162,126600,28201],{"class":172},[162,126602,33324],{"class":5082},[162,126604,126605],{"class":179}," ttyUSB\n",[19,126607,126608],{},"运行结果如下：",[19,126610,126611],{},[4602,126612],{"alt":158,"src":126613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,126615,126616,126617,126620],{},"也可以多次插拔USB设备，会发现设备端口",[71,126618,126619],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,126622,126623],{},[3453,126624,121023],{},[19,126626,126627],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[3284,126629,126631],{"id":126630},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,126633,126634,126636],{},[3453,126635,126350],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,126638,126639,126641],{},[3453,126640,126356],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,126643,126644],{},[3453,126645,126362],{},[19,126647,126648],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,126650,126651],{},"调用如下指令查看第一台雷达的USB信息：",[153,126653,126655],{"className":120355,"code":126654,"language":120357,"meta":158,"style":158},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[71,126656,126657,126677],{"__ignoreMap":158},[162,126658,126659,126662,126664,126667,126670,126672,126674],{"class":164,"line":165},[162,126660,126661],{"class":5082},"udevadm",[162,126663,72886],{"class":179},[162,126665,126666],{"class":207}," --attribute-walk",[162,126668,126669],{"class":207}," --name=\u002Fdev\u002FttyUSB0",[162,126671,28201],{"class":172},[162,126673,33324],{"class":5082},[162,126675,126676],{"class":179}," KERNELS\n",[162,126678,126679,126681,126683,126685,126688,126690,126692],{"class":164,"line":197},[162,126680,126661],{"class":5082},[162,126682,72886],{"class":179},[162,126684,126666],{"class":207},[162,126686,126687],{"class":207}," --name=\u002Fdev\u002FttyACM0",[162,126689,28201],{"class":172},[162,126691,33324],{"class":5082},[162,126693,126676],{"class":179},[19,126695,126696],{},[4602,126697],{"alt":158,"src":126698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,126700,126701],{},"调用如下指令查看第二台雷达的USB信息：",[153,126703,126705],{"className":120355,"code":126704,"language":120357,"meta":158,"style":158},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[71,126706,126707],{"__ignoreMap":158},[162,126708,126709,126711,126713,126715,126718,126720,126722],{"class":164,"line":165},[162,126710,126661],{"class":5082},[162,126712,72886],{"class":179},[162,126714,126666],{"class":207},[162,126716,126717],{"class":207}," --name=\u002Fdev\u002FttyUSB1",[162,126719,28201],{"class":172},[162,126721,33324],{"class":5082},[162,126723,126676],{"class":179},[19,126725,126726,126727,126730,126731,126734,126735,126738],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[71,126728,126729],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[71,126732,126733],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[3453,126736,126737],{},"唯一性标识","”。",[19,126740,126390],{},[19,126742,126393,126743,126745],{},[71,126744,126396],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[153,126747,126748],{"className":120355,"code":126400,"language":120357,"meta":158,"style":158},[71,126749,126750],{"__ignoreMap":158},[162,126751,126752,126754,126756],{"class":164,"line":165},[162,126753,27668],{"class":5082},[162,126755,121642],{"class":179},[162,126757,126411],{"class":179},[153,126759,126761],{"className":120355,"code":126760,"language":120357,"meta":158,"style":158},"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",[71,126762,126763,126792],{"__ignoreMap":158},[162,126764,126765,126767,126769,126771,126774,126776,126779,126782,126784,126787,126789],{"class":164,"line":165},[162,126766,126424],{"class":168},[162,126768,173],{"class":172},[162,126770,126429],{"class":179},[162,126772,126773],{"class":168}," KERNELS",[162,126775,173],{"class":172},[162,126777,126778],{"class":179},"=\"1-1.3:1.0\",",[162,126780,126781],{"class":5082}," MODE:",[162,126783,173],{"class":179},[162,126785,126786],{"class":5082},"\"0777\"",[162,126788,3670],{"class":5082},[162,126790,126791],{"class":179}," SYMLINK+=\"rplidar_front\"\n",[162,126793,126794,126796,126798,126800,126802,126804,126807,126809,126811,126813,126815],{"class":164,"line":197},[162,126795,126424],{"class":168},[162,126797,173],{"class":172},[162,126799,126429],{"class":179},[162,126801,126773],{"class":168},[162,126803,173],{"class":172},[162,126805,126806],{"class":179},"=\"1-1.4:1.0\",",[162,126808,126781],{"class":5082},[162,126810,173],{"class":179},[162,126812,126786],{"class":5082},[162,126814,3670],{"class":5082},[162,126816,126817],{"class":179}," SYMLINK+=\"rplidar_back\"\n",[19,126819,126509],{},[19,126821,126512],{},[153,126823,126824],{"className":120355,"code":126515,"language":120357,"meta":158,"style":158},[71,126825,126826,126830,126840,126850,126854,126858,126868],{"__ignoreMap":158},[162,126827,126828],{"class":164,"line":165},[162,126829,126522],{"class":361},[162,126831,126832,126834,126836,126838],{"class":164,"line":197},[162,126833,27668],{"class":5082},[162,126835,123106],{"class":179},[162,126837,126531],{"class":179},[162,126839,126534],{"class":179},[162,126841,126842,126844,126846,126848],{"class":164,"line":228},[162,126843,27668],{"class":5082},[162,126845,123106],{"class":179},[162,126847,126531],{"class":179},[162,126849,126545],{"class":179},[162,126851,126852],{"class":164,"line":252},[162,126853,301],{"emptyLinePlaceholder":300},[162,126855,126856],{"class":164,"line":328},[162,126857,126554],{"class":361},[162,126859,126860,126862,126864,126866],{"class":164,"line":466},[162,126861,27668],{"class":5082},[162,126863,126561],{"class":179},[162,126865,126564],{"class":179},[162,126867,126567],{"class":207},[162,126869,126870,126872,126874],{"class":164,"line":471},[162,126871,27668],{"class":5082},[162,126873,126561],{"class":179},[162,126875,126576],{"class":179},[19,126877,126579],{},[19,126879,126582],{},[19,126881,126585,126882,126885],{},[71,126883,126884],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,126887,126888],{},[4602,126889],{"alt":158,"src":126890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,126892,126893],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,126895,126896,126898],{},[3453,126897,121023],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[3284,126900,126902],{"id":126901},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,126904,126905],{},"（1）.查看所连接的主机USB接口的信息",[153,126907,126909],{"className":120355,"code":126908,"language":120357,"meta":158,"style":158},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[71,126910,126911,126941],{"__ignoreMap":158},[162,126912,126913,126915,126917,126920,126922,126924,126926,126928,126931,126934,126936,126939],{"class":164,"line":165},[162,126914,126661],{"class":5082},[162,126916,72886],{"class":179},[162,126918,126919],{"class":207}," -a",[162,126921,32304],{"class":207},[162,126923,31510],{"class":168},[162,126925,126661],{"class":5082},[162,126927,72886],{"class":179},[162,126929,126930],{"class":207}," -q",[162,126932,126933],{"class":179}," path",[162,126935,28207],{"class":207},[162,126937,126938],{"class":179}," \u002Fdev\u002FttyACM0",[162,126940,434],{"class":168},[162,126942,126943,126945,126947,126949,126951,126953,126955,126957,126959,126961,126963,126966],{"class":164,"line":197},[162,126944,126661],{"class":5082},[162,126946,72886],{"class":179},[162,126948,126919],{"class":207},[162,126950,32304],{"class":207},[162,126952,31510],{"class":168},[162,126954,126661],{"class":5082},[162,126956,72886],{"class":179},[162,126958,126930],{"class":207},[162,126960,126933],{"class":179},[162,126962,28207],{"class":207},[162,126964,126965],{"class":179}," \u002Fdev\u002FttyUSB0",[162,126967,434],{"class":168},[19,126969,126970],{},[4602,126971],{"alt":158,"src":126972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,126974,126975],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,126977,126390],{},[19,126979,126393,126980,126745],{},[71,126981,126396],{},[153,126983,126984],{"className":120355,"code":126400,"language":120357,"meta":158,"style":158},[71,126985,126986],{"__ignoreMap":158},[162,126987,126988,126990,126992],{"class":164,"line":165},[162,126989,27668],{"class":5082},[162,126991,121642],{"class":179},[162,126993,126411],{"class":179},[153,126995,126997],{"className":120355,"code":126996,"language":120357,"meta":158,"style":158},"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",[71,126998,126999,127027,127053],{"__ignoreMap":158},[162,127000,127001,127003,127005,127008,127010,127012,127014,127016,127019,127022,127024],{"class":164,"line":165},[162,127002,126424],{"class":168},[162,127004,173],{"class":172},[162,127006,127007],{"class":179},"=\"ttyACM*\",",[162,127009,126432],{"class":5082},[162,127011,126435],{"class":179},[162,127013,126464],{"class":5082},[162,127015,3670],{"class":5082},[162,127017,127018],{"class":179}," ATTRS{idProduct}==\"55d4\",",[162,127020,127021],{"class":179}," ATTRS{serial}==\"0001\",",[162,127023,126446],{"class":179},[162,127025,127026],{"class":179}," SYMLINK+=\"ttyACM_MCU\"\n",[162,127028,127029,127031,127033,127035,127037,127039,127041,127043,127045,127048,127050],{"class":164,"line":197},[162,127030,126424],{"class":168},[162,127032,173],{"class":172},[162,127034,127007],{"class":179},[162,127036,126432],{"class":5082},[162,127038,126435],{"class":179},[162,127040,126464],{"class":5082},[162,127042,3670],{"class":5082},[162,127044,127018],{"class":179},[162,127046,127047],{"class":179}," ATTRS{serial}==\"0002\",",[162,127049,126446],{"class":179},[162,127051,127052],{"class":179}," SYMLINK+=\"ttyACM_Lidar\"\n",[162,127054,127055,127057,127059,127061,127063,127065,127067,127069,127071,127073],{"class":164,"line":228},[162,127056,126424],{"class":168},[162,127058,173],{"class":172},[162,127060,126429],{"class":179},[162,127062,126432],{"class":5082},[162,127064,126435],{"class":179},[162,127066,126464],{"class":5082},[162,127068,3670],{"class":5082},[162,127070,126469],{"class":179},[162,127072,126446],{"class":179},[162,127074,127075],{"class":179}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,127077,126509],{},[19,127079,126512],{},[153,127081,127082],{"className":120355,"code":126515,"language":120357,"meta":158,"style":158},[71,127083,127084,127088,127098,127108,127112,127116,127126],{"__ignoreMap":158},[162,127085,127086],{"class":164,"line":165},[162,127087,126522],{"class":361},[162,127089,127090,127092,127094,127096],{"class":164,"line":197},[162,127091,27668],{"class":5082},[162,127093,123106],{"class":179},[162,127095,126531],{"class":179},[162,127097,126534],{"class":179},[162,127099,127100,127102,127104,127106],{"class":164,"line":228},[162,127101,27668],{"class":5082},[162,127103,123106],{"class":179},[162,127105,126531],{"class":179},[162,127107,126545],{"class":179},[162,127109,127110],{"class":164,"line":252},[162,127111,301],{"emptyLinePlaceholder":300},[162,127113,127114],{"class":164,"line":328},[162,127115,126554],{"class":361},[162,127117,127118,127120,127122,127124],{"class":164,"line":466},[162,127119,27668],{"class":5082},[162,127121,126561],{"class":179},[162,127123,126564],{"class":179},[162,127125,126567],{"class":207},[162,127127,127128,127130,127132],{"class":164,"line":471},[162,127129,27668],{"class":5082},[162,127131,126561],{"class":179},[162,127133,126576],{"class":179},[19,127135,127136,127137],{},"再重新插拔设备即可，或者 ",[3453,127138,127139],{},"直接重启系统。",[19,127141,126582],{},[19,127143,126585,127144,126885],{},[71,127145,126884],{},[19,127147,127148],{},[4602,127149],{"alt":158,"src":127150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,127152,126893],{},[19,127154,127155,127157],{},[3453,127156,121023],{}," 一些设备可能没有串口号等。",[3284,127159,127161],{"id":127160},"_744-其他注意事项","7.4.4 其他注意事项",[19,127163,127164,127165,127167,127168,127171,127172,21501,127175,127178,127179,127181],{},"并非所有的USB设备端口号都是",[71,127166,126619],{},"的格式，比如Arduino的端口号可能是",[71,127169,127170],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[71,127173,127174],{},"videon",[71,127176,127177],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[71,127180,127174],{},"端口，绑定时需要关联的也是该接口。",[19,127183,127184,127185,127188,127189,127192,127193,127195,127196,127199,127200,127203,127204,127207,127208,127207,127211,127207,127214,3183],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[71,127186,127187],{},"KERNEL==\"ttyUSB*\"","修改为",[71,127190,127191],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[71,127194,127187],{},"修改为类似于",[71,127197,127198],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[71,127201,127202],{},"video[0,2,4,6]","表示可以绑定的端口为",[71,127205,127206],{},"video0","或",[71,127209,127210],{},"video2",[71,127212,127213],{},"video4",[71,127215,127216],{},"video6",[14,127218,127220],{"id":127219},"_75-挂载内网网页","7.5 挂载内网网页",[19,127222,127223],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,127225,127226],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,127228,127229],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,127231,127232,127233],{},"Termux 下载地址（F-Droid）：",[3538,127234,127235],{"href":127235,"rel":127236},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[26956],[19,127238,127239],{},"首先打开app后，先更新软件缓存：",[153,127241,127243],{"className":120355,"code":127242,"language":120357,"meta":158,"style":158},"pkg update\n",[71,127244,127245],{"__ignoreMap":158},[162,127246,127247,127250],{"class":164,"line":165},[162,127248,127249],{"class":5082},"pkg",[162,127251,29332],{"class":179},[19,127253,127254],{},"然后换源",[153,127256,127258],{"className":120355,"code":127257,"language":120357,"meta":158,"style":158},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[71,127259,127260],{"__ignoreMap":158},[162,127261,127262,127264,127267],{"class":164,"line":165},[162,127263,126132],{"class":5082},[162,127265,127266],{"class":168}," $PREFIX",[162,127268,127269],{"class":179},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,127271,127272],{},"将该文件内容替换为下面：",[153,127274,127276],{"className":120355,"code":127275,"language":120357,"meta":158,"style":158},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[71,127277,127278],{"__ignoreMap":158},[162,127279,127280,127283,127286,127289],{"class":164,"line":165},[162,127281,127282],{"class":5082},"deb",[162,127284,127285],{"class":179}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[162,127287,127288],{"class":179}," stable",[162,127290,127291],{"class":179}," main\n",[4279,127293,127294,127321],{},[1455,127295,127296,127297,127299,127300],{},"如果你使用的是",[71,127298,126132],{},"编辑器：",[4279,127301,127302,127309,127315],{},[1455,127303,127304,127305,127308],{},"按 ",[71,127306,127307],{},"Ctrl+O"," 保存文件。",[1455,127310,127304,127311,127314],{},[71,127312,127313],{},"Enter"," 确认文件名。",[1455,127316,127304,127317,127320],{},[71,127318,127319],{},"Ctrl+X"," 退出编辑器。",[1455,127322,127296,127323,127299,127326],{},[71,127324,127325],{},"vim",[4279,127327,127328,127334],{},[1455,127329,127304,127330,127333],{},[71,127331,127332],{},"Esc"," 退出编辑模式。",[1455,127335,127336,127337,127339],{},"输入 ",[71,127338,122280],{}," 保存并退出。",[19,127341,127342],{},"接下来重新更新软件源：",[153,127344,127346],{"className":120355,"code":127345,"language":120357,"meta":158,"style":158},"pkg update && pkg upgrade\n",[71,127347,127348],{"__ignoreMap":158},[162,127349,127350,127352,127354,127356,127358],{"class":164,"line":165},[162,127351,127249],{"class":5082},[162,127353,120406],{"class":179},[162,127355,29280],{"class":168},[162,127357,127249],{"class":5082},[162,127359,120392],{"class":179},[19,127361,127362],{},"安装python：",[153,127364,127366],{"className":120355,"code":127365,"language":120357,"meta":158,"style":158},"pkg install python\n",[71,127367,127368],{"__ignoreMap":158},[162,127369,127370,127372,127374],{"class":164,"line":165},[162,127371,127249],{"class":5082},[162,127373,26925],{"class":179},[162,127375,127376],{"class":179}," python\n",[19,127378,127379,29563],{},[3453,127380,127381],{},"通过Termux访问设备存储",[19,127383,127384],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[153,127386,127388],{"className":120355,"code":127387,"language":120357,"meta":158,"style":158},"termux-setup-storage\n",[71,127389,127390],{"__ignoreMap":158},[162,127391,127392],{"class":164,"line":165},[162,127393,127387],{"class":5082},[1452,127395,127396],{},[1455,127397,127398,29563,127401],{},[3453,127399,127400],{},"进入HTML文件所在的目录",[1452,127402,127403],{},[1455,127404,127405,127406,127408],{},"使用",[71,127407,104340],{},"命令进入HTML文件所在的目录：",[153,127410,127412],{"className":120355,"code":127411,"language":120357,"meta":158,"style":158},"cd ~\u002Fyour_html_folder\n",[71,127413,127414],{"__ignoreMap":158},[162,127415,127416,127418],{"class":164,"line":165},[162,127417,104340],{"class":207},[162,127419,127420],{"class":179}," ~\u002Fyour_html_folder\n",[1452,127422,127423],{"start":197},[1455,127424,127425,29563,127428,127433,127450],{},[3453,127426,127427],{},"启动Python HTTP服务器",[1452,127429,127430],{},[1455,127431,127432],{},"运行以下命令启动一个简单的HTTP服务器：",[153,127434,127436],{"className":120355,"code":127435,"language":120357,"meta":158,"style":158},"python -m http.server 8000\n",[71,127437,127438],{"__ignoreMap":158},[162,127439,127440,127442,127444,127447],{"class":164,"line":165},[162,127441,157],{"class":5082},[162,127443,103946],{"class":207},[162,127445,127446],{"class":179}," http.server",[162,127448,127449],{"class":207}," 8000\n",[1452,127451,127452],{"start":228},[1455,127453,127454,127455,127458],{},"这会在端口",[71,127456,127457],{},"8000","上启动一个Web服务器。",[4279,127460,127461],{},[1455,127462,127463],{},"启动服务器后，Termux会显示日志信息，例如：",[153,127465,127467],{"className":123874,"code":127466,"language":123876,"meta":123877,"style":158},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[71,127468,127469],{"__ignoreMap":158},[162,127470,127471],{"class":164,"line":165},[162,127472,127466],{},[4279,127474,127475],{},[1455,127476,127477],{},"这表示服务器已成功启动。",[19,127479,127480],{},[3453,127481,127482],{},"在浏览器中访问HTML文件",[1452,127484,127485],{},[1455,127486,127487,29563,127490,127495],{},[3453,127488,127489],{},"在同一设备上访问",[1452,127491,127492],{},[1455,127493,127494],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[153,127496,127499],{"className":127497,"code":127498,"language":74729,"meta":158,"style":158},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[71,127500,127501],{"__ignoreMap":158},[162,127502,127503,127506],{"class":164,"line":165},[162,127504,127505],{"class":168},"http:",[162,127507,127508],{"class":361},"\u002F\u002Flocalhost:8000\n",[4279,127510,127511],{},[1455,127512,127513,127514,127517],{},"如果HTML文件中有",[71,127515,127516],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,127519,127521],{"id":127520},"_76-linux重点知识","7.6 Linux重点知识",[3284,127523,127525],{"id":127524},"_761-关于点的说明","7.6.1 关于点的说明",[19,127527,127528],{},[4602,127529],{"alt":158,"src":127530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,127532,127533],{},"一点本目录，两点上目录",[3284,127535,127537],{"id":127536},"_762-目录","7.6.2 目录",[25089,127539,127541],{"id":127540},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,127543,127544],{},[3453,127545,127546],{},"\u002Fboot:",[19,127548,127549],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,127551,127552],{},[3453,127553,127554],{},"\u002Fetc:",[19,127556,127557],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,127559,127560],{},[3453,127561,127562],{},"\u002Flib：",[19,127564,127565],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,127567,127568],{},[3453,127569,127570],{},"\u002Fsys:",[19,127572,127573],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[25089,127575,127577],{"id":127576},"_7622-指令集合","7.6.2.2 指令集合",[19,127579,127580],{},[3453,127581,127582],{},"\u002Fbin:",[19,127584,127585],{},"为二进制文件的缩写，存放最经常使用的命令",[19,127587,127588],{},[3453,127589,127590],{},"\u002Fsbin:",[19,127592,127593],{},"只有系统管理员才能使用的程序和指令",[25089,127595,127597],{"id":127596},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,127599,127600],{},[3453,127601,127602],{},"\u002Fdev:",[19,127604,127605],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,127607,127608],{},[3453,127609,127610],{},"\u002Fmedia:",[19,127612,127613],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,127615,127616],{},[3453,127617,127618],{},"\u002Fmnt:",[19,127620,127621],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[25089,127623,127625],{"id":127624},"_7624-临时文件","7.6.2.4 临时文件",[19,127627,127628],{},[3453,127629,127630],{},"\u002Frun:",[19,127632,127633],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,127635,127636],{},[3453,127637,127638],{},"\u002Flost+found:",[19,127640,127641],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,127643,127644],{},[3453,127645,127646],{},"\u002Ftmp:",[19,127648,127649],{},"这个目录是用来存放一些临时文件的",[25089,127651,127653],{"id":127652},"_7625-账户","7.6.2.5 账户",[19,127655,127656],{},[3453,127657,127658],{},"\u002Froot：",[19,127660,127661],{},"系统管理员的用户主目录",[19,127663,127664,29563],{},[3453,127665,127666],{},"\u002Fhome",[19,127668,127669],{},"用户的主目录，以用户的账号命名的",[19,127671,127672,29563],{},[3453,127673,127674],{},"\u002Fusr",[19,127676,127677],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,127679,127680],{},[3453,127681,127682],{},"\u002Fusr\u002Fbin：",[19,127684,127685],{},"系统用户使用的应用程序与指令",[19,127687,127688],{},[3453,127689,127690],{},"\u002Fusr\u002Fsbin：",[19,127692,127693],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,127695,127696],{},[3453,127697,127698],{},"\u002Fusr\u002Fsrc：",[19,127700,127701],{},"内核源代码默认的放置目录",[25089,127703,127705],{"id":127704},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,127707,127708],{},[3453,127709,127710],{},"\u002Fvar：",[19,127712,127713],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,127715,127716],{},[3453,127717,127718],{},"\u002Fproc:",[19,127720,127721,127722,127725],{},"管理 ",[3453,127723,127724],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[25089,127727,127729],{"id":127728},"_7627-扩展用的","7.6.2.7 扩展用的",[19,127731,127732],{},[3453,127733,127734],{},"\u002Fopt:",[19,127736,127737],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,127739,127740],{},[3453,127741,127742],{},"\u002Fsrv:",[19,127744,127745],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[3284,127747,127749],{"id":127748},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,127751,127752],{},[4602,127753],{"alt":158,"src":127754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,127756,127757],{},"windows-->linux:",[19,127759,127760],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,127762,127763],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,127765,127766],{},"linux传输文件到windows",[19,127768,127769],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[3284,127771,127773],{"id":127772},"_764-易忘知识","7.6.4 易忘知识",[19,127775,127776],{},"操作系统内核查看",[153,127778,127779],{"className":120355,"code":124348,"language":120357,"meta":158,"style":158},[71,127780,127781],{"__ignoreMap":158},[162,127782,127783,127785],{"class":164,"line":165},[162,127784,73269],{"class":5082},[162,127786,124357],{"class":207},[19,127788,127789],{},[4602,127790],{"alt":158,"src":127791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,127793,127794],{},[4602,127795],{"alt":158,"src":127796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[153,127798,127800],{"className":120355,"code":127799,"language":120357,"meta":158,"style":158},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[71,127801,127802,127814],{"__ignoreMap":158},[162,127803,127804,127806,127809,127812],{"class":164,"line":165},[162,127805,124565],{"class":5082},[162,127807,127808],{"class":179}," mvtest",[162,127810,127811],{"class":179}," mvtest2",[162,127813,5791],{"class":168},[162,127815,127816],{"class":164,"line":197},[162,127817,127818],{"class":5082},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,127820,127821],{},[4602,127822],{"alt":158,"src":127823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,127825,127826],{},[4602,127827],{"alt":158,"src":127828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,127830,127831,127832,127835],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[71,127833,127834],{},"du -a"," 可以快速查看磁盘使用细节。",[3284,127837,127839],{"id":127838},"_765-vim","7.6.5 Vim",[19,127841,127842],{},[4602,127843],{"alt":158,"src":127844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,127846,127847],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,127849,127850],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,127852,127853],{},[3453,127854,127855],{},"1.命令模式：",[19,127857,127858],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,127860,127861],{},"x 删除当前光标所在处的字符",[19,127863,127864],{},"：切换到底线命令模式，以在最底一行输入命令",[19,127866,127867],{},"a 进行插入模式，在光标下一个位置输入文本",[19,127869,127870],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,127872,127873],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,127875,127876],{},"dd 剪切当前行",[19,127878,127879],{},"yy 复制当前行",[19,127881,127882],{},"p 粘贴剪贴板内容到光标下方",[19,127884,127885],{},"P 粘贴剪贴板内容到光标上方",[19,127887,127888],{},"u 撤销上一次操作",[19,127890,127891],{},"ctrl+r 重做上一次操作",[19,127893,127894,127896],{},[4077,127895],{}," 保存文件",[19,127898,127899,127901],{},[3931,127900],{}," 退出Vim编辑器",[19,127903,127904,127906],{},[3931,127905],{},"! 强制退出Vim编辑器，不保存修改",[19,127908,127909],{},[3453,127910,127911],{},"2.输入模式：",[19,127913,127914],{},[4602,127915],{"alt":158,"src":127916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,127918,127919],{},[3453,127920,127921],{},"3.底线命令模式：",[19,127923,127924],{},[4602,127925],{"alt":158,"src":127926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,127928,127929],{},"按下esc可以退出底线命令模式",[3284,127931,127933],{"id":127932},"_766-apt","7.6.6 apt",[19,127935,127936],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[3284,127938,127940],{"id":127939},"_767-home与root的区别","7.6.7 home与root的区别",[19,127942,127943],{},[4602,127944],{"alt":158,"src":127945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,127947,127948],{},[4602,127949],{"alt":158,"src":127950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,127952,127953],{},[4602,127954],{"alt":158,"src":127955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,127957,127958],{},[4602,127959],{"alt":158,"src":127960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[3284,127962,127964],{"id":127963},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,127966,127967],{},[3538,127968,127969],{"href":127969,"rel":127970},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[26956],[1452,127972,127973,127976],{},[1455,127974,127975],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[1455,127977,127978],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,127980,127981],{},[4602,127982],{"alt":158,"src":127983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,127985,127986],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,127988,127989],{},[4602,127990],{"alt":158,"src":127991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[153,127993,127995],{"className":123874,"code":127994,"language":123876,"meta":123877,"style":158},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[71,127996,127997,128002],{"__ignoreMap":158},[162,127998,127999],{"class":164,"line":165},[162,128000,128001],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[162,128003,128004],{"class":164,"line":197},[162,128005,128006],{},".\u002Fpycharm.sh\n",[19,128008,128009],{},"3️⃣创建.desktop文件",[19,128011,128012],{},[3453,128013,128014],{},"原理：",[4279,128016,128017,128027],{},[1455,128018,128019,128020,128026],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[3453,128021,128022,128025],{},[71,128023,128024],{},".desktop"," 文件"," 来识别应用。",[1455,128028,128029,128031,128032],{},[71,128030,128024],{}," 文件相当于一个“应用注册表”，告诉系统：",[4279,128033,128034,128037,128040,128043,128046],{},[1455,128035,128036],{},"应用名字（Name）",[1455,128038,128039],{},"图标（Icon）",[1455,128041,128042],{},"执行命令（Exec）",[1455,128044,128045],{},"分类（Categories）",[1455,128047,128048],{},"是否需要终端（Terminal）",[153,128050,128052],{"className":123874,"code":128051,"language":123876,"meta":123877,"style":158},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[71,128053,128054,128059],{"__ignoreMap":158},[162,128055,128056],{"class":164,"line":165},[162,128057,128058],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[162,128060,128061],{"class":164,"line":197},[162,128062,128063],{},"nano pycharm.desktop\n",[19,128065,128066],{},"nano是一个命令行下的编辑器，也可以使用vim",[153,128068,128070],{"className":123874,"code":128069,"language":123876,"meta":123877,"style":158},"[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",[71,128071,128072,128077,128082,128087,128092,128097,128102,128107,128112,128117],{"__ignoreMap":158},[162,128073,128074],{"class":164,"line":165},[162,128075,128076],{},"[Desktop Entry]\n",[162,128078,128079],{"class":164,"line":197},[162,128080,128081],{},"Version=1.0\n",[162,128083,128084],{"class":164,"line":228},[162,128085,128086],{},"Type=Application\n",[162,128088,128089],{"class":164,"line":252},[162,128090,128091],{},"Name=PyCharm\n",[162,128093,128094],{"class":164,"line":328},[162,128095,128096],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[162,128098,128099],{"class":164,"line":466},[162,128100,128101],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[162,128103,128104],{"class":164,"line":471},[162,128105,128106],{},"Comment=JetBrains PyCharm IDE\n",[162,128108,128109],{"class":164,"line":687},[162,128110,128111],{},"Categories=Development;IDE;\n",[162,128113,128114],{"class":164,"line":692},[162,128115,128116],{},"Terminal=false\n",[162,128118,128119],{"class":164,"line":698},[162,128120,128121],{},"StartupWMClass=jetbrains-pycharm\n",[4279,128123,128124,128130,128136,128142],{},[1455,128125,128126,128129],{},[71,128127,128128],{},"Exec"," → 点击图标时执行的命令",[1455,128131,128132,128135],{},[71,128133,128134],{},"Icon"," → 显示在菜单和桌面上的图标",[1455,128137,128138,128141],{},[71,128139,128140],{},"Terminal=false"," → 不打开终端",[1455,128143,128144,128147],{},[71,128145,128146],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[128149,128150,128151],"blockquote",{},[19,128152,128153,128154,128156,128157],{},"可以理解成 ",[71,128155,128024],{}," 文件是 Linux 的 ",[3453,128158,128159],{},"快捷方式配置文件",[19,128161,128162],{},"4️⃣设置可执行权限",[153,128164,128166],{"className":123874,"code":128165,"language":123876,"meta":123877,"style":158},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[71,128167,128168],{"__ignoreMap":158},[162,128169,128170],{"class":164,"line":165},[162,128171,128165],{},[19,128173,128174],{},"5️⃣桌面图标启动的话如下：",[153,128176,128178],{"className":123874,"code":128177,"language":123876,"meta":123877,"style":158},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[71,128179,128180,128185],{"__ignoreMap":158},[162,128181,128182],{"class":164,"line":165},[162,128183,128184],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[162,128186,128187],{"class":164,"line":197},[162,128188,128189],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[1452,128191,128192],{"start":228},[1455,128193,128194],{},"下载Appimage文件实现软件的安装",[19,128196,128197],{},"1️⃣先下载appimage",[19,128199,128200],{},[3538,128201,128202],{"href":128202,"rel":128203},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[26956],[19,128205,128206],{},[4602,128207],{"alt":158,"src":128208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,128210,128211],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,128213,128214],{},[4602,128215],{"alt":158,"src":128216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,128218,128219],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,128221,128222],{},[4602,128223],{"alt":158,"src":128224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,128226,128227],{},[4602,128228],{"alt":158,"src":128229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,128231,128232,128233,128236],{},"3️⃣给他们放在",[71,128234,128235],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,128238,128239],{},"4️⃣给软件执行权限",[153,128241,128243],{"className":123874,"code":128242,"language":123876,"meta":123877,"style":158},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[71,128244,128245,128250],{"__ignoreMap":158},[162,128246,128247],{"class":164,"line":165},[162,128248,128249],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[162,128251,128252],{"class":164,"line":197},[162,128253,128254],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,128256,128257],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[153,128259,128261],{"className":120355,"code":128260,"language":120357,"meta":158,"style":158},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[71,128262,128263,128270,128277,128283],{"__ignoreMap":158},[162,128264,128265,128267],{"class":164,"line":165},[162,128266,104340],{"class":207},[162,128268,128269],{"class":179}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[162,128271,128272,128274],{"class":164,"line":197},[162,128273,104347],{"class":5082},[162,128275,128276],{"class":179}," .\u002Fqqmusic.desktop\n",[162,128278,128279,128281],{"class":164,"line":228},[162,128280,127325],{"class":5082},[162,128282,128276],{"class":179},[162,128284,128285,128287,128289,128291],{"class":164,"line":252},[162,128286,27668],{"class":5082},[162,128288,27671],{"class":179},[162,128290,126191],{"class":179},[162,128292,128276],{"class":179},[19,128294,128295,128297],{},[71,128296,104347],{},"：一个 Linux 命令，主要功能是：",[4279,128299,128300,128303],{},[1455,128301,128302],{},"如果文件不存在，就创建一个新的空文件",[1455,128304,128305],{},"如果文件已存在，就更新该文件的最后修改时间",[153,128307,128309],{"className":123874,"code":128308,"language":123876,"meta":123877,"style":158},"[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",[71,128310,128311,128315,128320,128325,128330,128334,128339],{"__ignoreMap":158},[162,128312,128313],{"class":164,"line":165},[162,128314,128076],{},[162,128316,128317],{"class":164,"line":197},[162,128318,128319],{},"Name=QQ音乐\n",[162,128321,128322],{"class":164,"line":228},[162,128323,128324],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[162,128326,128327],{"class":164,"line":252},[162,128328,128329],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[162,128331,128332],{"class":164,"line":328},[162,128333,128086],{},[162,128335,128336],{"class":164,"line":466},[162,128337,128338],{},"Categories=Audio;Music;Player;\n",[162,128340,128341],{"class":164,"line":471},[162,128342,128343],{},"Comment=QQ Music Client for Linux\n",[19,128345,128346],{},"将文件复制进去",[19,128348,128349],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,128351,128352],{},[4602,128353],{"alt":158,"src":128354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,128356,128357],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,128359,128360],{},[4602,128361],{"alt":158,"src":128362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,128364,128365,128366,128369,128370,128373],{},"如果你用的不是KDE，那么也可以直接修改",[71,128367,128368],{},"qqmuic.desktop","：在exec的末尾加上",[71,128371,128372],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[153,128375,128377],{"className":123874,"code":128376,"language":123876,"meta":123877,"style":158},"[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",[71,128378,128379,128383,128387,128392,128396,128400,128404],{"__ignoreMap":158},[162,128380,128381],{"class":164,"line":165},[162,128382,128076],{},[162,128384,128385],{"class":164,"line":197},[162,128386,128319],{},[162,128388,128389],{"class":164,"line":228},[162,128390,128391],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[162,128393,128394],{"class":164,"line":252},[162,128395,128329],{},[162,128397,128398],{"class":164,"line":328},[162,128399,128086],{},[162,128401,128402],{"class":164,"line":466},[162,128403,128338],{},[162,128405,128406],{"class":164,"line":471},[162,128407,128343],{},[19,128409,128410],{},[4602,128411],{"alt":158,"src":128412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,128414,128415],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[153,128417,128419],{"className":123874,"code":128418,"language":123876,"meta":123877,"style":158},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[71,128420,128421],{"__ignoreMap":158},[162,128422,128423],{"class":164,"line":165},[162,128424,128418],{},[1452,128426,128427],{"start":252},[1455,128428,128429],{},"去Flathub上安装软件",[19,128431,128432],{},[3538,128433,128434],{"href":128434,"rel":128435},"https:\u002F\u002Fflathub.org\u002F",[26956],[19,128437,128438],{},"1️⃣去上面的官网搜索软件+下载软件",[19,128440,128441],{},[4602,128442],{"alt":158,"src":128443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[153,128445,128447],{"className":123874,"code":128446,"language":123876,"meta":123877,"style":158},"flatpak install flathub com.obsproject.Studio\n",[71,128448,128449],{"__ignoreMap":158},[162,128450,128451],{"class":164,"line":165},[162,128452,128446],{},[19,128454,128455],{},[4602,128456],{"alt":158,"src":128457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,128459,128460],{},"2️⃣运行软件",[19,128462,128463],{},"a.官方方式：",[19,128465,128466],{},[4602,128467],{"alt":158,"src":128468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[153,128470,128471],{"className":123874,"code":128446,"language":123876,"meta":123877,"style":158},[71,128472,128473],{"__ignoreMap":158},[162,128474,128475],{"class":164,"line":165},[162,128476,128446],{},[19,128478,128479],{},"b.当普通软件运行：",[19,128481,128482],{},[4602,128483],{"alt":158,"src":128484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,128486,128487],{},[4602,128488],{"alt":158,"src":128489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[3219,128491,128492],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":158,"searchDepth":197,"depth":197,"links":128494},[128495,128496,128501,128502,128508,128509],{"id":125227,"depth":197,"text":125228},{"id":125569,"depth":197,"text":125570,"children":128497},[128498,128499,128500],{"id":125573,"depth":228,"text":125574},{"id":125640,"depth":228,"text":125641},{"id":125901,"depth":228,"text":125902},{"id":126054,"depth":197,"text":126055},{"id":126292,"depth":197,"text":126293,"children":128503},[128504,128505,128506,128507],{"id":126344,"depth":228,"text":126345},{"id":126630,"depth":228,"text":126631},{"id":126901,"depth":228,"text":126902},{"id":127160,"depth":228,"text":127161},{"id":127219,"depth":197,"text":127220},{"id":127520,"depth":197,"text":127521,"children":128510},[128511,128512,128513,128514,128515,128516,128517,128518],{"id":127524,"depth":228,"text":127525},{"id":127536,"depth":228,"text":127537},{"id":127748,"depth":228,"text":127749},{"id":127772,"depth":228,"text":127773},{"id":127838,"depth":228,"text":127839},{"id":127932,"depth":228,"text":127933},{"id":127939,"depth":228,"text":127940},{"id":127963,"depth":228,"text":127964},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":125219,"description":3241},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":128525,"title":128526,"body":128527,"description":3241,"extension":3242,"meta":128531,"navigation":300,"path":128532,"seo":128533,"stem":128534,"__hash__":128535},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":128528,"toc":128529},[],{"title":158,"searchDepth":197,"depth":197,"links":128530},[],{"category":33351},"\u002Fwiki\u002F2025-01-27-linux",{"title":128526,"description":3241},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":128537,"title":128538,"body":128539,"description":128543,"extension":3242,"meta":128934,"navigation":300,"path":128935,"seo":128936,"stem":128937,"__hash__":128938},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":128540,"toc":128932},[128541,128544,128548,128565,128568,128621,128625,128627,128667,128676,128680,128683,128924,128929],[19,128542,128543],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,128545,128547],{"id":128546},"_1ubuntu环境配置","1.Ubuntu环境配置",[1452,128549,128550,128553,128556,128559,128562],{},[1455,128551,128552],{},"ubuntu环境换源",[1455,128554,128555],{},"安装cuda",[1455,128557,128558],{},"安装miniconda",[1455,128560,128561],{},"安装pytorch",[1455,128563,128564],{},"安装genesis",[19,128566,128567],{},"参考链接：",[153,128569,128571],{"className":26913,"code":128570,"language":26915,"meta":158,"style":158},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[71,128572,128573],{"__ignoreMap":158},[162,128574,128575,128578,128581,128584,128586,128589,128592,128594,128597,128600,128602,128605,128608,128610,128613,128616,128618],{"class":164,"line":165},[162,128576,128577],{"class":5082},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[162,128579,128580],{"class":179},"=blogdetail",[162,128582,128583],{"class":168},"&sharetype",[162,128585,173],{"class":172},[162,128587,128588],{"class":179},"blogdetail",[162,128590,128591],{"class":168},"&sharerId",[162,128593,173],{"class":172},[162,128595,128596],{"class":179},"144728092",[162,128598,128599],{"class":168},"&sharerefer",[162,128601,173],{"class":172},[162,128603,128604],{"class":179},"PC",[162,128606,128607],{"class":168},"&sharesource",[162,128609,173],{"class":172},[162,128611,128612],{"class":179},"qq_69379513",[162,128614,128615],{"class":168},"&sharefrom",[162,128617,173],{"class":172},[162,128619,128620],{"class":179},"from_link\n",[10,128622,128624],{"id":128623},"_2genesis-报错issue","2.Genesis 报错issue",[19,128626,128567],{},[153,128628,128629],{"className":26913,"code":128570,"language":26915,"meta":158,"style":158},[71,128630,128631],{"__ignoreMap":158},[162,128632,128633,128635,128637,128639,128641,128643,128645,128647,128649,128651,128653,128655,128657,128659,128661,128663,128665],{"class":164,"line":165},[162,128634,128577],{"class":5082},[162,128636,128580],{"class":179},[162,128638,128583],{"class":168},[162,128640,173],{"class":172},[162,128642,128588],{"class":179},[162,128644,128591],{"class":168},[162,128646,173],{"class":172},[162,128648,128596],{"class":179},[162,128650,128599],{"class":168},[162,128652,173],{"class":172},[162,128654,128604],{"class":179},[162,128656,128607],{"class":168},[162,128658,173],{"class":172},[162,128660,128612],{"class":179},[162,128662,128615],{"class":168},[162,128664,173],{"class":172},[162,128666,128620],{"class":179},[153,128668,128670],{"className":26913,"code":128669,"language":26915,"meta":158,"style":158},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[71,128671,128672],{"__ignoreMap":158},[162,128673,128674],{"class":164,"line":165},[162,128675,128669],{"class":5082},[10,128677,128679],{"id":128678},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,128681,128682],{},"hello_robot.py",[153,128684,128686],{"className":155,"code":128685,"language":157,"meta":158,"style":158},"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",[71,128687,128688,128694,128709,128713,128725,128737,128741,128754,128758,128777,128787,128797,128811,128815,128819,128824,128828,128838,128845,128859,128866,128876,128881,128885,128903,128908,128912,128919],{"__ignoreMap":158},[162,128689,128690,128692],{"class":164,"line":165},[162,128691,33478],{"class":172},[162,128693,48380],{"class":168},[162,128695,128696,128699,128702,128704,128706],{"class":164,"line":197},[162,128697,128698],{"class":168},"os.environ[",[162,128700,128701],{"class":179},"'PYOPENGL_PLATFORM'",[162,128703,1204],{"class":168},[162,128705,173],{"class":172},[162,128707,128708],{"class":179}," 'glx'\n",[162,128710,128711],{"class":164,"line":228},[162,128712,301],{"emptyLinePlaceholder":300},[162,128714,128715,128717,128720,128722],{"class":164,"line":252},[162,128716,33478],{"class":172},[162,128718,128719],{"class":168}," genesis ",[162,128721,34466],{"class":172},[162,128723,128724],{"class":168}," gs\n",[162,128726,128727,128729,128732,128734],{"class":164,"line":328},[162,128728,33821],{"class":172},[162,128730,128731],{"class":168}," pynput ",[162,128733,33478],{"class":172},[162,128735,128736],{"class":168}," keyboard\n",[162,128738,128739],{"class":164,"line":466},[162,128740,301],{"emptyLinePlaceholder":300},[162,128742,128743,128746,128749,128751],{"class":164,"line":471},[162,128744,128745],{"class":168},"gs.init(",[162,128747,128748],{"class":671},"backend",[162,128750,173],{"class":172},[162,128752,128753],{"class":168},"gs.gpu)\n",[162,128755,128756],{"class":164,"line":687},[162,128757,301],{"emptyLinePlaceholder":300},[162,128759,128760,128763,128765,128768,128771,128773,128775],{"class":164,"line":692},[162,128761,128762],{"class":168},"scene ",[162,128764,173],{"class":172},[162,128766,128767],{"class":168}," gs.Scene(",[162,128769,128770],{"class":671},"show_viewer",[162,128772,173],{"class":172},[162,128774,247],{"class":207},[162,128776,434],{"class":168},[162,128778,128779,128782,128784],{"class":164,"line":698},[162,128780,128781],{"class":168},"plane ",[162,128783,173],{"class":172},[162,128785,128786],{"class":168}," scene.add_entity(gs.morphs.Plane())\n",[162,128788,128789,128792,128794],{"class":164,"line":2955},[162,128790,128791],{"class":168},"franka ",[162,128793,173],{"class":172},[162,128795,128796],{"class":168}," scene.add_entity(\n",[162,128798,128799,128802,128804,128806,128809],{"class":164,"line":2960},[162,128800,128801],{"class":168},"    gs.morphs.MJCF(",[162,128803,48429],{"class":671},[162,128805,173],{"class":172},[162,128807,128808],{"class":179},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[162,128810,41122],{"class":168},[162,128812,128813],{"class":164,"line":2971},[162,128814,434],{"class":168},[162,128816,128817],{"class":164,"line":2984},[162,128818,301],{"emptyLinePlaceholder":300},[162,128820,128821],{"class":164,"line":2989},[162,128822,128823],{"class":168},"scene.build()\n",[162,128825,128826],{"class":164,"line":3011},[162,128827,301],{"emptyLinePlaceholder":300},[162,128829,128830,128832,128835],{"class":164,"line":3022},[162,128831,35026],{"class":172},[162,128833,128834],{"class":5082}," on_press",[162,128836,128837],{"class":168},"(key):\n",[162,128839,128840,128843],{"class":164,"line":3027},[162,128841,128842],{"class":172},"    try",[162,128844,2316],{"class":168},[162,128846,128847,128849,128852,128854,128857],{"class":164,"line":3046},[162,128848,5614],{"class":172},[162,128850,128851],{"class":168}," key.char ",[162,128853,2292],{"class":172},[162,128855,128856],{"class":179}," 'q'",[162,128858,2316],{"class":168},[162,128860,128861,128863],{"class":164,"line":3052},[162,128862,18823],{"class":172},[162,128864,128865],{"class":207}," False\n",[162,128867,128868,128871,128874],{"class":164,"line":3057},[162,128869,128870],{"class":172},"    except",[162,128872,128873],{"class":207}," AttributeError",[162,128875,2316],{"class":168},[162,128877,128878],{"class":164,"line":3072},[162,128879,128880],{"class":172},"        pass\n",[162,128882,128883],{"class":164,"line":3077},[162,128884,301],{"emptyLinePlaceholder":300},[162,128886,128887,128890,128892,128895,128898,128900],{"class":164,"line":3100},[162,128888,128889],{"class":168},"listener ",[162,128891,173],{"class":172},[162,128893,128894],{"class":168}," keyboard.Listener(",[162,128896,128897],{"class":671},"on_press",[162,128899,173],{"class":172},[162,128901,128902],{"class":168},"on_press)\n",[162,128904,128905],{"class":164,"line":3140},[162,128906,128907],{"class":168},"listener.start()\n",[162,128909,128910],{"class":164,"line":4878},[162,128911,301],{"emptyLinePlaceholder":300},[162,128913,128914,128916],{"class":164,"line":4883},[162,128915,111724],{"class":172},[162,128917,128918],{"class":168}," listener.running:\n",[162,128920,128921],{"class":164,"line":4897},[162,128922,128923],{"class":168},"    scene.step()\n",[19,128925,128926],{},[4602,128927],{"alt":158,"src":128928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[3219,128930,128931],{},"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":158,"searchDepth":197,"depth":197,"links":128933},[],{"category":26469},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":128538,"description":128543},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":128940,"title":128941,"body":128942,"description":3241,"extension":3242,"meta":128957,"navigation":300,"path":128958,"seo":128959,"stem":128960,"__hash__":128961},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":128943,"toc":128954},[128944,128947,128951],[10,128945,128941],{"id":128946},"_1-基础知识",[14,128948,128950],{"id":128949},"_11-js的组成","1.1 js的组成",[19,128952,128953],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":158,"searchDepth":197,"depth":197,"links":128955},[128956],{"id":128949,"depth":197,"text":128950},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":128941,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":128963,"title":128964,"body":128965,"description":3241,"extension":3242,"meta":129104,"navigation":300,"path":129105,"seo":129106,"stem":129107,"__hash__":129108},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":128966,"toc":129092},[128967,128970,128974,128977,128981,128991,128995,128998,129001,129004,129008,129015,129021,129025,129031,129042,129046,129049,129053,129056,129060,129063,129067,129070,129074,129077,129080,129083,129086,129089],[10,128968,128964],{"id":128969},"_2-vscode必备内容",[14,128971,128973],{"id":128972},"_21-标签分类","2.1 标签分类",[19,128975,128976],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,128978,128980],{"id":128979},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,128982,128983,128984,128986,128987,128990],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[71,128985,3526],{}," 然后按 ",[71,128988,128989],{},"Tab","，快速自动生成基本结构。",[14,128992,128994],{"id":128993},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,128996,128997],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,128999,129000],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,129002,129003],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,129005,129007],{"id":129006},"_24-视图缩放","2.4 视图缩放",[19,129009,129010,129011,129014],{},"缩放视图 ",[71,129012,129013],{},"ctrl+"," 可实现代码增大。",[19,129016,129017,129020],{},[71,129018,129019],{},"ctrl-"," 可实现代码减小。",[14,129022,129024],{"id":129023},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,129026,129027,129028,3183],{},"VSCode 新建文件快捷键为 ",[71,129029,129030],{},"ctrl+N",[19,129032,129033,129034,129037,129038,129041],{},"保存快捷键为 ",[71,129035,129036],{},"ctrl+S","，将文本保存为 ",[71,129039,129040],{},".html"," 文件。",[14,129043,129045],{"id":129044},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,129047,129048],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,129050,129052],{"id":129051},"_27-vscode-icons","2.7 vscode-icons",[19,129054,129055],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,129057,129059],{"id":129058},"_28-easy-less","2.8 Easy LESS",[19,129061,129062],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,129064,129066],{"id":129065},"_29-会了吧插件","2.9 会了吧插件",[19,129068,129069],{},"会了吧插件可以展示代码中英语单词的意思。",[14,129071,129073],{"id":129072},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,129075,129076],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,129078,129079],{},"②选定多个相同的单词:ctrl+D",[19,129081,129082],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,129084,129085],{},"④全局替换某些单词:ctrl+h",[19,129087,129088],{},"⑤快速定位到某一行:ctrl+g",[19,129090,129091],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":158,"searchDepth":197,"depth":197,"links":129093},[129094,129095,129096,129097,129098,129099,129100,129101,129102,129103],{"id":128972,"depth":197,"text":128973},{"id":128979,"depth":197,"text":128980},{"id":128993,"depth":197,"text":128994},{"id":129006,"depth":197,"text":129007},{"id":129023,"depth":197,"text":129024},{"id":129044,"depth":197,"text":129045},{"id":129051,"depth":197,"text":129052},{"id":129058,"depth":197,"text":129059},{"id":129065,"depth":197,"text":129066},{"id":129072,"depth":197,"text":129073},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":128964,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":129110,"title":129111,"body":129112,"description":3241,"extension":3242,"meta":129271,"navigation":300,"path":129272,"seo":129273,"stem":129274,"__hash__":129275},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":129113,"toc":129263},[129114,129117,129121,129131,129137,129143,129147,129156,129160,129165,129168,129171,129175,129178,129188,129197,129206,129215,129225,129232,129237,129242,129255],[10,129115,129111],{"id":129116},"_3-html文本与容器标签",[14,129118,129120],{"id":129119},"_31-标题标签","3.1 标题标签",[19,129122,129123,129126,129127,129130],{},[71,129124,129125],{},"\u003Ch1>","我是一级标签",[71,129128,129129],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,129132,129133,129126,129135],{},[71,129134,129125],{},[71,129136,129129],{},[19,129138,126393,129139,129142],{},[71,129140,129141],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,129144,129146],{"id":129145},"_32-段落标签","3.2 段落标签",[19,129148,129149,129152,129153],{},[71,129150,129151],{},"\u003Cp>","....",[71,129154,129155],{},"\u003C\u002Fp>",[14,129157,129159],{"id":129158},"_33-换行标签","3.3 换行标签",[19,129161,129162],{},[71,129163,129164],{},"\u003Cbr \u002F>",[19,129166,129167],{},"具有强制换行的作用",[19,129169,129170],{},"单标签",[14,129172,129174],{"id":129173},"_34-文本格式化标签","3.4 文本格式化标签",[19,129176,129177],{},"提供粗体、斜体和下划线等效果",[19,129179,129180,129181,85604,129184,129187],{},"加粗：",[71,129182,129183],{},"\u003Cstrong>...\u003C\u002Fstrong>",[71,129185,129186],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,129189,129190,129191,85604,129194,129187],{},"斜体：",[71,129192,129193],{},"\u003Cem>...\u003C\u002Fem>",[71,129195,129196],{},"\u003Ci>...\u003C\u002Fi>",[19,129198,129199,129200,85604,129203,129187],{},"删除线：",[71,129201,129202],{},"\u003Cdel>...\u003C\u002Fdel>",[71,129204,129205],{},"\u003Cs>...\u003C\u002Fs>",[19,129207,129208,129209,85604,129212,129187],{},"下划线：",[71,129210,129211],{},"\u003Cins>...\u003C\u002Fins>",[71,129213,129214],{},"\u003Cu>...\u003C\u002Fu>",[14,129216,129218,129219,21501,129222,105756],{"id":129217},"_35-div和span标签","3.5 ",[71,129220,129221],{},"\u003Cdiv>",[71,129223,129224],{},"\u003Cspan>",[19,129226,129227,104082,129229,129231],{},[71,129228,129221],{},[71,129230,129224],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,129233,129234],{},[71,129235,129236],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,129238,129239],{},[71,129240,129241],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,129243,129244,129245,129247,129248,129250,129251,129254],{},"两者特点：①",[71,129246,129221],{}," 标签用来布局，但一行通常只放一个 ",[71,129249,129221],{},"。可以理解为一个大盒子，独占一行，在 ",[71,129252,129253],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,129256,80314,129257,129259,129260,129262],{},[71,129258,129224],{}," 标签也可用于布局，一行可以放多个 ",[71,129261,129224],{},"，可理解为小盒子。",{"title":158,"searchDepth":197,"depth":197,"links":129264},[129265,129266,129267,129268,129269],{"id":129119,"depth":197,"text":129120},{"id":129145,"depth":197,"text":129146},{"id":129158,"depth":197,"text":129159},{"id":129173,"depth":197,"text":129174},{"id":129217,"depth":197,"text":129270},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":129111,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":129277,"title":129278,"body":129279,"description":3241,"extension":3242,"meta":129476,"navigation":300,"path":129477,"seo":129478,"stem":129479,"__hash__":129480},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":129280,"toc":129468},[129281,129284,129288,129291,129297,129304,129310,129316,129319,129322,129325,129328,129331,129334,129337,129341,129344,129347,129350,129356,129362,129368,129375,129379,129385,129391,129394,129397,129403,129409,129415,129418,129421,129425,129428,129438,129444,129448,129457,129461,129464],[10,129282,129278],{"id":129283},"_4-html图像与链接",[14,129285,129287],{"id":129286},"_41-图像标签","4.1 图像标签",[19,129289,129290],{},"（1）标签",[19,129292,129293,129296],{},[71,129294,129295],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,129298,129299,129300,129303],{},"src是",[71,129301,129302],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,129305,129306,129307],{},"alt:文本，替换文本。图像不能显示的文字 ",[71,129308,129309],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,129311,129312,129313],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[71,129314,129315],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,129317,129318],{},"width:像素，设置图像的宽度",[19,129320,129321],{},"height:像素，设置图像的高度",[19,129323,129324],{},"border：像素，设置图像的边框粗细",[19,129326,129327],{},"（2）图像标签属性的注意点：",[19,129329,129330],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,129332,129333],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,129335,129336],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,129338,129340],{"id":129339},"_42-路径注意要点","4.2 路径注意要点：",[19,129342,129343],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,129345,129346],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,129348,129349],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,129351,129352,129353],{},"①同一级路径：图像文件位于HTML文件同一级，如",[71,129354,129355],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,129357,129358,129359],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[71,129360,129361],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,129363,129364,129365],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[71,129366,129367],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,129369,129370,129371,979],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[3538,129372,129373],{"href":129373,"rel":129374},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[26956],[14,129376,129378],{"id":129377},"_43-超链接标签","4.3 超链接标签",[19,129380,129381,129384],{},[71,129382,129383],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,129386,129387,129388],{},"①语法格式：",[71,129389,129390],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,129392,129393],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,129395,129396],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,129398,129399,129400],{},"③链接分类：外部链接：",[71,129401,129402],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,129404,129405,129406],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[71,129407,129408],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,129410,129411,129412],{},"空链接：如果当时没有确定链接目标时，",[71,129413,129414],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,129416,129417],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,129419,129420],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,129422,129424],{"id":129423},"_44-锚点链接","4.4 锚点链接",[19,129426,129427],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,129429,129430,129431,129434,129435],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[71,129432,129433],{},"\u003Ca href=\"#two\">","第二级",[71,129436,129437],{},"\u003C\u002Fa>",[19,129439,129440,129441],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[71,129442,129443],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,129445,129447],{"id":129446},"_45-注释标签","4.5 注释标签",[19,129449,129450,129453,129454],{},[71,129451,129452],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[71,129455,129456],{},"ctrl+\u002F",[14,129458,129460],{"id":129459},"_46-特殊字符","4.6 特殊字符",[19,129462,129463],{},"可以实现添加多个空格",[4602,129465],{"style":129466,"src":129467},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":158,"searchDepth":197,"depth":197,"links":129469},[129470,129471,129472,129473,129474,129475],{"id":129286,"depth":197,"text":129287},{"id":129339,"depth":197,"text":129340},{"id":129377,"depth":197,"text":129378},{"id":129423,"depth":197,"text":129424},{"id":129446,"depth":197,"text":129447},{"id":129459,"depth":197,"text":129460},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":129278,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":129482,"title":129483,"body":129484,"description":3241,"extension":3242,"meta":129777,"navigation":300,"path":129778,"seo":129779,"stem":129780,"__hash__":129781},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":129485,"toc":129768},[129486,129489,129493,129496,129499,129502,129505,129508,129511,129514,129517,129520,129540,129546,129550,129553,129556,129559,129562,129565,129568,129572,129575,129578,129581,129584,129597,129602,129605,129608,129623,129626,129629,129632,129635,129638,129642,129645,129652,129655,129658,129661,129664,129667,129673,129676,129679,129685,129688,129691,129694,129700,129703,129706,129720,129727,129730,129733,129740,129749,129752,129755,129758,129762,129765],[10,129487,129483],{"id":129488},"_5-html表格列表与表单",[14,129490,129492],{"id":129491},"_51-表格标签","5.1 表格标签",[19,129494,129495],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,129497,129498],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,129500,129501],{},"②表格基本语法：",[4602,129503],{"style":129466,"src":129504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,129506,129507],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[4602,129509],{"style":129466,"src":129510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,129512,129513],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[4602,129515],{"style":129466,"src":129516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,129518,129519],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,129521,129522,129525,129526,129528,129529,129532,129533,129535,129536,129539],{},[71,129523,129524],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[71,129527,129524],{},"内部必须拥有",[71,129530,129531],{},"\u003Ctr>","标签，一般位于第一行，",[71,129534,129524],{},"比",[71,129537,129538],{},"\u003Cth>","范围广",[19,129541,129542,129545],{},[71,129543,129544],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,129547,129549],{"id":129548},"_52-合并单元格","5.2 合并单元格",[19,129551,129552],{},"（1）合并单元格方式：",[19,129554,129555],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,129557,129558],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,129560,129561],{},"（2）目标单元格：",[19,129563,129564],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,129566,129567],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,129569,129571],{"id":129570},"_53-列表标签","5.3 列表标签",[19,129573,129574],{},"（1）分类：无序列表、有序列表、自定义列表",[19,129576,129577],{},"①无序列表：",[4602,129579],{"style":129466,"src":129580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,129582,129583],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,129585,129586,129589,129590,129593,129594,129596],{},[71,129587,129588],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[71,129591,129592],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[71,129595,129588],{},"中输入其他标签或文字是不对的",[19,129598,129599,129601],{},[71,129600,129592],{},"之间相当于一个容器，可以容纳所有元素",[19,129603,129604],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,129606,129607],{},"在css中去除前边的小圆点采用如下代码:",[153,129609,129613],{"className":129610,"code":129611,"language":129612,"meta":158,"style":158},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[71,129614,129615],{"__ignoreMap":158},[162,129616,129617,129620],{"class":164,"line":165},[162,129618,129619],{"class":54373},"list-style",[162,129621,129622],{"class":168},": none;\n",[19,129624,129625],{},"②有序列表：",[4602,129627],{"style":129466,"src":129628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,129630,129631],{},"③自定义列表：",[4602,129633],{"style":129466,"src":129634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[4602,129636],{"style":129466,"src":129637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,129639,129641],{"id":129640},"_54-表单标签","5.4 表单标签",[19,129643,129644],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,129646,129647,129648,129651],{},"（1）表单域：包含单元素的区域，",[71,129649,129650],{},"\u003Cform>","标签可以实现信息的收集和传递。",[4602,129653],{"style":129466,"src":129654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,129656,129657],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,129659,129660],{},"表单元素提交必须有name属性",[19,129662,129663],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,129665,129666],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,129668,80291,129669,129672],{},[71,129670,129671],{},"\u003Cinput>","输入表单元素",[4602,129674],{"style":129466,"src":129675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[4602,129677],{"style":129466,"src":129678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,129680,129681,129682],{},"单选按钮：",[71,129683,129684],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[4602,129686],{"style":129466,"src":129687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,129689,129690],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[4602,129692],{"style":129466,"src":129693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,129695,129696,129699],{},[3453,129697,129698],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,129701,129702],{},"②select下拉表单元素：可以节约页面控件",[4602,129704],{"style":129466,"src":129705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,129707,129708,16889,129710,129713,129714,129716,129717,129719],{},[3453,129709,3344],{},[71,129711,129712],{},"\u003Cselect>","中至少包含一对",[71,129715,105777],{},"；在",[71,129718,105777],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,129721,129722,129723,129726],{},"③",[71,129724,129725],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[4602,129728],{"style":129466,"src":129729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,129731,129732],{},"3行20列",[14,129734,129736,129737,105756],{"id":129735},"_55-lable标签","5.5 ",[71,129738,129739],{},"\u003Clable>",[19,129741,129742,129743,129745,129746,129748],{},"它不是表单标签，但常常与表单标签搭配使用，",[71,129744,129739],{},"标签用于绑定一个表单标签，当点击",[71,129747,129739],{},"标签内的文本",[19,129750,129751],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[4602,129753],{"style":129466,"src":129754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[4602,129756],{"style":129466,"src":129757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,129759,129761],{"id":129760},"_56-实例","5.6 实例",[4602,129763],{"style":129466,"src":129764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[3219,129766,129767],{},"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":158,"searchDepth":197,"depth":197,"links":129769},[129770,129771,129772,129773,129774,129776],{"id":129491,"depth":197,"text":129492},{"id":129548,"depth":197,"text":129549},{"id":129570,"depth":197,"text":129571},{"id":129640,"depth":197,"text":129641},{"id":129735,"depth":197,"text":129775},"5.5 \u003Clable>标签",{"id":129760,"depth":197,"text":129761},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":129483,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":129783,"title":129784,"body":129785,"description":3241,"extension":3242,"meta":130334,"navigation":300,"path":130335,"seo":130336,"stem":130337,"__hash__":130338},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":129786,"toc":130309},[129787,129790,129794,129797,129800,129804,129807,129810,129813,129816,129819,129822,129825,129829,129832,129836,129839,129842,129845,129849,129852,129855,129858,129864,129867,129870,129873,129876,129879,129882,129885,129918,129922,129925,129928,129931,129935,129938,129941,129944,129947,129950,129954,129957,129960,129963,129967,129970,129974,129977,129981,129984,129989,129993,129996,130000,130003,130006,130009,130012,130039,130042,130046,130049,130052,130057,130060,130063,130067,130070,130075,130078,130081,130084,130088,130091,130094,130097,130101,130104,130107,130110,130114,130118,130121,130161,130164,130168,130175,130178,130182,130185,130231,130235,130238,130241,130244,130272,130276,130279,130306],[10,129788,129784],{"id":129789},"_6-css语法与文本样式",[14,129791,129793],{"id":129792},"_61-css语法规范","6.1 css语法规范",[19,129795,129796],{},"由两部分组成，选择器及一条或多条声明",[4602,129798],{"style":129466,"src":129799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,129801,129802],{},[3453,129803,3344],{},[19,129805,129806],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,129808,129809],{},"②属性与属性值以“键值对”的形式出现",[19,129811,129812],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,129814,129815],{},"④属性和属性值之间用英文“;”分开",[4602,129817],{"style":129466,"src":129818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[4602,129820],{"style":129466,"src":129821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[4602,129823],{"style":129466,"src":129824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,129826,129828],{"id":129827},"_62-css选择器","6.2 css选择器",[19,129830,129831],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[3284,129833,129835],{"id":129834},"_621-标签选择器","6.2.1 标签选择器",[19,129837,129838],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,129840,129841],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[4602,129843],{"style":129466,"src":129844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[3284,129846,129848],{"id":129847},"_622-类选择器","6.2.2 类选择器",[19,129850,129851],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,129853,129854],{},"②样例",[4602,129856],{"style":129466,"src":129857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,129859,129860,129861,129863],{},"③ ",[3453,129862,129698],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,129865,129866],{},"可以理解为给这个标签起了个名字，来表示；",[19,129868,129869],{},"长名称或词组可以使用横线来为选择器命名；",[19,129871,129872],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,129874,129875],{},"命名要有意义；",[4602,129877],{"style":129466,"src":129878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,129880,129881],{},"类选择器也可以指定特殊的元素p.center{}",[19,129883,129884],{},"p.center和.center都对",[153,129886,129888],{"className":129610,"code":129887,"language":129612,"meta":158,"style":158},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[71,129889,129890,129895,129904,129914],{"__ignoreMap":158},[162,129891,129892],{"class":164,"line":165},[162,129893,129894],{"class":361},"\u002F* 类选择器指定特殊元素 *\u002F\n",[162,129896,129897,129899,129902],{"class":164,"line":197},[162,129898,19],{"class":54373},[162,129900,129901],{"class":5082},".center",[162,129903,1722],{"class":168},[162,129905,129906,129908,129910,129912],{"class":164,"line":228},[162,129907,73591],{"class":207},[162,129909,1730],{"class":168},[162,129911,54664],{"class":207},[162,129913,4433],{"class":168},[162,129915,129916],{"class":164,"line":252},[162,129917,1498],{"class":168},[3284,129919,129921],{"id":129920},"_623-多类名使用","6.2.3 多类名使用",[19,129923,129924],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[4602,129926],{"style":129466,"src":129927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,129929,129930],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[3284,129932,129934],{"id":129933},"_624-id选择器","6.2.4 id选择器",[19,129936,129937],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,129939,129940],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[4602,129942],{"style":129466,"src":129943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,129945,129946],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,129948,129949],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[3284,129951,129953],{"id":129952},"_625-通配符选择器","6.2.5 通配符选择器",[19,129955,129956],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,129958,129959],{},"* {",[19,129961,129962],{},"color=\"red\"}",[3284,129964,129966],{"id":129965},"_626-总结","6.2.6 总结",[4602,129968],{"style":129466,"src":129969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,129971,129973],{"id":129972},"_63-css字体属性","6.3 css字体属性",[19,129975,129976],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[3284,129978,129980],{"id":129979},"_631-字体系列","6.3.1 字体系列",[19,129982,129983],{},"font-family: '宋体';",[19,129985,129986,129988],{},[3453,129987,3344],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[3284,129990,129992],{"id":129991},"_632-字体大小","6.3.2 字体大小",[19,129994,129995],{},"font-size: 20px",[19,129997,129998,29563],{},[3453,129999,129698],{},[19,130001,130002],{},"①px（像素）大小是网页的最常用单位",[19,130004,130005],{},"②谷歌浏览器默认为16px",[19,130007,130008],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,130010,130011],{},"④可以给body指定整个页面的大小：会自动引用",[153,130013,130015],{"className":129610,"code":130014,"language":129612,"meta":158,"style":158},"body {\n  font-size: 16px;\n}\n",[71,130016,130017,130023,130035],{"__ignoreMap":158},[162,130018,130019,130021],{"class":164,"line":165},[162,130020,54872],{"class":54373},[162,130022,1722],{"class":168},[162,130024,130025,130027,130029,130031,130033],{"class":164,"line":197},[162,130026,73691],{"class":207},[162,130028,1730],{"class":168},[162,130030,3888],{"class":207},[162,130032,54564],{"class":172},[162,130034,4433],{"class":168},[162,130036,130037],{"class":164,"line":228},[162,130038,1498],{"class":168},[19,130040,130041],{},"⑤标题标签比较特殊，需要单独指定大小",[3284,130043,130045],{"id":130044},"_633-字体粗细","6.3.3 字体粗细",[19,130047,130048],{},"font-weight: bold;",[19,130050,130051],{},"font-weight: 100；",[19,130053,130054,130056],{},[3453,130055,3344],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,130058,130059],{},"font-weight= 400;",[19,130061,130062],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[3284,130064,130066],{"id":130065},"_634-文字样式","6.3.4 文字样式",[19,130068,130069],{},"font-style: normal；",[19,130071,130072,29563],{},[3453,130073,130074],{},"属性值",[19,130076,130077],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,130079,130080],{},"②italic：浏览器会显示斜体的字体样式",[4602,130082],{"style":129466,"src":130083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[3284,130085,130087],{"id":130086},"_635-字体符合属性","6.3.5 字体符合属性",[4602,130089],{"style":129466,"src":130090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[4602,130092],{"style":129466,"src":130093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,130095,130096],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,130098,130099,29563],{},[3453,130100,129698],{},[19,130102,130103],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,130105,130106],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,130108,130109],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,130111,130113],{"id":130112},"_64-css-test文本属性","6.4 css test文本属性",[3284,130115,130117],{"id":130116},"_641-文本颜色","6.4.1 文本颜色",[19,130119,130120],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[153,130122,130124],{"className":129610,"code":130123,"language":129612,"meta":158,"style":158},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[71,130125,130126,130131,130137,130147,130152,130157],{"__ignoreMap":158},[162,130127,130128],{"class":164,"line":165},[162,130129,130130],{"class":361},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[162,130132,130133,130135],{"class":164,"line":197},[162,130134,19],{"class":54373},[162,130136,1722],{"class":168},[162,130138,130139,130141,130143,130145],{"class":164,"line":228},[162,130140,73970],{"class":207},[162,130142,1730],{"class":168},[162,130144,60490],{"class":207},[162,130146,4433],{"class":168},[162,130148,130149],{"class":164,"line":252},[162,130150,130151],{"class":361},"  \u002F* color: #ff0000; *\u002F\n",[162,130153,130154],{"class":164,"line":328},[162,130155,130156],{"class":361},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[162,130158,130159],{"class":164,"line":466},[162,130160,1498],{"class":168},[4602,130162],{"style":129466,"src":130163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[3284,130165,130167],{"id":130166},"_642-对齐文本","6.4.2 对齐文本",[19,130169,130170,130171,130174],{},"text-align属于用于设置元素内文本内容的 ",[3453,130172,130173],{},"水平对齐"," 方式",[19,130176,130177],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[3284,130179,130181],{"id":130180},"_643-装饰文本","6.4.3 装饰文本",[19,130183,130184],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[153,130186,130188],{"className":129610,"code":130187,"language":129612,"meta":158,"style":158},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[71,130189,130190,130196,130206,130210,130216,130227],{"__ignoreMap":158},[162,130191,130192,130194],{"class":164,"line":165},[162,130193,3538],{"class":54373},[162,130195,1722],{"class":168},[162,130197,130198,130200,130202,130204],{"class":164,"line":197},[162,130199,73567],{"class":207},[162,130201,1730],{"class":168},[162,130203,57807],{"class":207},[162,130205,4433],{"class":168},[162,130207,130208],{"class":164,"line":228},[162,130209,1498],{"class":168},[162,130211,130212,130214],{"class":164,"line":252},[162,130213,19],{"class":54373},[162,130215,1722],{"class":168},[162,130217,130218,130220,130222,130225],{"class":164,"line":328},[162,130219,73567],{"class":207},[162,130221,1730],{"class":168},[162,130223,130224],{"class":207},"underline",[162,130226,4433],{"class":168},[162,130228,130229],{"class":164,"line":466},[162,130230,1498],{"class":168},[3284,130232,130234],{"id":130233},"_644-文本缩进","6.4.4 文本缩进",[19,130236,130237],{},"实现文本的第一行首行缩进自己指定的距离",[19,130239,130240],{},"20px往右边走；-20px往左边走",[19,130242,130243],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[153,130245,130247],{"className":129610,"code":130246,"language":129612,"meta":158,"style":158},"p {\n  text-indent: 2em;\n}\n",[71,130248,130249,130255,130268],{"__ignoreMap":158},[162,130250,130251,130253],{"class":164,"line":165},[162,130252,19],{"class":54373},[162,130254,1722],{"class":168},[162,130256,130257,130260,130262,130264,130266],{"class":164,"line":197},[162,130258,130259],{"class":207},"  text-indent",[162,130261,1730],{"class":168},[162,130263,213],{"class":207},[162,130265,26644],{"class":172},[162,130267,4433],{"class":168},[162,130269,130270],{"class":164,"line":228},[162,130271,1498],{"class":168},[3284,130273,130275],{"id":130274},"_645-行间距","6.4.5 行间距",[19,130277,130278],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[153,130280,130282],{"className":129610,"code":130281,"language":129612,"meta":158,"style":158},"p {\n  line-height: 1.6;\n}\n",[71,130283,130284,130290,130302],{"__ignoreMap":158},[162,130285,130286,130288],{"class":164,"line":165},[162,130287,19],{"class":54373},[162,130289,1722],{"class":168},[162,130291,130292,130295,130297,130300],{"class":164,"line":197},[162,130293,130294],{"class":207},"  line-height",[162,130296,1730],{"class":168},[162,130298,130299],{"class":207},"1.6",[162,130301,4433],{"class":168},[162,130303,130304],{"class":164,"line":228},[162,130305,1498],{"class":168},[3219,130307,130308],{},"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":158,"searchDepth":197,"depth":197,"links":130310},[130311,130312,130320,130327],{"id":129792,"depth":197,"text":129793},{"id":129827,"depth":197,"text":129828,"children":130313},[130314,130315,130316,130317,130318,130319],{"id":129834,"depth":228,"text":129835},{"id":129847,"depth":228,"text":129848},{"id":129920,"depth":228,"text":129921},{"id":129933,"depth":228,"text":129934},{"id":129952,"depth":228,"text":129953},{"id":129965,"depth":228,"text":129966},{"id":129972,"depth":197,"text":129973,"children":130321},[130322,130323,130324,130325,130326],{"id":129979,"depth":228,"text":129980},{"id":129991,"depth":228,"text":129992},{"id":130044,"depth":228,"text":130045},{"id":130065,"depth":228,"text":130066},{"id":130086,"depth":228,"text":130087},{"id":130112,"depth":197,"text":130113,"children":130328},[130329,130330,130331,130332,130333],{"id":130116,"depth":228,"text":130117},{"id":130166,"depth":228,"text":130167},{"id":130180,"depth":228,"text":130181},{"id":130233,"depth":228,"text":130234},{"id":130274,"depth":228,"text":130275},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":129784,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":130340,"title":130341,"body":130342,"description":3241,"extension":3242,"meta":130991,"navigation":300,"path":130992,"seo":130993,"stem":130994,"__hash__":130995},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":130343,"toc":130972},[130344,130347,130351,130355,130415,130419,130429,130432,130435,130439,130464,130468,130471,130474,130477,130480,130483,130487,130490,130493,130535,130538,130564,130570,130573,130577,130581,130587,130590,130593,130596,130599,130602,130605,130650,130654,130657,130660,130664,130668,130697,130700,130705,130708,130711,130714,130717,130721,130725,130728,130730,130733,130737,130740,130744,130747,130750,130753,130757,130761,130767,130777,130780,130783,130786,130789,130792,130915,130923,130931,130969],[10,130345,130341],{"id":130346},"_7-css引入方式与选择器进阶",[14,130348,130350],{"id":130349},"_71-css引入方式","7.1 css引入方式",[3284,130352,130354],{"id":130353},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[153,130356,130360],{"className":130357,"code":130358,"language":130359,"meta":158,"style":158},"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",[71,130361,130362,130370,130377,130389,130402,130407],{"__ignoreMap":158},[162,130363,130364,130366,130368],{"class":164,"line":165},[162,130365,4187],{"class":168},[162,130367,3219],{"class":54373},[162,130369,54380],{"class":168},[162,130371,130372,130375],{"class":164,"line":197},[162,130373,130374],{"class":54373},"  h1",[162,130376,1722],{"class":168},[162,130378,130379,130382,130384,130387],{"class":164,"line":228},[162,130380,130381],{"class":207},"    color",[162,130383,1730],{"class":168},[162,130385,130386],{"class":207},"blue",[162,130388,4433],{"class":168},[162,130390,130391,130394,130396,130398,130400],{"class":164,"line":252},[162,130392,130393],{"class":207},"    font-size",[162,130395,1730],{"class":168},[162,130397,4082],{"class":207},[162,130399,54564],{"class":172},[162,130401,4433],{"class":168},[162,130403,130404],{"class":164,"line":328},[162,130405,130406],{"class":168},"  }\n",[162,130408,130409,130411,130413],{"class":164,"line":466},[162,130410,54857],{"class":168},[162,130412,3219],{"class":54373},[162,130414,54380],{"class":168},[19,130416,130417,29563],{},[3453,130418,129698],{},[19,130420,80291,130421,130424,130425,130428],{},[71,130422,130423],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[71,130426,130427],{},"\u003Chead>","标签中",[19,130430,130431],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,130433,130434],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[3284,130436,130438],{"id":130437},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[153,130440,130442],{"className":130357,"code":130441,"language":130359,"meta":158,"style":158},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[71,130443,130444],{"__ignoreMap":158},[162,130445,130446,130448,130450,130452,130454,130457,130460,130462],{"class":164,"line":165},[162,130447,4187],{"class":168},[162,130449,19],{"class":54373},[162,130451,65694],{"class":5082},[162,130453,173],{"class":168},[162,130455,130456],{"class":179},"\"color: red; font-size: 16px;\"",[162,130458,130459],{"class":168},">这是一个段落\u003C\u002F",[162,130461,19],{"class":54373},[162,130463,54380],{"class":168},[19,130465,130466,29563],{},[3453,130467,129698],{},[19,130469,130470],{},"①style其实就是标签的属性",[19,130472,130473],{},"②在双引号中间，写法要符合css规范",[19,130475,130476],{},"③可以控制当前的标签设置样式",[19,130478,130479],{},"④书写繁琐，简单时才用",[19,130481,130482],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[3284,130484,130486],{"id":130485},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,130488,130489],{},"使用最多，单独建一个css文件，然后html引用",[19,130491,130492],{},"①css文件部分： style.css",[153,130494,130496],{"className":129610,"code":130495,"language":129612,"meta":158,"style":158},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[71,130497,130498,130503,130509,130519,130531],{"__ignoreMap":158},[162,130499,130500],{"class":164,"line":165},[162,130501,130502],{"class":361},"\u002F* style.css *\u002F\n",[162,130504,130505,130507],{"class":164,"line":197},[162,130506,10],{"class":54373},[162,130508,1722],{"class":168},[162,130510,130511,130513,130515,130517],{"class":164,"line":228},[162,130512,73970],{"class":207},[162,130514,1730],{"class":168},[162,130516,130386],{"class":207},[162,130518,4433],{"class":168},[162,130520,130521,130523,130525,130527,130529],{"class":164,"line":252},[162,130522,73691],{"class":207},[162,130524,1730],{"class":168},[162,130526,4082],{"class":207},[162,130528,54564],{"class":172},[162,130530,4433],{"class":168},[162,130532,130533],{"class":164,"line":328},[162,130534,1498],{"class":168},[19,130536,130537],{},"②html部分",[153,130539,130541],{"className":130357,"code":130540,"language":130359,"meta":158,"style":158},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[71,130542,130543],{"__ignoreMap":158},[162,130544,130545,130547,130549,130551,130553,130555,130557,130559,130562],{"class":164,"line":165},[162,130546,4187],{"class":168},[162,130548,72072],{"class":54373},[162,130550,72075],{"class":5082},[162,130552,173],{"class":168},[162,130554,72080],{"class":179},[162,130556,64125],{"class":5082},[162,130558,173],{"class":168},[162,130560,130561],{"class":179},"\"style.css\"",[162,130563,54380],{"class":168},[19,130565,130566,130569],{},[71,130567,130568],{},"\u003Chr>","水平线标签（但是不常用！）",[19,130571,130572],{},"ctrl+0回到页面原来大小",[14,130574,130576],{"id":130575},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[3284,130578,130580],{"id":130579},"_721-快速生成html","7.2.1 快速生成html",[19,130582,130583,130584],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[71,130585,130586],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,130588,130589],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,130591,130592],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,130594,130595],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,130597,130598],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,130600,130601],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,130603,130604],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[153,130606,130608],{"className":130357,"code":130607,"language":130359,"meta":158,"style":158},"\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",[71,130609,130610,130615,130620,130625,130630,130635,130640,130645],{"__ignoreMap":158},[162,130611,130612],{"class":164,"line":165},[162,130613,130614],{"class":361},"\u003C!-- Emmet 语法示例 -->\n",[162,130616,130617],{"class":164,"line":197},[162,130618,130619],{"class":361},"\u003C!-- div*3        → 生成3个div -->\n",[162,130621,130622],{"class":164,"line":228},[162,130623,130624],{"class":361},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[162,130626,130627],{"class":164,"line":252},[162,130628,130629],{"class":361},"\u003C!-- div+p        → 兄弟div和p -->\n",[162,130631,130632],{"class":164,"line":328},[162,130633,130634],{"class":361},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[162,130636,130637],{"class":164,"line":466},[162,130638,130639],{"class":361},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[162,130641,130642],{"class":164,"line":471},[162,130643,130644],{"class":361},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[162,130646,130647],{"class":164,"line":687},[162,130648,130649],{"class":361},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[3284,130651,130653],{"id":130652},"_722-快速生成css","7.2.2 快速生成css",[19,130655,130656],{},"简写开头",[19,130658,130659],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,130661,130663],{"id":130662},"_73-css复合选择器","7.3 css复合选择器",[3284,130665,130667],{"id":130666},"_731-后代选择器","7.3.1 后代选择器",[153,130669,130671],{"className":129610,"code":130670,"language":129612,"meta":158,"style":158},".parent .child {\n  color: blue;\n}\n",[71,130672,130673,130683,130693],{"__ignoreMap":158},[162,130674,130675,130678,130681],{"class":164,"line":165},[162,130676,130677],{"class":5082},".parent",[162,130679,130680],{"class":5082}," .child",[162,130682,1722],{"class":168},[162,130684,130685,130687,130689,130691],{"class":164,"line":197},[162,130686,73970],{"class":207},[162,130688,1730],{"class":168},[162,130690,130386],{"class":207},[162,130692,4433],{"class":168},[162,130694,130695],{"class":164,"line":228},[162,130696,1498],{"class":168},[19,130698,130699],{},"元素1 元素2 {样式声明}",[19,130701,130702],{},[3453,130703,130704],{},"注意点:",[19,130706,130707],{},"①元素1和元素2中间用空格隔开",[19,130709,130710],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,130712,130713],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,130715,130716],{},"④元素1和元素2可以是任意基础选择器",[3284,130718,130720],{"id":130719},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,130722,130723],{},[3453,130724,130704],{},[19,130726,130727],{},"①元素1和元素2中间用大于号隔开",[19,130729,130710],{},[19,130731,130732],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[3284,130734,130736],{"id":130735},"_733-并集选择器","7.3.3 并集选择器",[19,130738,130739],{},"元素1，元素2 {样式声明}",[19,130741,130742],{},[3453,130743,130704],{},[19,130745,130746],{},"①元素1和元素2中间用逗号隔开",[19,130748,130749],{},"②逗号可以理解为和的意思",[19,130751,130752],{},"③并集选择器通常用于集体声明",[3284,130754,130756],{"id":130755},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,130758,130759],{},[3453,130760,130704],{},[19,130762,130763,130764,130766],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[72072,130765],{},"－:visited－:hover－:active。",[19,130768,130769,130770,130773,130774,28832],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[130771,130772],"hover",{}," 、 ",[130775,130776],"first-child",{},[19,130778,130779],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,130781,130782],{},"link对没访问的进行设置",[19,130784,130785],{},"vistied对已访问的进行改变",[19,130787,130788],{},"hover鼠标经过就会变",[19,130790,130791],{},"active常按(点)就会变",[153,130793,130795],{"className":129610,"code":130794,"language":129612,"meta":158,"style":158},"\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",[71,130796,130797,130802,130811,130821,130831,130835,130844,130855,130859,130867,130877,130887,130891,130900,130911],{"__ignoreMap":158},[162,130798,130799],{"class":164,"line":165},[162,130800,130801],{"class":361},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[162,130803,130804,130806,130809],{"class":164,"line":197},[162,130805,3538],{"class":54373},[162,130807,130808],{"class":5082},":link",[162,130810,1722],{"class":168},[162,130812,130813,130815,130817,130819],{"class":164,"line":228},[162,130814,73970],{"class":207},[162,130816,1730],{"class":168},[162,130818,65437],{"class":207},[162,130820,4433],{"class":168},[162,130822,130823,130825,130827,130829],{"class":164,"line":252},[162,130824,73567],{"class":207},[162,130826,1730],{"class":168},[162,130828,57807],{"class":207},[162,130830,4433],{"class":168},[162,130832,130833],{"class":164,"line":328},[162,130834,1498],{"class":168},[162,130836,130837,130839,130842],{"class":164,"line":466},[162,130838,3538],{"class":54373},[162,130840,130841],{"class":5082},":visited",[162,130843,1722],{"class":168},[162,130845,130846,130848,130850,130853],{"class":164,"line":471},[162,130847,73970],{"class":207},[162,130849,1730],{"class":168},[162,130851,130852],{"class":207},"purple",[162,130854,4433],{"class":168},[162,130856,130857],{"class":164,"line":687},[162,130858,1498],{"class":168},[162,130860,130861,130863,130865],{"class":164,"line":692},[162,130862,3538],{"class":54373},[162,130864,64008],{"class":5082},[162,130866,1722],{"class":168},[162,130868,130869,130871,130873,130875],{"class":164,"line":698},[162,130870,73970],{"class":207},[162,130872,1730],{"class":168},[162,130874,57959],{"class":207},[162,130876,4433],{"class":168},[162,130878,130879,130881,130883,130885],{"class":164,"line":2955},[162,130880,73567],{"class":207},[162,130882,1730],{"class":168},[162,130884,130224],{"class":207},[162,130886,4433],{"class":168},[162,130888,130889],{"class":164,"line":2960},[162,130890,1498],{"class":168},[162,130892,130893,130895,130898],{"class":164,"line":2971},[162,130894,3538],{"class":54373},[162,130896,130897],{"class":5082},":active",[162,130899,1722],{"class":168},[162,130901,130902,130904,130906,130909],{"class":164,"line":2984},[162,130903,73970],{"class":207},[162,130905,1730],{"class":168},[162,130907,130908],{"class":207},"green",[162,130910,4433],{"class":168},[162,130912,130913],{"class":164,"line":2989},[162,130914,1498],{"class":168},[3284,130916,130918,130919,130922],{"id":130917},"_735-伪类选择器","7.3.5 ",[130920,130921],"focus",{},"伪类选择器",[19,130924,130925,130927,130928,130930],{},[130920,130926],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[71,130929,129671],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[153,130932,130934],{"className":129610,"code":130933,"language":129612,"meta":158,"style":158},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[71,130935,130936,130944,130955,130965],{"__ignoreMap":158},[162,130937,130938,130940,130942],{"class":164,"line":165},[162,130939,56891],{"class":54373},[162,130941,64968],{"class":5082},[162,130943,1722],{"class":168},[162,130945,130946,130949,130951,130953],{"class":164,"line":197},[162,130947,130948],{"class":207},"  border-color",[162,130950,1730],{"class":168},[162,130952,57959],{"class":207},[162,130954,4433],{"class":168},[162,130956,130957,130959,130961,130963],{"class":164,"line":228},[162,130958,73863],{"class":207},[162,130960,1730],{"class":168},[162,130962,57807],{"class":207},[162,130964,4433],{"class":168},[162,130966,130967],{"class":164,"line":252},[162,130968,1498],{"class":168},[3219,130970,130971],{},"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":158,"searchDepth":197,"depth":197,"links":130973},[130974,130979,130983],{"id":130349,"depth":197,"text":130350,"children":130975},[130976,130977,130978],{"id":130353,"depth":228,"text":130354},{"id":130437,"depth":228,"text":130438},{"id":130485,"depth":228,"text":130486},{"id":130575,"depth":197,"text":130576,"children":130980},[130981,130982],{"id":130579,"depth":228,"text":130580},{"id":130652,"depth":228,"text":130653},{"id":130662,"depth":197,"text":130663,"children":130984},[130985,130986,130987,130988,130989],{"id":130666,"depth":228,"text":130667},{"id":130719,"depth":228,"text":130720},{"id":130735,"depth":228,"text":130736},{"id":130755,"depth":228,"text":130756},{"id":130917,"depth":228,"text":130990},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":130341,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":130997,"title":130998,"body":130999,"description":3241,"extension":3242,"meta":132922,"navigation":300,"path":132923,"seo":132924,"stem":132925,"__hash__":132926},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":131000,"toc":132896},[131001,131004,131008,131017,131021,131047,131052,131055,131058,131061,131064,131068,131071,131081,131089,131093,131128,131133,131136,131139,131142,131145,131149,131152,131161,131165,131178,131183,131186,131189,131192,131196,131199,131203,131206,131261,131264,131295,131298,131352,131356,131359,131525,131648,131651,131654,131657,131660,131664,131667,131671,131674,131677,131681,131684,131715,131742,131770,131773,131777,131803,131846,131850,131944,131947,131974,131977,131980,131983,131986,131989,131992,131995,131998,132001,132005,132062,132089,132093,132141,132145,132186,132188,132191,132194,132197,132200,132204,132296,132299,132302,132305,132309,132432,132633,132637,132641,132644,132647,132650,132654,132657,132660,132685,132688,132691,132694,132697,132700,132704,132712,132774,132777,132835,132838,132841,132844,132847,132850,132853,132856,132893],[10,131002,130998],{"id":131003},"_8-css显示模式与背景特性",[14,131005,131007],{"id":131006},"_81-css元素显示模式","8.1 css元素显示模式",[19,131009,131010,131011,131013,131014,131016],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[71,131012,129221],{},"自己占一行，比如一行可以放多个",[71,131015,129224],{},"，HTML 元素一般分为块元素和行内元素两种类型",[3284,131018,131020],{"id":131019},"_811-块元素","8.1.1 块元素",[19,131022,131023,131024,131026,131027,3513,131030,3513,131032,3513,131034,3513,131037,3513,131040,131043,131044,131046],{},"常见的块元素有",[71,131025,129125],{},"~",[71,131028,131029],{},"\u003Ch6>",[71,131031,129151],{},[71,131033,129221],{},[71,131035,131036],{},"\u003Cul>",[71,131038,131039],{},"\u003Col>",[71,131041,131042],{},"\u003Cli>","等，其中 ",[71,131045,129221],{}," 标签是最典型的块元素",[19,131048,131049],{},[3453,131050,131051],{},"块级元素的特点：",[19,131053,131054],{},"① 比较霸道，自己独占一行。",[19,131056,131057],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,131059,131060],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,131062,131063],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,131065,131066],{},[3453,131067,3344],{},[19,131069,131070],{},"①文字类的元素内不能使用块级元素",[19,131072,80314,131073,131075,131076,131078,131079],{},[71,131074,129151],{}," 标签主要用于存放文字，因此 ",[71,131077,129151],{}," 里面不能放块级元素，特别是不能放",[71,131080,129221],{},[19,131082,131083,131084,131026,131086,131088],{},"⑥同理， ",[71,131085,129125],{},[71,131087,131029],{},"等都是文字类块级标签，里面也不能放其他块级元素",[3284,131090,131092],{"id":131091},"_812-行内元素","8.1.2 行内元素",[19,131094,131095,131096,3513,131098,3513,131101,3513,131104,3513,131107,3513,131110,3513,131113,3513,131116,3513,131119,3513,131122,131124,131125,131127],{},"常见的行内元素有 ",[71,131097,129383],{},[71,131099,131100],{},"\u003Cstrong>",[71,131102,131103],{},"\u003Cb>",[71,131105,131106],{},"\u003Cem>",[71,131108,131109],{},"\u003Ci>",[71,131111,131112],{},"\u003Cdel>",[71,131114,131115],{},"\u003Cs>",[71,131117,131118],{},"\u003Cins>",[71,131120,131121],{},"\u003Cu>",[71,131123,129224],{}," 等，其中 ",[71,131126,129224],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,131129,131130],{},[3453,131131,131132],{},"特点：",[19,131134,131135],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,131137,131138],{},"② 高、宽直接设置是无效的。",[19,131140,131141],{},"③ 默认宽度就是它本身内容的宽度。",[19,131143,131144],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,131146,131147],{},[3453,131148,3344],{},[19,131150,131151],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,131153,131154,131155,131157,131158,131160],{},"②特殊情况链接 ",[71,131156,129383],{}," 里面可以放块级元素，但是给 ",[71,131159,129383],{}," 转换一下块级模式最安全",[3284,131162,131164],{"id":131163},"_813-行内块元素","8.1.3 行内块元素",[19,131166,131167,131168,3513,131171,3513,131174,131177],{},"在行内元素中有几个特殊的标签 —— ",[71,131169,131170],{},"\u003Cimg \u002F>",[71,131172,131173],{},"\u003Cinput \u002F>",[71,131175,131176],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,131179,131180],{},[3453,131181,131182],{},"行内块元素的特点：",[19,131184,131185],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,131187,131188],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,131190,131191],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[3284,131193,131195],{"id":131194},"_814-总结","8.1.4 总结",[4602,131197],{"style":129466,"src":131198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[3284,131200,131202],{"id":131201},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,131204,131205],{},"①转换为块元素：display:block;",[153,131207,131209],{"className":129610,"code":131208,"language":129612,"meta":158,"style":158},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[71,131210,131211,131216,131222,131233,131245,131257],{"__ignoreMap":158},[162,131212,131213],{"class":164,"line":165},[162,131214,131215],{"class":361},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[162,131217,131218,131220],{"class":164,"line":197},[162,131219,3538],{"class":54373},[162,131221,1722],{"class":168},[162,131223,131224,131227,131229,131231],{"class":164,"line":228},[162,131225,131226],{"class":207},"  display",[162,131228,1730],{"class":168},[162,131230,63937],{"class":207},[162,131232,4433],{"class":168},[162,131234,131235,131237,131239,131241,131243],{"class":164,"line":252},[162,131236,73633],{"class":207},[162,131238,1730],{"class":168},[162,131240,3608],{"class":207},[162,131242,54564],{"class":172},[162,131244,4433],{"class":168},[162,131246,131247,131249,131251,131253,131255],{"class":164,"line":328},[162,131248,73853],{"class":207},[162,131250,1730],{"class":168},[162,131252,3693],{"class":207},[162,131254,54564],{"class":172},[162,131256,4433],{"class":168},[162,131258,131259],{"class":164,"line":466},[162,131260,1498],{"class":168},[19,131262,131263],{},"②转换为行内元素：display:inline;",[153,131265,131267],{"className":129610,"code":131266,"language":129612,"meta":158,"style":158},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[71,131268,131269,131274,131280,131291],{"__ignoreMap":158},[162,131270,131271],{"class":164,"line":165},[162,131272,131273],{"class":361},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[162,131275,131276,131278],{"class":164,"line":197},[162,131277,54683],{"class":54373},[162,131279,1722],{"class":168},[162,131281,131282,131284,131286,131289],{"class":164,"line":228},[162,131283,131226],{"class":207},[162,131285,1730],{"class":168},[162,131287,131288],{"class":207},"inline",[162,131290,4433],{"class":168},[162,131292,131293],{"class":164,"line":252},[162,131294,1498],{"class":168},[19,131296,131297],{},"③转换为行内块：display:inline-block;",[153,131299,131301],{"className":129610,"code":131300,"language":129612,"meta":158,"style":158},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[71,131302,131303,131308,131314,131324,131336,131348],{"__ignoreMap":158},[162,131304,131305],{"class":164,"line":165},[162,131306,131307],{"class":361},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[162,131309,131310,131312],{"class":164,"line":197},[162,131311,162],{"class":54373},[162,131313,1722],{"class":168},[162,131315,131316,131318,131320,131322],{"class":164,"line":228},[162,131317,131226],{"class":207},[162,131319,1730],{"class":168},[162,131321,75448],{"class":207},[162,131323,4433],{"class":168},[162,131325,131326,131328,131330,131332,131334],{"class":164,"line":252},[162,131327,73633],{"class":207},[162,131329,1730],{"class":168},[162,131331,3899],{"class":207},[162,131333,54564],{"class":172},[162,131335,4433],{"class":168},[162,131337,131338,131340,131342,131344,131346],{"class":164,"line":328},[162,131339,73853],{"class":207},[162,131341,1730],{"class":168},[162,131343,4225],{"class":207},[162,131345,54564],{"class":172},[162,131347,4433],{"class":168},[162,131349,131350],{"class":164,"line":466},[162,131351,1498],{"class":168},[3284,131353,131355],{"id":131354},"_816-小米侧边栏","8.1.6 小米侧边栏",[4602,131357],{"style":129466,"src":131358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[153,131360,131362],{"className":130357,"code":131361,"language":130359,"meta":158,"style":158},"\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",[71,131363,131364,131369,131384,131403,131422,131441,131460,131479,131498,131517],{"__ignoreMap":158},[162,131365,131366],{"class":164,"line":165},[162,131367,131368],{"class":361},"\u003C!-- 小米侧边栏案例 -->\n",[162,131370,131371,131373,131375,131377,131379,131382],{"class":164,"line":197},[162,131372,4187],{"class":168},[162,131374,54683],{"class":54373},[162,131376,56556],{"class":5082},[162,131378,173],{"class":168},[162,131380,131381],{"class":179},"\"sidebar\"",[162,131383,54380],{"class":168},[162,131385,131386,131388,131390,131392,131394,131396,131399,131401],{"class":164,"line":228},[162,131387,55215],{"class":168},[162,131389,3538],{"class":54373},[162,131391,64125],{"class":5082},[162,131393,173],{"class":168},[162,131395,64130],{"class":179},[162,131397,131398],{"class":168},">手机 电话卡\u003C\u002F",[162,131400,3538],{"class":54373},[162,131402,54380],{"class":168},[162,131404,131405,131407,131409,131411,131413,131415,131418,131420],{"class":164,"line":252},[162,131406,55215],{"class":168},[162,131408,3538],{"class":54373},[162,131410,64125],{"class":5082},[162,131412,173],{"class":168},[162,131414,64130],{"class":179},[162,131416,131417],{"class":168},">电视 盒子\u003C\u002F",[162,131419,3538],{"class":54373},[162,131421,54380],{"class":168},[162,131423,131424,131426,131428,131430,131432,131434,131437,131439],{"class":164,"line":328},[162,131425,55215],{"class":168},[162,131427,3538],{"class":54373},[162,131429,64125],{"class":5082},[162,131431,173],{"class":168},[162,131433,64130],{"class":179},[162,131435,131436],{"class":168},">笔记本 平板\u003C\u002F",[162,131438,3538],{"class":54373},[162,131440,54380],{"class":168},[162,131442,131443,131445,131447,131449,131451,131453,131456,131458],{"class":164,"line":466},[162,131444,55215],{"class":168},[162,131446,3538],{"class":54373},[162,131448,64125],{"class":5082},[162,131450,173],{"class":168},[162,131452,64130],{"class":179},[162,131454,131455],{"class":168},">出行 穿戴\u003C\u002F",[162,131457,3538],{"class":54373},[162,131459,54380],{"class":168},[162,131461,131462,131464,131466,131468,131470,131472,131475,131477],{"class":164,"line":471},[162,131463,55215],{"class":168},[162,131465,3538],{"class":54373},[162,131467,64125],{"class":5082},[162,131469,173],{"class":168},[162,131471,64130],{"class":179},[162,131473,131474],{"class":168},">智能 路由器\u003C\u002F",[162,131476,3538],{"class":54373},[162,131478,54380],{"class":168},[162,131480,131481,131483,131485,131487,131489,131491,131494,131496],{"class":164,"line":687},[162,131482,55215],{"class":168},[162,131484,3538],{"class":54373},[162,131486,64125],{"class":5082},[162,131488,173],{"class":168},[162,131490,64130],{"class":179},[162,131492,131493],{"class":168},">健康 儿童\u003C\u002F",[162,131495,3538],{"class":54373},[162,131497,54380],{"class":168},[162,131499,131500,131502,131504,131506,131508,131510,131513,131515],{"class":164,"line":692},[162,131501,55215],{"class":168},[162,131503,3538],{"class":54373},[162,131505,64125],{"class":5082},[162,131507,173],{"class":168},[162,131509,64130],{"class":179},[162,131511,131512],{"class":168},">耳机 音响\u003C\u002F",[162,131514,3538],{"class":54373},[162,131516,54380],{"class":168},[162,131518,131519,131521,131523],{"class":164,"line":698},[162,131520,54857],{"class":168},[162,131522,54683],{"class":54373},[162,131524,54380],{"class":168},[153,131526,131528],{"className":129610,"code":131527,"language":129612,"meta":158,"style":158},".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",[71,131529,131530,131539,131549,131562,131574,131586,131598,131608,131619,131623,131633,131644],{"__ignoreMap":158},[162,131531,131532,131535,131537],{"class":164,"line":165},[162,131533,131534],{"class":5082},".sidebar",[162,131536,4538],{"class":54373},[162,131538,1722],{"class":168},[162,131540,131541,131543,131545,131547],{"class":164,"line":197},[162,131542,131226],{"class":207},[162,131544,1730],{"class":168},[162,131546,63937],{"class":207},[162,131548,4433],{"class":168},[162,131550,131551,131553,131555,131558,131560],{"class":164,"line":228},[162,131552,73633],{"class":207},[162,131554,1730],{"class":168},[162,131556,131557],{"class":207},"234",[162,131559,54564],{"class":172},[162,131561,4433],{"class":168},[162,131563,131564,131566,131568,131570,131572],{"class":164,"line":252},[162,131565,73853],{"class":207},[162,131567,1730],{"class":168},[162,131569,3742],{"class":207},[162,131571,54564],{"class":172},[162,131573,4433],{"class":168},[162,131575,131576,131578,131580,131582,131584],{"class":164,"line":328},[162,131577,130294],{"class":207},[162,131579,1730],{"class":168},[162,131581,3742],{"class":207},[162,131583,54564],{"class":172},[162,131585,4433],{"class":168},[162,131587,131588,131590,131592,131594,131596],{"class":164,"line":466},[162,131589,73888],{"class":207},[162,131591,1730],{"class":168},[162,131593,4225],{"class":207},[162,131595,54564],{"class":172},[162,131597,4433],{"class":168},[162,131599,131600,131602,131604,131606],{"class":164,"line":471},[162,131601,73970],{"class":207},[162,131603,1730],{"class":168},[162,131605,63910],{"class":207},[162,131607,4433],{"class":168},[162,131609,131610,131612,131614,131617],{"class":164,"line":687},[162,131611,73943],{"class":207},[162,131613,1730],{"class":168},[162,131615,131616],{"class":207},"#55585a",[162,131618,4433],{"class":168},[162,131620,131621],{"class":164,"line":692},[162,131622,1498],{"class":168},[162,131624,131625,131627,131629,131631],{"class":164,"line":698},[162,131626,131534],{"class":5082},[162,131628,4538],{"class":54373},[162,131630,64008],{"class":5082},[162,131632,1722],{"class":168},[162,131634,131635,131637,131639,131642],{"class":164,"line":2955},[162,131636,73943],{"class":207},[162,131638,1730],{"class":168},[162,131640,131641],{"class":207},"#ff6700",[162,131643,4433],{"class":168},[162,131645,131646],{"class":164,"line":2960},[162,131647,1498],{"class":168},[4602,131649],{"style":129466,"src":131650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,131652,131653],{},"行高=盒子高度：实现文字的垂直居中",[19,131655,131656],{},"原理讲解：",[4602,131658],{"style":129466,"src":131659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,131661,131663],{"id":131662},"_82-css背景","8.2 css背景",[19,131665,131666],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[3284,131668,131670],{"id":131669},"_821-背景颜色","8.2.1 背景颜色",[19,131672,131673],{},"background-color:颜色值;",[19,131675,131676],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[3284,131678,131680],{"id":131679},"_822-背景图片","8.2.2 背景图片",[19,131682,131683],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[153,131685,131687],{"className":129610,"code":131686,"language":129612,"meta":158,"style":158},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[71,131688,131689,131695,131711],{"__ignoreMap":158},[162,131690,131691,131693],{"class":164,"line":165},[162,131692,54683],{"class":54373},[162,131694,1722],{"class":168},[162,131696,131697,131700,131702,131704,131706,131709],{"class":164,"line":197},[162,131698,131699],{"class":207},"  background-image",[162,131701,1730],{"class":168},[162,131703,64794],{"class":207},[162,131705,604],{"class":168},[162,131707,131708],{"class":671},"images\u002Fbg.png",[162,131710,5836],{"class":168},[162,131712,131713],{"class":164,"line":228},[162,131714,1498],{"class":168},[26,131716,131717,131726],{},[29,131718,131719],{},[32,131720,131721,131724],{},[35,131722,131723],{"align":26827},"参数值",[35,131725,105759],{"align":26827},[51,131727,131728,131735],{},[32,131729,131730,131732],{},[56,131731,57807],{"align":26827},[56,131733,131734],{"align":26827},"无背景图（默认的）",[32,131736,131737,131739],{},[56,131738,64794],{"align":26827},[56,131740,131741],{"align":26827},"使用绝对或相对地址指定背景图像",[153,131743,131744],{"className":129610,"code":131686,"language":129612,"meta":158,"style":158},[71,131745,131746,131752,131766],{"__ignoreMap":158},[162,131747,131748,131750],{"class":164,"line":165},[162,131749,54683],{"class":54373},[162,131751,1722],{"class":168},[162,131753,131754,131756,131758,131760,131762,131764],{"class":164,"line":197},[162,131755,131699],{"class":207},[162,131757,1730],{"class":168},[162,131759,64794],{"class":207},[162,131761,604],{"class":168},[162,131763,131708],{"class":671},[162,131765,5836],{"class":168},[162,131767,131768],{"class":164,"line":228},[162,131769,1498],{"class":168},[19,131771,131772],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[3284,131774,131776],{"id":131775},"_823-背景平铺","8.2.3 背景平铺",[153,131778,131780],{"className":129610,"code":131779,"language":129612,"meta":158,"style":158},"div {\n  background-repeat: no-repeat;\n}\n",[71,131781,131782,131788,131799],{"__ignoreMap":158},[162,131783,131784,131786],{"class":164,"line":165},[162,131785,54683],{"class":54373},[162,131787,1722],{"class":168},[162,131789,131790,131793,131795,131797],{"class":164,"line":197},[162,131791,131792],{"class":207},"  background-repeat",[162,131794,1730],{"class":168},[162,131796,64804],{"class":207},[162,131798,4433],{"class":168},[162,131800,131801],{"class":164,"line":228},[162,131802,1498],{"class":168},[26,131804,131805,131813],{},[29,131806,131807],{},[32,131808,131809,131811],{},[35,131810,131723],{"align":26827},[35,131812,105759],{"align":26827},[51,131814,131815,131823,131830,131838],{},[32,131816,131817,131820],{},[56,131818,131819],{"align":26827},"repeat",[56,131821,131822],{"align":26827},"背景图像在纵向和横向上平铺（默认的）",[32,131824,131825,131827],{},[56,131826,64804],{"align":26827},[56,131828,131829],{"align":26827},"背景图像不平铺",[32,131831,131832,131835],{},[56,131833,131834],{"align":26827},"repeat-x",[56,131836,131837],{"align":26827},"背景图像在横向上平铺",[32,131839,131840,131843],{},[56,131841,131842],{"align":26827},"repeat-y",[56,131844,131845],{"align":26827},"背景图像在纵向平铺",[3284,131847,131849],{"id":131848},"_824-背景图片位置","8.2.4 背景图片位置",[153,131851,131853],{"className":129610,"code":131852,"language":129612,"meta":158,"style":158},"\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",[71,131854,131855,131860,131866,131880,131884,131889,131895,131911,131915,131920,131926,131940],{"__ignoreMap":158},[162,131856,131857],{"class":164,"line":165},[162,131858,131859],{"class":361},"\u002F* 方位名词 *\u002F\n",[162,131861,131862,131864],{"class":164,"line":197},[162,131863,54683],{"class":54373},[162,131865,1722],{"class":168},[162,131867,131868,131871,131873,131875,131878],{"class":164,"line":228},[162,131869,131870],{"class":207},"  background-position",[162,131872,1730],{"class":168},[162,131874,54664],{"class":207},[162,131876,131877],{"class":207}," top",[162,131879,4433],{"class":168},[162,131881,131882],{"class":164,"line":252},[162,131883,1498],{"class":168},[162,131885,131886],{"class":164,"line":328},[162,131887,131888],{"class":361},"\u002F* 精确单位 *\u002F\n",[162,131890,131891,131893],{"class":164,"line":466},[162,131892,54683],{"class":54373},[162,131894,1722],{"class":168},[162,131896,131897,131899,131901,131903,131905,131907,131909],{"class":164,"line":471},[162,131898,131870],{"class":207},[162,131900,1730],{"class":168},[162,131902,1011],{"class":207},[162,131904,54564],{"class":172},[162,131906,60573],{"class":207},[162,131908,54564],{"class":172},[162,131910,4433],{"class":168},[162,131912,131913],{"class":164,"line":687},[162,131914,1498],{"class":168},[162,131916,131917],{"class":164,"line":692},[162,131918,131919],{"class":361},"\u002F* 混合单位 *\u002F\n",[162,131921,131922,131924],{"class":164,"line":698},[162,131923,54683],{"class":54373},[162,131925,1722],{"class":168},[162,131927,131928,131930,131932,131934,131936,131938],{"class":164,"line":2955},[162,131929,131870],{"class":207},[162,131931,1730],{"class":168},[162,131933,1011],{"class":207},[162,131935,54564],{"class":172},[162,131937,20235],{"class":207},[162,131939,4433],{"class":168},[162,131941,131942],{"class":164,"line":2960},[162,131943,1498],{"class":168},[19,131945,131946],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[26,131948,131949,131957],{},[29,131950,131951],{},[32,131952,131953,131955],{},[35,131954,131723],{"align":26827},[35,131956,28960],{"align":26827},[51,131958,131959,131966],{},[32,131960,131961,131963],{},[56,131962,55039],{"align":26827},[56,131964,131965],{"align":26827},"百分数|由浮点数和单位标识符组成的长度值",[32,131967,131968,131971],{},[56,131969,131970],{"align":26827},"position",[56,131972,131973],{"align":26827},"top|center|bottom|left|center|right 方位名词",[19,131975,131976],{},"其他说明：",[19,131978,131979],{},"①参数是方位名词",[19,131981,131982],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,131984,131985],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,131987,131988],{},"②参数是精确单位",[19,131990,131991],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,131993,131994],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,131996,131997],{},"③参数是混合单位",[19,131999,132000],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[3284,132002,132004],{"id":132003},"_825-背景图片固定","8.2.5 背景图片固定",[153,132006,132008],{"className":129610,"code":132007,"language":129612,"meta":158,"style":158},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[71,132009,132010,132015,132021,132033,132037,132042,132048,132058],{"__ignoreMap":158},[162,132011,132012],{"class":164,"line":165},[162,132013,132014],{"class":361},"\u002F* 背景滚动（默认） *\u002F\n",[162,132016,132017,132019],{"class":164,"line":197},[162,132018,54683],{"class":54373},[162,132020,1722],{"class":168},[162,132022,132023,132026,132028,132031],{"class":164,"line":228},[162,132024,132025],{"class":207},"  background-attachment",[162,132027,1730],{"class":168},[162,132029,132030],{"class":207},"scroll",[162,132032,4433],{"class":168},[162,132034,132035],{"class":164,"line":252},[162,132036,1498],{"class":168},[162,132038,132039],{"class":164,"line":328},[162,132040,132041],{"class":361},"\u002F* 背景固定 *\u002F\n",[162,132043,132044,132046],{"class":164,"line":466},[162,132045,54683],{"class":54373},[162,132047,1722],{"class":168},[162,132049,132050,132052,132054,132056],{"class":164,"line":471},[162,132051,132025],{"class":207},[162,132053,1730],{"class":168},[162,132055,89298],{"class":207},[162,132057,4433],{"class":168},[162,132059,132060],{"class":164,"line":687},[162,132061,1498],{"class":168},[26,132063,132064,132073],{},[29,132065,132066],{},[32,132067,132068,132071],{},[35,132069,132070],{"align":26827},"参数",[35,132072,105759],{"align":26827},[51,132074,132075,132082],{},[32,132076,132077,132079],{},[56,132078,132030],{"align":26827},[56,132080,132081],{"align":26827},"背景图像是随对象内容滚动",[32,132083,132084,132086],{},[56,132085,89298],{"align":26827},[56,132087,132088],{"align":26827},"背景图像固定",[3284,132090,132092],{"id":132091},"_826-背景样式合写","8.2.6 背景样式合写",[153,132094,132096],{"className":129610,"code":132095,"language":129612,"meta":158,"style":158},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[71,132097,132098,132103,132109,132137],{"__ignoreMap":158},[162,132099,132100],{"class":164,"line":165},[162,132101,132102],{"class":361},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[162,132104,132105,132107],{"class":164,"line":197},[162,132106,54683],{"class":54373},[162,132108,1722],{"class":168},[162,132110,132111,132113,132115,132117,132120,132122,132124,132126,132128,132131,132133,132135],{"class":164,"line":228},[162,132112,73676],{"class":207},[162,132114,1730],{"class":168},[162,132116,63910],{"class":207},[162,132118,132119],{"class":207}," url",[162,132121,604],{"class":168},[162,132123,131708],{"class":671},[162,132125,1823],{"class":168},[162,132127,64804],{"class":207},[162,132129,132130],{"class":207}," fixed",[162,132132,20235],{"class":207},[162,132134,131877],{"class":207},[162,132136,4433],{"class":168},[162,132138,132139],{"class":164,"line":252},[162,132140,1498],{"class":168},[3284,132142,132144],{"id":132143},"_827-背景色半透明","8.2.7 背景色半透明",[153,132146,132148],{"className":129610,"code":132147,"language":129612,"meta":158,"style":158},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[71,132149,132150,132156,132182],{"__ignoreMap":158},[162,132151,132152,132154],{"class":164,"line":165},[162,132153,54683],{"class":54373},[162,132155,1722],{"class":168},[162,132157,132158,132160,132162,132164,132166,132168,132170,132172,132174,132176,132178,132180],{"class":164,"line":197},[162,132159,73676],{"class":207},[162,132161,1730],{"class":168},[162,132163,58180],{"class":207},[162,132165,604],{"class":168},[162,132167,312],{"class":207},[162,132169,183],{"class":168},[162,132171,312],{"class":207},[162,132173,183],{"class":168},[162,132175,312],{"class":207},[162,132177,183],{"class":168},[162,132179,103585],{"class":207},[162,132181,5836],{"class":168},[162,132183,132184],{"class":164,"line":228},[162,132185,1498],{"class":168},[19,132187,102460],{},[19,132189,132190],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,132192,132193],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,132195,132196],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,132198,132199],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[3284,132201,132203],{"id":132202},"_828-总结","8.2.8 总结",[26,132205,132206,132217],{},[29,132207,132208],{},[32,132209,132210,132213,132215],{},[35,132211,132212],{"align":26827},"属性",[35,132214,105759],{"align":26827},[35,132216,3456],{"align":26827},[51,132218,132219,132230,132241,132252,132263,132274,132285],{},[32,132220,132221,132224,132227],{},[56,132222,132223],{"align":26827},"background-color",[56,132225,132226],{"align":26827},"背景颜色",[56,132228,132229],{"align":26827},"预定义的颜色值\u002F十六进制\u002FRGB代码",[32,132231,132232,132235,132238],{},[56,132233,132234],{"align":26827},"background-image",[56,132236,132237],{"align":26827},"背景图片",[56,132239,132240],{"align":26827},"url(图片路径)",[32,132242,132243,132246,132249],{},[56,132244,132245],{"align":26827},"background-repeat",[56,132247,132248],{"align":26827},"是否平铺",[56,132250,132251],{"align":26827},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[32,132253,132254,132257,132260],{},[56,132255,132256],{"align":26827},"background-position",[56,132258,132259],{"align":26827},"背景位置",[56,132261,132262],{"align":26827},"length\u002Fposition 分别是x和y坐标",[32,132264,132265,132268,132271],{},[56,132266,132267],{"align":26827},"background-attachment",[56,132269,132270],{"align":26827},"背景附着",[56,132272,132273],{"align":26827},"scroll(背景滚动) \u002Ffixed (背景固定)",[32,132275,132276,132279,132282],{},[56,132277,132278],{"align":26827},"背景简写",[56,132280,132281],{"align":26827},"书写更简单",[56,132283,132284],{"align":26827},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[32,132286,132287,132290,132293],{},[56,132288,132289],{"align":26827},"背景半透明",[56,132291,132292],{"align":26827},"背景颜色半透明",[56,132294,132295],{"align":26827},"background: rgba(0,0,0.3); 后面必须是4个值",[19,132297,132298],{},"颜色渐变：",[4602,132300],{"style":129466,"src":132301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[4602,132303],{"style":129466,"src":132304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[3284,132306,132308],{"id":132307},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[153,132310,132312],{"className":130357,"code":132311,"language":130359,"meta":158,"style":158},"\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",[71,132313,132314,132329,132348,132367,132386,132405,132424],{"__ignoreMap":158},[162,132315,132316,132318,132320,132322,132324,132327],{"class":164,"line":165},[162,132317,4187],{"class":168},[162,132319,54683],{"class":54373},[162,132321,56556],{"class":5082},[162,132323,173],{"class":168},[162,132325,132326],{"class":179},"\"nav\"",[162,132328,54380],{"class":168},[162,132330,132331,132333,132335,132337,132339,132341,132344,132346],{"class":164,"line":197},[162,132332,55215],{"class":168},[162,132334,3538],{"class":54373},[162,132336,64125],{"class":5082},[162,132338,173],{"class":168},[162,132340,64130],{"class":179},[162,132342,132343],{"class":168},">五彩导航1\u003C\u002F",[162,132345,3538],{"class":54373},[162,132347,54380],{"class":168},[162,132349,132350,132352,132354,132356,132358,132360,132363,132365],{"class":164,"line":228},[162,132351,55215],{"class":168},[162,132353,3538],{"class":54373},[162,132355,64125],{"class":5082},[162,132357,173],{"class":168},[162,132359,64130],{"class":179},[162,132361,132362],{"class":168},">五彩导航2\u003C\u002F",[162,132364,3538],{"class":54373},[162,132366,54380],{"class":168},[162,132368,132369,132371,132373,132375,132377,132379,132382,132384],{"class":164,"line":252},[162,132370,55215],{"class":168},[162,132372,3538],{"class":54373},[162,132374,64125],{"class":5082},[162,132376,173],{"class":168},[162,132378,64130],{"class":179},[162,132380,132381],{"class":168},">五彩导航3\u003C\u002F",[162,132383,3538],{"class":54373},[162,132385,54380],{"class":168},[162,132387,132388,132390,132392,132394,132396,132398,132401,132403],{"class":164,"line":328},[162,132389,55215],{"class":168},[162,132391,3538],{"class":54373},[162,132393,64125],{"class":5082},[162,132395,173],{"class":168},[162,132397,64130],{"class":179},[162,132399,132400],{"class":168},">五彩导航4\u003C\u002F",[162,132402,3538],{"class":54373},[162,132404,54380],{"class":168},[162,132406,132407,132409,132411,132413,132415,132417,132420,132422],{"class":164,"line":466},[162,132408,55215],{"class":168},[162,132410,3538],{"class":54373},[162,132412,64125],{"class":5082},[162,132414,173],{"class":168},[162,132416,64130],{"class":179},[162,132418,132419],{"class":168},">五彩导航5\u003C\u002F",[162,132421,3538],{"class":54373},[162,132423,54380],{"class":168},[162,132425,132426,132428,132430],{"class":164,"line":471},[162,132427,54857],{"class":168},[162,132429,54683],{"class":54373},[162,132431,54380],{"class":168},[153,132433,132435],{"className":129610,"code":132434,"language":129612,"meta":158,"style":158},".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",[71,132436,132437,132446,132456,132468,132480,132490,132502,132512,132516,132541,132564,132587,132610],{"__ignoreMap":158},[162,132438,132439,132442,132444],{"class":164,"line":165},[162,132440,132441],{"class":5082},".nav",[162,132443,4538],{"class":54373},[162,132445,1722],{"class":168},[162,132447,132448,132450,132452,132454],{"class":164,"line":197},[162,132449,131226],{"class":207},[162,132451,1730],{"class":168},[162,132453,75448],{"class":207},[162,132455,4433],{"class":168},[162,132457,132458,132460,132462,132464,132466],{"class":164,"line":228},[162,132459,73633],{"class":207},[162,132461,1730],{"class":168},[162,132463,4098],{"class":207},[162,132465,54564],{"class":172},[162,132467,4433],{"class":168},[162,132469,132470,132472,132474,132476,132478],{"class":164,"line":252},[162,132471,73853],{"class":207},[162,132473,1730],{"class":168},[162,132475,4137],{"class":207},[162,132477,54564],{"class":172},[162,132479,4433],{"class":168},[162,132481,132482,132484,132486,132488],{"class":164,"line":328},[162,132483,73591],{"class":207},[162,132485,1730],{"class":168},[162,132487,54664],{"class":207},[162,132489,4433],{"class":168},[162,132491,132492,132494,132496,132498,132500],{"class":164,"line":466},[162,132493,130294],{"class":207},[162,132495,1730],{"class":168},[162,132497,4137],{"class":207},[162,132499,54564],{"class":172},[162,132501,4433],{"class":168},[162,132503,132504,132506,132508,132510],{"class":164,"line":471},[162,132505,73970],{"class":207},[162,132507,1730],{"class":168},[162,132509,63910],{"class":207},[162,132511,4433],{"class":168},[162,132513,132514],{"class":164,"line":687},[162,132515,1498],{"class":168},[162,132517,132518,132520,132522,132525,132527,132529,132532,132534,132536,132538],{"class":164,"line":692},[162,132519,132441],{"class":5082},[162,132521,4538],{"class":54373},[162,132523,132524],{"class":5082},":nth-child",[162,132526,604],{"class":168},[162,132528,208],{"class":207},[162,132530,132531],{"class":168},") { ",[162,132533,132223],{"class":207},[162,132535,1730],{"class":168},[162,132537,131641],{"class":207},[162,132539,132540],{"class":168},"; }\n",[162,132542,132543,132545,132547,132549,132551,132553,132555,132557,132559,132562],{"class":164,"line":698},[162,132544,132441],{"class":5082},[162,132546,4538],{"class":54373},[162,132548,132524],{"class":5082},[162,132550,604],{"class":168},[162,132552,213],{"class":207},[162,132554,132531],{"class":168},[162,132556,132223],{"class":207},[162,132558,1730],{"class":168},[162,132560,132561],{"class":207},"#ff0000",[162,132563,132540],{"class":168},[162,132565,132566,132568,132570,132572,132574,132576,132578,132580,132582,132585],{"class":164,"line":2955},[162,132567,132441],{"class":5082},[162,132569,4538],{"class":54373},[162,132571,132524],{"class":5082},[162,132573,604],{"class":168},[162,132575,218],{"class":207},[162,132577,132531],{"class":168},[162,132579,132223],{"class":207},[162,132581,1730],{"class":168},[162,132583,132584],{"class":207},"#00a4ff",[162,132586,132540],{"class":168},[162,132588,132589,132591,132593,132595,132597,132599,132601,132603,132605,132608],{"class":164,"line":2960},[162,132590,132441],{"class":5082},[162,132592,4538],{"class":54373},[162,132594,132524],{"class":5082},[162,132596,604],{"class":168},[162,132598,223],{"class":207},[162,132600,132531],{"class":168},[162,132602,132223],{"class":207},[162,132604,1730],{"class":168},[162,132606,132607],{"class":207},"#ff00ff",[162,132609,132540],{"class":168},[162,132611,132612,132614,132616,132618,132620,132622,132624,132626,132628,132631],{"class":164,"line":2971},[162,132613,132441],{"class":5082},[162,132615,4538],{"class":54373},[162,132617,132524],{"class":5082},[162,132619,604],{"class":168},[162,132621,637],{"class":207},[162,132623,132531],{"class":168},[162,132625,132223],{"class":207},[162,132627,1730],{"class":168},[162,132629,132630],{"class":207},"#00ff00",[162,132632,132540],{"class":168},[14,132634,132636],{"id":132635},"_83-css三大特性","8.3 css三大特性",[3284,132638,132640],{"id":132639},"_831-层叠性","8.3.1 层叠性",[19,132642,132643],{},"为了解决样式冲突问题",[19,132645,132646],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,132648,132649],{},"   ②样式不冲突，不会层叠",[3284,132651,132653],{"id":132652},"_832-继承性","8.3.2 继承性",[19,132655,132656],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,132658,132659],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[153,132661,132663],{"className":129610,"code":132662,"language":129612,"meta":158,"style":158},"p {\n  color: #333;\n}\n",[71,132664,132665,132671,132681],{"__ignoreMap":158},[162,132666,132667,132669],{"class":164,"line":165},[162,132668,19],{"class":54373},[162,132670,1722],{"class":168},[162,132672,132673,132675,132677,132679],{"class":164,"line":197},[162,132674,73970],{"class":207},[162,132676,1730],{"class":168},[162,132678,65437],{"class":207},[162,132680,4433],{"class":168},[162,132682,132683],{"class":164,"line":228},[162,132684,1498],{"class":168},[4602,132686],{"style":129466,"src":132687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,132689,132690],{},"解释：①行高可以跟单位也可以不跟单位",[19,132692,132693],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,132695,132696],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,132698,132699],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[3284,132701,132703],{"id":132702},"_833-优先级","8.3.3 优先级",[1452,132705,132706,132709],{},[1455,132707,132708],{},"选择器相同，则执行层叠性",[1455,132710,132711],{},"选择器不同，则根据选择器权重执行",[26,132713,132714,132724],{},[29,132715,132716],{},[32,132717,132718,132721],{},[35,132719,132720],{"align":26827},"选择器",[35,132722,132723],{"align":26827},"选择器权重",[51,132725,132726,132734,132742,132750,132758,132766],{},[32,132727,132728,132731],{},[56,132729,132730],{"align":26827},"继承 或者*",[56,132732,132733],{"align":26827},"0，0，0，0",[32,132735,132736,132739],{},[56,132737,132738],{"align":26827},"标签选择器",[56,132740,132741],{"align":26827},"0，0，0，1",[32,132743,132744,132747],{},[56,132745,132746],{"align":26827},"类选择器，伪类选择器",[56,132748,132749],{"align":26827},"0，0，1，0",[32,132751,132752,132755],{},[56,132753,132754],{"align":26827},"ID选择器",[56,132756,132757],{"align":26827},"0，1，0，0",[32,132759,132760,132763],{},[56,132761,132762],{"align":26827},"行内样式",[56,132764,132765],{"align":26827},"1，0，0，0",[32,132767,132768,132771],{},[56,132769,132770],{"align":26827},"！important",[56,132772,132773],{"align":26827},"无穷大",[19,132775,132776],{},"! important用法：",[153,132778,132780],{"className":129610,"code":132779,"language":129612,"meta":158,"style":158},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[71,132781,132782,132787,132793,132806,132810,132815,132821,132831],{"__ignoreMap":158},[162,132783,132784],{"class":164,"line":165},[162,132785,132786],{"class":361},"\u002F* !important 拥有最高优先级 *\u002F\n",[162,132788,132789,132791],{"class":164,"line":197},[162,132790,54683],{"class":54373},[162,132792,1722],{"class":168},[162,132794,132795,132797,132799,132801,132804],{"class":164,"line":228},[162,132796,73970],{"class":207},[162,132798,1730],{"class":168},[162,132800,54717],{"class":207},[162,132802,132803],{"class":172}," !important",[162,132805,4433],{"class":168},[162,132807,132808],{"class":164,"line":252},[162,132809,1498],{"class":168},[162,132811,132812],{"class":164,"line":328},[162,132813,132814],{"class":361},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[162,132816,132817,132819],{"class":164,"line":466},[162,132818,54683],{"class":54373},[162,132820,1722],{"class":168},[162,132822,132823,132825,132827,132829],{"class":164,"line":471},[162,132824,73970],{"class":207},[162,132826,1730],{"class":168},[162,132828,60490],{"class":207},[162,132830,4433],{"class":168},[162,132832,132833],{"class":164,"line":687},[162,132834,1498],{"class":168},[19,132836,132837],{},"优先级注意点：",[19,132839,132840],{},"①权重是有4组数字组成,但是不会有进位",[19,132842,132843],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,132845,132846],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,132848,132849],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,132851,132852],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,132854,132855],{},"⑥复合选择器",[26,132857,132858,132868],{},[29,132859,132860],{},[32,132861,132862,132865],{},[35,132863,132864],{"align":26827},"div ul li",[35,132866,132867],{"align":26827},"0,0,0,3",[51,132869,132870,132878,132886],{},[32,132871,132872,132875],{},[56,132873,132874],{"align":26827},".nav ul li",[56,132876,132877],{"align":26827},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[32,132879,132880,132883],{},[56,132881,132882],{"align":26827},"a:hover",[56,132884,132885],{"align":26827},"0,0,1,1",[32,132887,132888,132891],{},[56,132889,132890],{"align":26827},".nav a",[56,132892,132885],{"align":26827},[3219,132894,132895],{},"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":158,"searchDepth":197,"depth":197,"links":132897},[132898,132906,132917],{"id":131006,"depth":197,"text":131007,"children":132899},[132900,132901,132902,132903,132904,132905],{"id":131019,"depth":228,"text":131020},{"id":131091,"depth":228,"text":131092},{"id":131163,"depth":228,"text":131164},{"id":131194,"depth":228,"text":131195},{"id":131201,"depth":228,"text":131202},{"id":131354,"depth":228,"text":131355},{"id":131662,"depth":197,"text":131663,"children":132907},[132908,132909,132910,132911,132912,132913,132914,132915,132916],{"id":131669,"depth":228,"text":131670},{"id":131679,"depth":228,"text":131680},{"id":131775,"depth":228,"text":131776},{"id":131848,"depth":228,"text":131849},{"id":132003,"depth":228,"text":132004},{"id":132091,"depth":228,"text":132092},{"id":132143,"depth":228,"text":132144},{"id":132202,"depth":228,"text":132203},{"id":132307,"depth":228,"text":132308},{"id":132635,"depth":197,"text":132636,"children":132918},[132919,132920,132921],{"id":132639,"depth":228,"text":132640},{"id":132652,"depth":228,"text":132653},{"id":132702,"depth":228,"text":132703},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":130998,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":132928,"title":132929,"body":132930,"description":3241,"extension":3242,"meta":134520,"navigation":300,"path":134521,"seo":134522,"stem":134523,"__hash__":134524},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":132931,"toc":134499},[132932,132935,132939,132942,132945,132948,132951,132954,132957,132960,132964,132972,133009,133045,133048,133062,133067,133101,133104,133197,133202,133205,133235,133238,133243,133251,133255,133262,133308,133352,133357,133360,133363,133366,133369,133372,133375,133377,133380,133384,133389,133433,133438,133441,133444,133481,133486,133489,133492,133495,133498,133530,133533,133536,133539,133571,133574,133577,133580,133584,133587,133619,133622,133626,133646,133649,133657,133660,133664,133669,133672,133704,133709,133712,133750,133754,133759,133762,133765,133796,133799,133816,133821,133873,133933,133938,133992,134030,134034,134038,134041,134045,134053,134056,134058,134069,134074,134122,134156,134159,134162,134165,134168,134212,134215,134218,134221,134224,134227,134230,134274,134277,134280,134283,134286,134289,134292,134298,134301,134345,134348,134351,134354,134357,134360,134404,134407,134409,134412,134416,134420,134458,134462,134465,134468,134472,134480,134484,134487,134490,134493,134496],[10,132933,132929],{"id":132934},"_9-css盒模型浮动与切图",[14,132936,132938],{"id":132937},"_91-盒子模型","9.1 盒子模型",[19,132940,132941],{},"利用盒子来设计网页",[19,132943,132944],{},"盒子包含：边框、外边距、内边距、实际内容",[19,132946,132947],{},"网页布局设置：",[19,132949,132950],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,132952,132953],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,132955,132956],{},"③往盒子里装内容",[4602,132958],{"style":129466,"src":132959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[3284,132961,132963],{"id":132962},"_911-边框border","9.1.1 边框（border）",[1452,132965,132966,132969],{},[1455,132967,132968],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[1455,132970,132971],{},"语法",[153,132973,132975],{"className":129610,"code":132974,"language":129612,"meta":158,"style":158},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[71,132976,132977,132982,132988,133005],{"__ignoreMap":158},[162,132978,132979],{"class":164,"line":165},[162,132980,132981],{"class":361},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[162,132983,132984,132986],{"class":164,"line":197},[162,132985,54683],{"class":54373},[162,132987,1722],{"class":168},[162,132989,132990,132992,132994,132996,132998,133000,133003],{"class":164,"line":228},[162,132991,73961],{"class":207},[162,132993,1730],{"class":168},[162,132995,208],{"class":207},[162,132997,54564],{"class":172},[162,132999,54593],{"class":207},[162,133001,133002],{"class":207}," #ccc",[162,133004,4433],{"class":168},[162,133006,133007],{"class":164,"line":252},[162,133008,1498],{"class":168},[26,133010,133011,133019],{},[29,133012,133013],{},[32,133014,133015,133017],{},[35,133016,132212],{"align":26827},[35,133018,105759],{"align":26827},[51,133020,133021,133029,133037],{},[32,133022,133023,133026],{},[56,133024,133025],{"align":26827},"border-width",[56,133027,133028],{"align":26827},"定义边框粗细，单位是px",[32,133030,133031,133034],{},[56,133032,133033],{"align":26827},"border-style",[56,133035,133036],{"align":26827},"边框的样式",[32,133038,133039,133042],{},[56,133040,133041],{"align":26827},"border-color",[56,133043,133044],{"align":26827},"边框的颜色",[19,133046,133047],{},"边框样式 border-style 可以设置如下值：",[4279,133049,133050,133053,133056,133059],{},[1455,133051,133052],{},"none：没有边框即忽略所有边框的宽度（默认值）",[1455,133054,133055],{},"solid：边框为单实线(最为常用的)",[1455,133057,133058],{},"dashed：边框为虚线",[1455,133060,133061],{},"dotted：边框为点线",[1452,133063,133064],{"start":228},[1455,133065,133066],{},"边框的合写分写",[153,133068,133069],{"className":129610,"code":132974,"language":129612,"meta":158,"style":158},[71,133070,133071,133075,133081,133097],{"__ignoreMap":158},[162,133072,133073],{"class":164,"line":165},[162,133074,132981],{"class":361},[162,133076,133077,133079],{"class":164,"line":197},[162,133078,54683],{"class":54373},[162,133080,1722],{"class":168},[162,133082,133083,133085,133087,133089,133091,133093,133095],{"class":164,"line":228},[162,133084,73961],{"class":207},[162,133086,1730],{"class":168},[162,133088,208],{"class":207},[162,133090,54564],{"class":172},[162,133092,54593],{"class":207},[162,133094,133002],{"class":207},[162,133096,4433],{"class":168},[162,133098,133099],{"class":164,"line":252},[162,133100,1498],{"class":168},[19,133102,133103],{},"边框分开写法：",[153,133105,133107],{"className":129610,"code":133106,"language":129612,"meta":158,"style":158},"\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",[71,133108,133109,133114,133120,133138,133156,133175,133193],{"__ignoreMap":158},[162,133110,133111],{"class":164,"line":165},[162,133112,133113],{"class":361},"\u002F* 边框分开写法 *\u002F\n",[162,133115,133116,133118],{"class":164,"line":197},[162,133117,54683],{"class":54373},[162,133119,1722],{"class":168},[162,133121,133122,133125,133127,133129,133131,133133,133136],{"class":164,"line":228},[162,133123,133124],{"class":207},"  border-top",[162,133126,1730],{"class":168},[162,133128,208],{"class":207},[162,133130,54564],{"class":172},[162,133132,54593],{"class":207},[162,133134,133135],{"class":207}," #000",[162,133137,4433],{"class":168},[162,133139,133140,133143,133145,133147,133149,133151,133154],{"class":164,"line":252},[162,133141,133142],{"class":207},"  border-right",[162,133144,1730],{"class":168},[162,133146,213],{"class":207},[162,133148,54564],{"class":172},[162,133150,65309],{"class":207},[162,133152,133153],{"class":207}," #333",[162,133155,4433],{"class":168},[162,133157,133158,133161,133163,133165,133167,133170,133173],{"class":164,"line":328},[162,133159,133160],{"class":207},"  border-bottom",[162,133162,1730],{"class":168},[162,133164,218],{"class":207},[162,133166,54564],{"class":172},[162,133168,133169],{"class":207}," dotted",[162,133171,133172],{"class":207}," #666",[162,133174,4433],{"class":168},[162,133176,133177,133180,133182,133184,133186,133188,133191],{"class":164,"line":466},[162,133178,133179],{"class":207},"  border-left",[162,133181,1730],{"class":168},[162,133183,208],{"class":207},[162,133185,54564],{"class":172},[162,133187,54593],{"class":207},[162,133189,133190],{"class":207}," #999",[162,133192,4433],{"class":168},[162,133194,133195],{"class":164,"line":471},[162,133196,1498],{"class":168},[1452,133198,133199],{"start":252},[1455,133200,133201],{},"表格的细线边框",[19,133203,133204],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[153,133206,133208],{"className":129610,"code":133207,"language":129612,"meta":158,"style":158},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[71,133209,133210,133215,133221,133231],{"__ignoreMap":158},[162,133211,133212],{"class":164,"line":165},[162,133213,133214],{"class":361},"\u002F* 表格细线边框合并 *\u002F\n",[162,133216,133217,133219],{"class":164,"line":197},[162,133218,26],{"class":54373},[162,133220,1722],{"class":168},[162,133222,133223,133225,133227,133229],{"class":164,"line":228},[162,133224,73643],{"class":207},[162,133226,1730],{"class":168},[162,133228,68102],{"class":207},[162,133230,4433],{"class":168},[162,133232,133233],{"class":164,"line":252},[162,133234,1498],{"class":168},[19,133236,133237],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[1452,133239,133240],{"start":328},[1455,133241,133242],{},"解决边框额外增加盒子的实际大小的方法：",[4279,133244,133245,133248],{},[1455,133246,133247],{},"测量盒子大小的时候,不量边框",[1455,133249,133250],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[3284,133252,133254],{"id":133253},"_912-内边距","9.1.2 内边距",[1452,133256,133257,133260],{},[1455,133258,133259],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[1455,133261,132971],{},[26,133263,133264,133274],{},[29,133265,133266],{},[32,133267,133268,133271],{},[35,133269,133270],{"align":26827},"值的个数",[35,133272,133273],{"align":26827},"表达意思",[51,133275,133276,133284,133292,133300],{},[32,133277,133278,133281],{},[56,133279,133280],{"align":26827},"padding: 5px;",[56,133282,133283],{"align":26827},"1个值，代表上下左右都有5个元素",[32,133285,133286,133289],{},[56,133287,133288],{"align":26827},"padding: 5px 10px;",[56,133290,133291],{"align":26827},"2个值，代表上下内边距为5像素，左右内边距为10像素",[32,133293,133294,133297],{},[56,133295,133296],{"align":26827},"padding: 5px 10px 20px;",[56,133298,133299],{"align":26827},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[32,133301,133302,133305],{},[56,133303,133304],{"align":26827},"padding: 5px 10px 20px 30px;",[56,133306,133307],{"align":26827},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[26,133309,133310,133318],{},[29,133311,133312],{},[32,133313,133314,133316],{},[35,133315,132212],{"align":26827},[35,133317,105759],{"align":26827},[51,133319,133320,133328,133336,133344],{},[32,133321,133322,133325],{},[56,133323,133324],{"align":26827},"padding-left",[56,133326,133327],{"align":26827},"左内边距",[32,133329,133330,133333],{},[56,133331,133332],{"align":26827},"padding-right",[56,133334,133335],{"align":26827},"右内边距",[32,133337,133338,133341],{},[56,133339,133340],{"align":26827},"padding-top",[56,133342,133343],{"align":26827},"上内边距",[32,133345,133346,133349],{},[56,133347,133348],{"align":26827},"padding-bottom",[56,133350,133351],{"align":26827},"下内边距",[1452,133353,133354],{"start":228},[1455,133355,133356],{},"内边距会影响盒子的实际大小",[19,133358,133359],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,133361,133362],{},"①内容和边框有了距离，添加了内边距",[19,133364,133365],{},"②padding影响了盒子实际大小",[19,133367,133368],{},"内边距对盒子大小的影响：",[19,133370,133371],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,133373,133374],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,133376,98285],{},[19,133378,133379],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[3284,133381,133383],{"id":133382},"_913-外边距","9.1.3 外边距",[1452,133385,133386],{},[1455,133387,133388],{},"控制盒子与盒子之间的距离",[26,133390,133391,133399],{},[29,133392,133393],{},[32,133394,133395,133397],{},[35,133396,132212],{"align":26827},[35,133398,105759],{"align":26827},[51,133400,133401,133409,133417,133425],{},[32,133402,133403,133406],{},[56,133404,133405],{"align":26827},"margin-left",[56,133407,133408],{"align":26827},"左外边距",[32,133410,133411,133414],{},[56,133412,133413],{"align":26827},"margin-right",[56,133415,133416],{"align":26827},"右外边距",[32,133418,133419,133422],{},[56,133420,133421],{"align":26827},"margin-top",[56,133423,133424],{"align":26827},"上外边距",[32,133426,133427,133430],{},[56,133428,133429],{"align":26827},"margin-bottom",[56,133431,133432],{"align":26827},"下外边距",[1452,133434,133435],{"start":197},[1455,133436,133437],{},"外边距可以让块级盒子水平居中的两个条件：",[19,133439,133440],{},"①盒子必须指定了宽度（width）",[19,133442,133443],{},"②盒子左右的外边距都设置为 auto",[153,133445,133447],{"className":129610,"code":133446,"language":129612,"meta":158,"style":158},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[71,133448,133449,133454,133461,133477],{"__ignoreMap":158},[162,133450,133451],{"class":164,"line":165},[162,133452,133453],{"class":361},"\u002F* margin 复合写法（同上） *\u002F\n",[162,133455,133456,133459],{"class":164,"line":197},[162,133457,133458],{"class":5082},".box",[162,133460,1722],{"class":168},[162,133462,133463,133465,133467,133469,133471,133474],{"class":164,"line":228},[162,133464,73535],{"class":207},[162,133466,1730],{"class":168},[162,133468,312],{"class":207},[162,133470,54628],{"class":207},[162,133472,133473],{"class":168},";  ",[162,133475,133476],{"class":361},"\u002F* 块级盒子水平居中 *\u002F\n",[162,133478,133479],{"class":164,"line":252},[162,133480,1498],{"class":168},[1452,133482,133483],{"start":228},[1455,133484,133485],{},"外边距塌陷问题",[19,133487,133488],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[4602,133490],{"style":129466,"src":133491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,133493,133494],{},"解决方案：",[19,133496,133497],{},"①可以为父亲元素定义上边距",[153,133499,133500],{"className":129610,"code":133446,"language":129612,"meta":158,"style":158},[71,133501,133502,133506,133512,133526],{"__ignoreMap":158},[162,133503,133504],{"class":164,"line":165},[162,133505,133453],{"class":361},[162,133507,133508,133510],{"class":164,"line":197},[162,133509,133458],{"class":5082},[162,133511,1722],{"class":168},[162,133513,133514,133516,133518,133520,133522,133524],{"class":164,"line":228},[162,133515,73535],{"class":207},[162,133517,1730],{"class":168},[162,133519,312],{"class":207},[162,133521,54628],{"class":207},[162,133523,133473],{"class":168},[162,133525,133476],{"class":361},[162,133527,133528],{"class":164,"line":252},[162,133529,1498],{"class":168},[19,133531,133532],{},"②可以为父亲元素定义上内边距",[19,133534,133535],{},"③可以为父亲元素添加overflow:hidden",[4602,133537],{"style":129466,"src":133538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[153,133540,133541],{"className":129610,"code":133446,"language":129612,"meta":158,"style":158},[71,133542,133543,133547,133553,133567],{"__ignoreMap":158},[162,133544,133545],{"class":164,"line":165},[162,133546,133453],{"class":361},[162,133548,133549,133551],{"class":164,"line":197},[162,133550,133458],{"class":5082},[162,133552,1722],{"class":168},[162,133554,133555,133557,133559,133561,133563,133565],{"class":164,"line":228},[162,133556,73535],{"class":207},[162,133558,1730],{"class":168},[162,133560,312],{"class":207},[162,133562,54628],{"class":207},[162,133564,133473],{"class":168},[162,133566,133476],{"class":361},[162,133568,133569],{"class":164,"line":252},[162,133570,1498],{"class":168},[4602,133572],{"style":129466,"src":133573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,133575,133576],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,133578,133579],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[3284,133581,133583],{"id":133582},"_914-清除内外边距","9.1.4 清除内外边距",[19,133585,133586],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[153,133588,133589],{"className":129610,"code":133446,"language":129612,"meta":158,"style":158},[71,133590,133591,133595,133601,133615],{"__ignoreMap":158},[162,133592,133593],{"class":164,"line":165},[162,133594,133453],{"class":361},[162,133596,133597,133599],{"class":164,"line":197},[162,133598,133458],{"class":5082},[162,133600,1722],{"class":168},[162,133602,133603,133605,133607,133609,133611,133613],{"class":164,"line":228},[162,133604,73535],{"class":207},[162,133606,1730],{"class":168},[162,133608,312],{"class":207},[162,133610,54628],{"class":207},[162,133612,133473],{"class":168},[162,133614,133476],{"class":361},[162,133616,133617],{"class":164,"line":252},[162,133618,1498],{"class":168},[19,133620,133621],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[3284,133623,133625],{"id":133624},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[4279,133627,133628,133631,133634,133637,133640,133643],{},[1455,133629,133630],{},"文件→打开 ：可以打开我们要测量的图片",[1455,133632,133633],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[1455,133635,133636],{},"右击标尺，把里面的单位改为像素",[1455,133638,133639],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[1455,133641,133642],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[1455,133644,133645],{},"用选区拖动 可以测量大小",[4602,133647],{"style":129466,"src":133648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[4279,133650,133651,133654],{},[1455,133652,133653],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[1455,133655,133656],{},"吸管取色工具",[4602,133658],{"style":129466,"src":133659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[3284,133661,133663],{"id":133662},"_916-案例","9.1.6 案例",[1452,133665,133666],{},[1455,133667,133668],{},"小米商品",[4602,133670],{"style":129466,"src":133671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[153,133673,133674],{"className":129610,"code":133446,"language":129612,"meta":158,"style":158},[71,133675,133676,133680,133686,133700],{"__ignoreMap":158},[162,133677,133678],{"class":164,"line":165},[162,133679,133453],{"class":361},[162,133681,133682,133684],{"class":164,"line":197},[162,133683,133458],{"class":5082},[162,133685,1722],{"class":168},[162,133687,133688,133690,133692,133694,133696,133698],{"class":164,"line":228},[162,133689,73535],{"class":207},[162,133691,1730],{"class":168},[162,133693,312],{"class":207},[162,133695,54628],{"class":207},[162,133697,133473],{"class":168},[162,133699,133476],{"class":361},[162,133701,133702],{"class":164,"line":252},[162,133703,1498],{"class":168},[1452,133705,133706],{"start":197},[1455,133707,133708],{},"快报模块",[4602,133710],{"style":129466,"src":133711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[153,133713,133715],{"className":130357,"code":133714,"language":130359,"meta":158,"style":158},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[71,133716,133717,133722,133737,133742],{"__ignoreMap":158},[162,133718,133719],{"class":164,"line":165},[162,133720,133721],{"class":361},"\u003C!-- HTML 代码示例 -->\n",[162,133723,133724,133726,133728,133730,133732,133735],{"class":164,"line":197},[162,133725,4187],{"class":168},[162,133727,54683],{"class":54373},[162,133729,56556],{"class":5082},[162,133731,173],{"class":168},[162,133733,133734],{"class":179},"\"example\"",[162,133736,54380],{"class":168},[162,133738,133739],{"class":164,"line":228},[162,133740,133741],{"class":168},"  示例内容\n",[162,133743,133744,133746,133748],{"class":164,"line":252},[162,133745,54857],{"class":168},[162,133747,54683],{"class":54373},[162,133749,54380],{"class":168},[3284,133751,133753],{"id":133752},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[1452,133755,133756],{},[1455,133757,133758],{},"圆角边框",[19,133760,133761],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[4602,133763],{"style":129466,"src":133764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[153,133766,133768],{"className":129610,"code":133767,"language":129612,"meta":158,"style":158},"div {\n  border: 1px solid #ccc;\n}\n",[71,133769,133770,133776,133792],{"__ignoreMap":158},[162,133771,133772,133774],{"class":164,"line":165},[162,133773,54683],{"class":54373},[162,133775,1722],{"class":168},[162,133777,133778,133780,133782,133784,133786,133788,133790],{"class":164,"line":197},[162,133779,73961],{"class":207},[162,133781,1730],{"class":168},[162,133783,208],{"class":207},[162,133785,54564],{"class":172},[162,133787,54593],{"class":207},[162,133789,133002],{"class":207},[162,133791,4433],{"class":168},[162,133793,133794],{"class":164,"line":228},[162,133795,1498],{"class":168},[19,133797,133798],{},"解释:",[4279,133800,133801,133804,133807,133810,133813],{},[1455,133802,133803],{},"参数值可以为数值或百分比的形式",[1455,133805,133806],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[1455,133808,133809],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[1455,133811,133812],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[1455,133814,133815],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[1452,133817,133818],{"start":197},[1455,133819,133820],{},"盒子阴影",[153,133822,133824],{"className":129610,"code":133823,"language":129612,"meta":158,"style":158},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[71,133825,133826,133832,133869],{"__ignoreMap":158},[162,133827,133828,133830],{"class":164,"line":165},[162,133829,54683],{"class":54373},[162,133831,1722],{"class":168},[162,133833,133834,133837,133839,133841,133843,133845,133847,133849,133851,133853,133855,133857,133859,133861,133863,133865,133867],{"class":164,"line":197},[162,133835,133836],{"class":207},"  box-shadow",[162,133838,1730],{"class":168},[162,133840,312],{"class":207},[162,133842,2711],{"class":207},[162,133844,54564],{"class":172},[162,133846,5156],{"class":207},[162,133848,54564],{"class":172},[162,133850,81832],{"class":207},[162,133852,604],{"class":168},[162,133854,312],{"class":207},[162,133856,183],{"class":168},[162,133858,312],{"class":207},[162,133860,183],{"class":168},[162,133862,312],{"class":207},[162,133864,183],{"class":168},[162,133866,89275],{"class":207},[162,133868,5836],{"class":168},[162,133870,133871],{"class":164,"line":228},[162,133872,1498],{"class":168},[26,133874,133875,133883],{},[29,133876,133877],{},[32,133878,133879,133881],{},[35,133880,3456],{"align":26827},[35,133882,30579],{"align":26827},[51,133884,133885,133893,133901,133909,133917,133925],{},[32,133886,133887,133890],{},[56,133888,133889],{"align":26827},"h-shadow",[56,133891,133892],{"align":26827},"必需,水平阴影的位置,允许负值",[32,133894,133895,133898],{},[56,133896,133897],{"align":26827},"v-shadow",[56,133899,133900],{"align":26827},"必需,垂直阴影的位置,允许负值",[32,133902,133903,133906],{},[56,133904,133905],{"align":26827},"blur",[56,133907,133908],{"align":26827},"可选,模糊距离,就是影子的虚实",[32,133910,133911,133914],{},[56,133912,133913],{"align":26827},"spread",[56,133915,133916],{"align":26827},"可选,阴影尺寸",[32,133918,133919,133922],{},[56,133920,133921],{"align":26827},"color",[56,133923,133924],{"align":26827},"可选,阴影的颜色",[32,133926,133927,133930],{},[56,133928,133929],{"align":26827},"inset",[56,133931,133932],{"align":26827},"可选,将外部阴影(outset)改为内部阴影",[1452,133934,133935],{"start":228},[1455,133936,133937],{},"文字阴影",[153,133939,133941],{"className":129610,"code":133940,"language":129612,"meta":158,"style":158},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[71,133942,133943,133949,133988],{"__ignoreMap":158},[162,133944,133945,133947],{"class":164,"line":165},[162,133946,19],{"class":54373},[162,133948,1722],{"class":168},[162,133950,133951,133954,133956,133958,133960,133962,133964,133966,133968,133970,133972,133974,133976,133978,133980,133982,133984,133986],{"class":164,"line":197},[162,133952,133953],{"class":207},"  text-shadow",[162,133955,1730],{"class":168},[162,133957,208],{"class":207},[162,133959,54564],{"class":172},[162,133961,28210],{"class":207},[162,133963,54564],{"class":172},[162,133965,2711],{"class":207},[162,133967,54564],{"class":172},[162,133969,81832],{"class":207},[162,133971,604],{"class":168},[162,133973,312],{"class":207},[162,133975,183],{"class":168},[162,133977,312],{"class":207},[162,133979,183],{"class":168},[162,133981,312],{"class":207},[162,133983,183],{"class":168},[162,133985,103585],{"class":207},[162,133987,5836],{"class":168},[162,133989,133990],{"class":164,"line":228},[162,133991,1498],{"class":168},[26,133993,133994,134002],{},[29,133995,133996],{},[32,133997,133998,134000],{},[35,133999,3456],{"align":26827},[35,134001,30579],{"align":26827},[51,134003,134004,134010,134017,134024],{},[32,134005,134006,134008],{},[56,134007,133889],{"align":26827},[56,134009,133892],{"align":26827},[32,134011,134012,134014],{},[56,134013,133897],{"align":26827},[56,134015,134016],{"align":26827},"必需,垂直阴影位置,允许负值",[32,134018,134019,134021],{},[56,134020,133905],{"align":26827},[56,134022,134023],{"align":26827},"可选,模糊的距离",[32,134025,134026,134028],{},[56,134027,133921],{"align":26827},[56,134029,133924],{"align":26827},[14,134031,134033],{"id":134032},"_92-浮动","9.2 浮动",[3284,134035,134037],{"id":134036},"_921-浮动介绍","9.2.1 浮动介绍",[19,134039,134040],{},"在16.2中详细介绍",[3284,134042,134044],{"id":134043},"_922-清除浮动","9.2.2 清除浮动",[1452,134046,134047,134050],{},[1455,134048,134049],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[1455,134051,134052],{},"清除浮动的本质",[19,134054,134055],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,134057,1529],{},[4279,134059,134060,134063,134066],{},[1455,134061,134062],{},"如果父盒子本身有高度，则不需要清除浮动",[1455,134064,134065],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[1455,134067,134068],{},"父级有了高度，就不会影响下面的标准流了",[1452,134070,134071],{"start":228},[1455,134072,134073],{},"清除浮动样式",[153,134075,134077],{"className":129610,"code":134076,"language":129612,"meta":158,"style":158},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[71,134078,134079,134086,134097,134101,134108,134118],{"__ignoreMap":158},[162,134080,134081,134084],{"class":164,"line":165},[162,134082,134083],{"class":5082},".left",[162,134085,1722],{"class":168},[162,134087,134088,134091,134093,134095],{"class":164,"line":197},[162,134089,134090],{"class":207},"  float",[162,134092,1730],{"class":168},[162,134094,26827],{"class":207},[162,134096,4433],{"class":168},[162,134098,134099],{"class":164,"line":228},[162,134100,1498],{"class":168},[162,134102,134103,134106],{"class":164,"line":252},[162,134104,134105],{"class":5082},".right",[162,134107,1722],{"class":168},[162,134109,134110,134112,134114,134116],{"class":164,"line":328},[162,134111,134090],{"class":207},[162,134113,1730],{"class":168},[162,134115,75587],{"class":207},[162,134117,4433],{"class":168},[162,134119,134120],{"class":164,"line":466},[162,134121,1498],{"class":168},[26,134123,134124,134132],{},[29,134125,134126],{},[32,134127,134128,134130],{},[35,134129,130074],{"align":26827},[35,134131,30579],{"align":26827},[51,134133,134134,134141,134148],{},[32,134135,134136,134138],{},[56,134137,26827],{"align":26827},[56,134139,134140],{"align":26827},"不允许左侧有浮动元素（清除左侧浮动的影响）",[32,134142,134143,134145],{},[56,134144,75587],{"align":26827},[56,134146,134147],{"align":26827},"不允许右侧有浮动元素（清除右侧浮动的影响）",[32,134149,134150,134153],{},[56,134151,134152],{"align":26827},"both",[56,134154,134155],{"align":26827},"同时清除左右侧浮动的影响",[19,134157,134158],{},"法一",[19,134160,134161],{},"额外标签法也称为隔墙法",[19,134163,134164],{},"使用方式：",[19,134166,134167],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[153,134169,134170],{"className":129610,"code":134076,"language":129612,"meta":158,"style":158},[71,134171,134172,134178,134188,134192,134198,134208],{"__ignoreMap":158},[162,134173,134174,134176],{"class":164,"line":165},[162,134175,134083],{"class":5082},[162,134177,1722],{"class":168},[162,134179,134180,134182,134184,134186],{"class":164,"line":197},[162,134181,134090],{"class":207},[162,134183,1730],{"class":168},[162,134185,26827],{"class":207},[162,134187,4433],{"class":168},[162,134189,134190],{"class":164,"line":228},[162,134191,1498],{"class":168},[162,134193,134194,134196],{"class":164,"line":252},[162,134195,134105],{"class":5082},[162,134197,1722],{"class":168},[162,134199,134200,134202,134204,134206],{"class":164,"line":328},[162,134201,134090],{"class":207},[162,134203,1730],{"class":168},[162,134205,75587],{"class":207},[162,134207,4433],{"class":168},[162,134209,134210],{"class":164,"line":466},[162,134211,1498],{"class":168},[19,134213,134214],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,134216,134217],{},"优点： 通俗易懂，书写方便",[19,134219,134220],{},"缺点： 添加许多无意义的标签，结构化较差",[19,134222,134223],{},"注意： 要求这个新的空标签必须是块级元素。",[19,134225,134226],{},"法二",[19,134228,134229],{},"父级添加overflow属性",[153,134231,134232],{"className":129610,"code":134076,"language":129612,"meta":158,"style":158},[71,134233,134234,134240,134250,134254,134260,134270],{"__ignoreMap":158},[162,134235,134236,134238],{"class":164,"line":165},[162,134237,134083],{"class":5082},[162,134239,1722],{"class":168},[162,134241,134242,134244,134246,134248],{"class":164,"line":197},[162,134243,134090],{"class":207},[162,134245,1730],{"class":168},[162,134247,26827],{"class":207},[162,134249,4433],{"class":168},[162,134251,134252],{"class":164,"line":228},[162,134253,1498],{"class":168},[162,134255,134256,134258],{"class":164,"line":252},[162,134257,134105],{"class":5082},[162,134259,1722],{"class":168},[162,134261,134262,134264,134266,134268],{"class":164,"line":328},[162,134263,134090],{"class":207},[162,134265,1730],{"class":168},[162,134267,75587],{"class":207},[162,134269,4433],{"class":168},[162,134271,134272],{"class":164,"line":466},[162,134273,1498],{"class":168},[19,134275,134276],{},"overflow: hidden;",[19,134278,134279],{},"优点：代码简洁",[19,134281,134282],{},"缺点：无法显示溢出的部分",[19,134284,134285],{},"注意：是给父元素添加代码",[19,134287,134288],{},"法三",[19,134290,134291],{},"父级添加after伪元素",[19,134293,134294,134297],{},[134295,134296],"after",{}," 方式是额外标签法的升级版",[19,134299,134300],{},"使用的时候复制就可以",[153,134302,134303],{"className":129610,"code":134076,"language":129612,"meta":158,"style":158},[71,134304,134305,134311,134321,134325,134331,134341],{"__ignoreMap":158},[162,134306,134307,134309],{"class":164,"line":165},[162,134308,134083],{"class":5082},[162,134310,1722],{"class":168},[162,134312,134313,134315,134317,134319],{"class":164,"line":197},[162,134314,134090],{"class":207},[162,134316,1730],{"class":168},[162,134318,26827],{"class":207},[162,134320,4433],{"class":168},[162,134322,134323],{"class":164,"line":228},[162,134324,1498],{"class":168},[162,134326,134327,134329],{"class":164,"line":252},[162,134328,134105],{"class":5082},[162,134330,1722],{"class":168},[162,134332,134333,134335,134337,134339],{"class":164,"line":328},[162,134334,134090],{"class":207},[162,134336,1730],{"class":168},[162,134338,75587],{"class":207},[162,134340,4433],{"class":168},[162,134342,134343],{"class":164,"line":466},[162,134344,1498],{"class":168},[19,134346,134347],{},"优点：没有增加标签，结构更简单",[19,134349,134350],{},"缺点：照顾低版本浏览器",[19,134352,134353],{},"代表网站： 百度、淘宝网、网易等",[19,134355,134356],{},"法四",[19,134358,134359],{},"父级添加双伪元素",[153,134361,134362],{"className":129610,"code":134076,"language":129612,"meta":158,"style":158},[71,134363,134364,134370,134380,134384,134390,134400],{"__ignoreMap":158},[162,134365,134366,134368],{"class":164,"line":165},[162,134367,134083],{"class":5082},[162,134369,1722],{"class":168},[162,134371,134372,134374,134376,134378],{"class":164,"line":197},[162,134373,134090],{"class":207},[162,134375,1730],{"class":168},[162,134377,26827],{"class":207},[162,134379,4433],{"class":168},[162,134381,134382],{"class":164,"line":228},[162,134383,1498],{"class":168},[162,134385,134386,134388],{"class":164,"line":252},[162,134387,134105],{"class":5082},[162,134389,1722],{"class":168},[162,134391,134392,134394,134396,134398],{"class":164,"line":328},[162,134393,134090],{"class":207},[162,134395,1730],{"class":168},[162,134397,75587],{"class":207},[162,134399,4433],{"class":168},[162,134401,134402],{"class":164,"line":466},[162,134403,1498],{"class":168},[19,134405,134406],{},"优点：代码更简洁",[19,134408,134350],{},[19,134410,134411],{},"代表网站：小米、腾讯等",[14,134413,134415],{"id":134414},"_93-ps切图","9.3 PS切图",[3284,134417,134419],{"id":134418},"_931-常见图片格式","9.3.1 常见图片格式",[26,134421,134422,134432],{},[29,134423,134424],{},[32,134425,134426,134429],{},[35,134427,134428],{"align":26827},"jpg图像格式",[35,134430,134431],{"align":26827},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[51,134433,134434,134442,134450],{},[32,134435,134436,134439],{},[56,134437,134438],{"align":26827},"gif图像格式",[56,134440,134441],{"align":26827},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[32,134443,134444,134447],{},[56,134445,134446],{"align":26827},"png图像格式",[56,134448,134449],{"align":26827},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[32,134451,134452,134455],{},[56,134453,134454],{"align":26827},"PSD图像格式",[56,134456,134457],{"align":26827},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[3284,134459,134461],{"id":134460},"_932-图层切图","9.3.2 图层切图",[19,134463,134464],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,134466,134467],{},"按住shift选中两个图层->图层菜单->合并图层",[3284,134469,134471],{"id":134470},"_933-切片切图","9.3.3 切片切图",[4279,134473,134474,134477],{},[1455,134475,134476],{},"利用切片工具手动划出",[1455,134478,134479],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[3284,134481,134483],{"id":134482},"_934-切图步骤","9.3.4 切图步骤",[19,134485,134486],{},"用切片工具选中：",[4602,134488],{"style":129466,"src":134489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,134491,134492],{},"文件 -> 导出",[4602,134494],{"style":129466,"src":134495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[3219,134497,134498],{},"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":158,"searchDepth":197,"depth":197,"links":134500},[134501,134510,134514],{"id":132937,"depth":197,"text":132938,"children":134502},[134503,134504,134505,134506,134507,134508,134509],{"id":132962,"depth":228,"text":132963},{"id":133253,"depth":228,"text":133254},{"id":133382,"depth":228,"text":133383},{"id":133582,"depth":228,"text":133583},{"id":133624,"depth":228,"text":133625},{"id":133662,"depth":228,"text":133663},{"id":133752,"depth":228,"text":133753},{"id":134032,"depth":197,"text":134033,"children":134511},[134512,134513],{"id":134036,"depth":228,"text":134037},{"id":134043,"depth":228,"text":134044},{"id":134414,"depth":197,"text":134415,"children":134515},[134516,134517,134518,134519],{"id":134418,"depth":228,"text":134419},{"id":134460,"depth":228,"text":134461},{"id":134470,"depth":228,"text":134471},{"id":134482,"depth":228,"text":134483},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":132929,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":134526,"title":134527,"body":134528,"description":3241,"extension":3242,"meta":135169,"navigation":300,"path":135170,"seo":135171,"stem":135172,"__hash__":135173},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":134529,"toc":135157},[134530,134533,134537,134563,134597,134601,134605,134608,134650,134657,134667,134675,134677,134680,134683,134686,134693,134707,134711,134714,134743,134747,134750,134764,134768,134771,134799,134803,134806,134832,134836,134841,134874,134879,134907,134911,134928,134974,134979,135023,135040,135147,135155],[10,134531,134527],{"id":134532},"_10-css规范与学成在线案例",[14,134534,134536],{"id":134535},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[1452,134538,134539,134545,134551,134557],{},[1455,134540,134541,134544],{},[3453,134542,134543],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[1455,134546,134547,134550],{},[3453,134548,134549],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[1455,134552,134553,134556],{},[3453,134554,134555],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[1455,134558,134559,134562],{},[3453,134560,134561],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[153,134564,134565],{"className":129610,"code":132974,"language":129612,"meta":158,"style":158},[71,134566,134567,134571,134577,134593],{"__ignoreMap":158},[162,134568,134569],{"class":164,"line":165},[162,134570,132981],{"class":361},[162,134572,134573,134575],{"class":164,"line":197},[162,134574,54683],{"class":54373},[162,134576,1722],{"class":168},[162,134578,134579,134581,134583,134585,134587,134589,134591],{"class":164,"line":228},[162,134580,73961],{"class":207},[162,134582,1730],{"class":168},[162,134584,208],{"class":207},[162,134586,54564],{"class":172},[162,134588,54593],{"class":207},[162,134590,133002],{"class":207},[162,134592,4433],{"class":168},[162,134594,134595],{"class":164,"line":252},[162,134596,1498],{"class":168},[14,134598,134600],{"id":134599},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[3284,134602,134604],{"id":134603},"_1021-header头部制作","10.2.1 header头部制作",[4602,134606],{"style":129466,"src":134607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[4279,134609,134610,134617,134624,134630,134637,134644],{},[1455,134611,134612,134613,134616],{},"1号是版心盒子 ",[3453,134614,134615],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[1455,134618,134619,134620,134623],{},"版心盒子 里面包含 2号盒子 ",[3453,134621,134622],{},"logo"," 图标",[1455,134625,134626,134627,134629],{},"版心盒子 里面包含 3号盒子 ",[3453,134628,56783],{}," 导航栏",[1455,134631,134632,134633,134636],{},"版心盒子 里面包含 4号盒子 ",[3453,134634,134635],{},"search"," 搜索框",[1455,134638,134639,134640,134643],{},"版心盒子 里面包含 5号盒子 ",[3453,134641,134642],{},"user"," 个人信息",[1455,134645,134646,134647],{},"注意，要求里面的 ",[3453,134648,134649],{},"4个子盒子 必须都浮动",[1452,134651,134652],{},[1455,134653,134654],{},[3453,134655,134656],{},"导航栏注意点:",[19,134658,134659,134660,134663,134664],{},"实际开发中， ",[3453,134661,134662],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[3453,134665,134666],{},"用 li 包含链接(li+a)的做法",[4279,134668,134669,134672],{},[1455,134670,134671],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[1455,134673,134674],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,134676,1529],{},[19,134678,134679],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,134681,134682],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,134684,134685],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[1452,134687,134688],{"start":197},[1455,134689,134690],{},[3453,134691,134692],{},"4号盒子search的细节：",[4279,134694,134695,134698,134701],{},[1455,134696,134697],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[1455,134699,134700],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[1455,134702,134703,134706],{},[71,134704,134705],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[3284,134708,134710],{"id":134709},"_1022-banner制作","10.2.2 banner制作",[4602,134712],{"style":129466,"src":134713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[4279,134715,134716,134723,134729,134736],{},[1455,134717,134718,134719,134722],{},"1号盒子是通栏的大盒子 ",[3453,134720,134721],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[1455,134724,134725,134726,134728],{},"2号盒子是版心 ",[3453,134727,4077],{}," ， 要水平居中对齐",[1455,134730,134731,134732,134735],{},"3号盒子版心内，左对齐 ",[3453,134733,134734],{},"subnav"," 侧导航栏",[1455,134737,134738,134739,134742],{},"4号盒子版心内，右对齐 ",[3453,134740,134741],{},"course"," 课程",[3284,134744,134746],{"id":134745},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[4602,134748],{"style":129466,"src":134749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[4279,134751,134752,134755,134758,134761],{},[1455,134753,134754],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[1455,134756,134757],{},"1号盒子是标题 H3 左侧浮动",[1455,134759,134760],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[1455,134762,134763],{},"3号盒子 右浮动 mod 修改",[3284,134765,134767],{"id":134766},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[4602,134769],{"style":129466,"src":134770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[4279,134772,134773,134779,134786,134793,134796],{},[1455,134774,134775,134776,134778],{},"1号盒子为最大的盒子 ",[3453,134777,56784],{}," 版心水平居中对齐",[1455,134780,134781,134782,134785],{},"2号盒子为上面部分 ",[3453,134783,134784],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[1455,134787,134788,134789,134792],{},"3号盒子为底下部分 ",[3453,134790,134791],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[1455,134794,134795],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[1455,134797,134798],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[3284,134800,134802],{"id":134801},"_1025-底部模块制作","10.2.5 底部模块制作",[4602,134804],{"style":129466,"src":134805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[4279,134807,134808,134815,134818,134825],{},[1455,134809,134810,134811,134814],{},"1号盒子通栏大盒子 底部 ",[3453,134812,134813],{},"footer"," 给高度 底色是白色",[1455,134816,134817],{},"2号盒子版心水平居中",[1455,134819,134820,134821,134824],{},"3号盒子版权 ",[3453,134822,134823],{},"copyright"," 左对齐",[1455,134826,134827,134828,134831],{},"4号盒子 链接组 ",[3453,134829,134830],{},"links"," 右对齐",[3284,134833,134835],{"id":134834},"_1026-代码模块","10.2.6 代码模块",[1452,134837,134838],{},[1455,134839,134840],{},"html部分",[153,134842,134844],{"className":130357,"code":134843,"language":130359,"meta":158,"style":158},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[71,134845,134846],{"__ignoreMap":158},[162,134847,134848,134850,134852,134854,134856,134859,134862,134864,134867,134870,134872],{"class":164,"line":165},[162,134849,4187],{"class":168},[162,134851,3538],{"class":54373},[162,134853,64125],{"class":5082},[162,134855,173],{"class":168},[162,134857,134858],{"class":179},"\"https:\u002F\u002Fexample.com\"",[162,134860,134861],{"class":5082}," target",[162,134863,173],{"class":168},[162,134865,134866],{"class":179},"\"_blank\"",[162,134868,134869],{"class":168},">链接文字\u003C\u002F",[162,134871,3538],{"class":54373},[162,134873,54380],{"class":168},[1452,134875,134876],{"start":197},[1455,134877,134878],{},"css部分",[153,134880,134881],{"className":130357,"code":134843,"language":130359,"meta":158,"style":158},[71,134882,134883],{"__ignoreMap":158},[162,134884,134885,134887,134889,134891,134893,134895,134897,134899,134901,134903,134905],{"class":164,"line":165},[162,134886,4187],{"class":168},[162,134888,3538],{"class":54373},[162,134890,64125],{"class":5082},[162,134892,173],{"class":168},[162,134894,134858],{"class":179},[162,134896,134861],{"class":5082},[162,134898,173],{"class":168},[162,134900,134866],{"class":179},[162,134902,134869],{"class":168},[162,134904,3538],{"class":54373},[162,134906,54380],{"class":168},[3284,134908,134910],{"id":134909},"_1027-收获","10.2.7 收获",[1452,134912,134913,134916,134919,134922,134925],{},[1455,134914,134915],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[1455,134917,134918],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[1455,134920,134921],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[1455,134923,134924],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[1455,134926,134927],{},"遗忘代码",[153,134929,134931],{"className":129610,"code":134930,"language":129612,"meta":158,"style":158},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[71,134932,134933,134955,134960,134970],{"__ignoreMap":158},[162,134934,134935,134937,134939,134941,134943,134945,134947,134949,134951,134953],{"class":164,"line":165},[162,134936,54683],{"class":54373},[162,134938,183],{"class":168},[162,134940,19],{"class":54373},[162,134942,183],{"class":168},[162,134944,10],{"class":54373},[162,134946,183],{"class":168},[162,134948,4279],{"class":54373},[162,134950,183],{"class":168},[162,134952,1455],{"class":54373},[162,134954,1722],{"class":168},[162,134956,134957],{"class":164,"line":197},[162,134958,134959],{"class":361},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[162,134961,134962,134964,134966,134968],{"class":164,"line":228},[162,134963,131226],{"class":207},[162,134965,1730],{"class":168},[162,134967,63937],{"class":207},[162,134969,4433],{"class":168},[162,134971,134972],{"class":164,"line":252},[162,134973,1498],{"class":168},[1452,134975,134976],{"start":466},[1455,134977,134978],{},"html引css的程序",[153,134980,134981],{"className":129610,"code":134930,"language":129612,"meta":158,"style":158},[71,134982,134983,135005,135009,135019],{"__ignoreMap":158},[162,134984,134985,134987,134989,134991,134993,134995,134997,134999,135001,135003],{"class":164,"line":165},[162,134986,54683],{"class":54373},[162,134988,183],{"class":168},[162,134990,19],{"class":54373},[162,134992,183],{"class":168},[162,134994,10],{"class":54373},[162,134996,183],{"class":168},[162,134998,4279],{"class":54373},[162,135000,183],{"class":168},[162,135002,1455],{"class":54373},[162,135004,1722],{"class":168},[162,135006,135007],{"class":164,"line":197},[162,135008,134959],{"class":361},[162,135010,135011,135013,135015,135017],{"class":164,"line":228},[162,135012,131226],{"class":207},[162,135014,1730],{"class":168},[162,135016,63937],{"class":207},[162,135018,4433],{"class":168},[162,135020,135021],{"class":164,"line":252},[162,135022,1498],{"class":168},[1452,135024,135025,135028,135031,135034,135037],{"start":471},[1455,135026,135027],{},"浮动的盒子不会有外边距合并问题",[1455,135029,135030],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[1455,135032,135033],{},"ctrl+g快速定位行；shift+alt多个光标",[1455,135035,135036],{},"学习上方各个模块的选择器起名方法，以后就这样用",[1455,135038,135039],{},"在写选择器时尽量写全一些，例如",[153,135041,135043],{"className":129610,"code":135042,"language":129612,"meta":158,"style":158},"\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",[71,135044,135045,135050,135066,135071,135086,135091,135106,135111,135126,135131],{"__ignoreMap":158},[162,135046,135047],{"class":164,"line":165},[162,135048,135049],{"class":361},"\u002F* 静态定位（默认） *\u002F\n",[162,135051,135052,135055,135057,135059,135061,135064],{"class":164,"line":197},[162,135053,135054],{"class":5082},".static",[162,135056,82872],{"class":168},[162,135058,131970],{"class":207},[162,135060,1730],{"class":168},[162,135062,135063],{"class":207},"static",[162,135065,132540],{"class":168},[162,135067,135068],{"class":164,"line":228},[162,135069,135070],{"class":361},"\u002F* 相对定位 *\u002F\n",[162,135072,135073,135076,135078,135080,135082,135084],{"class":164,"line":252},[162,135074,135075],{"class":5082},".relative",[162,135077,82872],{"class":168},[162,135079,131970],{"class":207},[162,135081,1730],{"class":168},[162,135083,57834],{"class":207},[162,135085,132540],{"class":168},[162,135087,135088],{"class":164,"line":328},[162,135089,135090],{"class":361},"\u002F* 绝对定位 *\u002F\n",[162,135092,135093,135096,135098,135100,135102,135104],{"class":164,"line":466},[162,135094,135095],{"class":5082},".absolute",[162,135097,82872],{"class":168},[162,135099,131970],{"class":207},[162,135101,1730],{"class":168},[162,135103,57901],{"class":207},[162,135105,132540],{"class":168},[162,135107,135108],{"class":164,"line":471},[162,135109,135110],{"class":361},"\u002F* 固定定位 *\u002F\n",[162,135112,135113,135116,135118,135120,135122,135124],{"class":164,"line":687},[162,135114,135115],{"class":5082},".fixed",[162,135117,82872],{"class":168},[162,135119,131970],{"class":207},[162,135121,1730],{"class":168},[162,135123,89298],{"class":207},[162,135125,132540],{"class":168},[162,135127,135128],{"class":164,"line":692},[162,135129,135130],{"class":361},"\u002F* 粘性定位 *\u002F\n",[162,135132,135133,135136,135138,135140,135142,135145],{"class":164,"line":698},[162,135134,135135],{"class":5082},".sticky",[162,135137,82872],{"class":168},[162,135139,131970],{"class":207},[162,135141,1730],{"class":168},[162,135143,135144],{"class":207},"sticky",[162,135146,132540],{"class":168},[1452,135148,135149,135152],{"start":2960},[1455,135150,135151],{},"一定要用好注释",[1455,135153,135154],{},"浮动的盒子不会有外边距合并的问题",[3219,135156,134498],{},{"title":158,"searchDepth":197,"depth":197,"links":135158},[135159,135160],{"id":134535,"depth":197,"text":134536},{"id":134599,"depth":197,"text":134600,"children":135161},[135162,135163,135164,135165,135166,135167,135168],{"id":134603,"depth":228,"text":134604},{"id":134709,"depth":228,"text":134710},{"id":134745,"depth":228,"text":134746},{"id":134766,"depth":228,"text":134767},{"id":134801,"depth":228,"text":134802},{"id":134834,"depth":228,"text":134835},{"id":134909,"depth":228,"text":134910},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":134527,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":135175,"title":135176,"body":135177,"description":3241,"extension":3242,"meta":136663,"navigation":300,"path":136664,"seo":136665,"stem":136666,"__hash__":136667},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":135178,"toc":136655},[135179,135182,135186,135190,135201,135205,135222,135266,135299,135302,135319,135322,135325,135369,135373,135377,135380,135383,135387,135390,135401,135464,135505,135508,135523,135577,135585,135588,135599,135653,135679,135682,135695,135749,135781,135835,135858,135912,135915,135918,135925,135979,136000,136054,136057,136060,136145,136153,136210,136233,136237,136240,136258,136262,136281,136335,136373,136377,136380,136383,136405,136409,136417,136420,136425,136436,136439,136443,136457,136501,136504,136508,136511,136516,136542,136547,136624,136627,136631,136634,136637,136640,136643,136646,136649,136652],[10,135180,135176],{"id":135181},"_11-传统布局与定位体系",[14,135183,135185],{"id":135184},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[3284,135187,135189],{"id":135188},"_1111-普通流标准流","11.1.1 普通流（标准流）",[4279,135191,135192,135195,135198],{},[1455,135193,135194],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[1455,135196,135197],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[1455,135199,135200],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[3284,135202,135204],{"id":135203},"_1112-浮动","11.1.2 浮动",[4279,135206,135207,135210,135213,135216,135219],{},[1455,135208,135209],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[1455,135211,135212],{},"浮动可以改变元素标签默认的排列方式",[1455,135214,135215],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[1455,135217,135218],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[1455,135220,135221],{},"在使用行内块转换时盒子之间是有空隙的",[153,135223,135224],{"className":129610,"code":134076,"language":129612,"meta":158,"style":158},[71,135225,135226,135232,135242,135246,135252,135262],{"__ignoreMap":158},[162,135227,135228,135230],{"class":164,"line":165},[162,135229,134083],{"class":5082},[162,135231,1722],{"class":168},[162,135233,135234,135236,135238,135240],{"class":164,"line":197},[162,135235,134090],{"class":207},[162,135237,1730],{"class":168},[162,135239,26827],{"class":207},[162,135241,4433],{"class":168},[162,135243,135244],{"class":164,"line":228},[162,135245,1498],{"class":168},[162,135247,135248,135250],{"class":164,"line":252},[162,135249,134105],{"class":5082},[162,135251,1722],{"class":168},[162,135253,135254,135256,135258,135260],{"class":164,"line":328},[162,135255,134090],{"class":207},[162,135257,1730],{"class":168},[162,135259,75587],{"class":207},[162,135261,4433],{"class":168},[162,135263,135264],{"class":164,"line":466},[162,135265,1498],{"class":168},[26,135267,135268,135276],{},[29,135269,135270],{},[32,135271,135272,135274],{},[35,135273,130074],{"align":26827},[35,135275,30579],{"align":26827},[51,135277,135278,135285,135292],{},[32,135279,135280,135282],{},[56,135281,57807],{"align":26827},[56,135283,135284],{"align":26827},"元素不浮动（默认值）",[32,135286,135287,135289],{},[56,135288,26827],{"align":26827},[56,135290,135291],{"align":26827},"元素向左浮动",[32,135293,135294,135296],{},[56,135295,75587],{"align":26827},[56,135297,135298],{"align":26827},"元素向右浮动",[19,135300,135301],{},"浮动重点：",[4279,135303,135304,135307,135310,135313,135316],{},[1455,135305,135306],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[1455,135308,135309],{},"浮动的元素会一行内显示并且元素顶部对齐",[1455,135311,135312],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[1455,135314,135315],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[1455,135317,135318],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,135320,135321],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,135323,135324],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[153,135326,135327],{"className":129610,"code":134076,"language":129612,"meta":158,"style":158},[71,135328,135329,135335,135345,135349,135355,135365],{"__ignoreMap":158},[162,135330,135331,135333],{"class":164,"line":165},[162,135332,134083],{"class":5082},[162,135334,1722],{"class":168},[162,135336,135337,135339,135341,135343],{"class":164,"line":197},[162,135338,134090],{"class":207},[162,135340,1730],{"class":168},[162,135342,26827],{"class":207},[162,135344,4433],{"class":168},[162,135346,135347],{"class":164,"line":228},[162,135348,1498],{"class":168},[162,135350,135351,135353],{"class":164,"line":252},[162,135352,134105],{"class":5082},[162,135354,1722],{"class":168},[162,135356,135357,135359,135361,135363],{"class":164,"line":328},[162,135358,134090],{"class":207},[162,135360,1730],{"class":168},[162,135362,75587],{"class":207},[162,135364,4433],{"class":168},[162,135366,135367],{"class":164,"line":466},[162,135368,1498],{"class":168},[3284,135370,135372],{"id":135371},"_1113-定位","11.1.3 定位",[25089,135374,135376],{"id":135375},"_11131-使用场景","11.1.3.1 使用场景",[19,135378,135379],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,135381,135382],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[25089,135384,135386],{"id":135385},"_11132-定位组成","11.1.3.2 定位组成",[19,135388,135389],{},"定位 = 定位模式 + 边偏移",[1452,135391,135392],{},[1455,135393,135394,135397,135398],{},[3453,135395,135396],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[3453,135399,135400],{},"定位模式",[153,135402,135404],{"className":129610,"code":135403,"language":129612,"meta":158,"style":158},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[71,135405,135406,135412,135426,135443,135460],{"__ignoreMap":158},[162,135407,135408,135410],{"class":164,"line":165},[162,135409,133458],{"class":5082},[162,135411,1722],{"class":168},[162,135413,135414,135417,135419,135421,135423],{"class":164,"line":197},[162,135415,135416],{"class":207},"  position",[162,135418,1730],{"class":168},[162,135420,57834],{"class":207},[162,135422,133473],{"class":168},[162,135424,135425],{"class":361},"\u002F* 定位模式 *\u002F\n",[162,135427,135428,135431,135433,135435,135437,135440],{"class":164,"line":228},[162,135429,135430],{"class":207},"  top",[162,135432,1730],{"class":168},[162,135434,1006],{"class":207},[162,135436,54564],{"class":172},[162,135438,135439],{"class":168},";           ",[162,135441,135442],{"class":361},"\u002F* 边偏移：上 *\u002F\n",[162,135444,135445,135448,135450,135452,135454,135457],{"class":164,"line":252},[162,135446,135447],{"class":207},"  left",[162,135449,1730],{"class":168},[162,135451,1011],{"class":207},[162,135453,54564],{"class":172},[162,135455,135456],{"class":168},";          ",[162,135458,135459],{"class":361},"\u002F* 边偏移：左 *\u002F\n",[162,135461,135462],{"class":164,"line":328},[162,135463,1498],{"class":168},[26,135465,135466,135475],{},[29,135467,135468],{},[32,135469,135470,135472],{},[35,135471,3456],{"align":26827},[35,135473,135474],{"align":26827},"语义",[51,135476,135477,135484,135491,135498],{},[32,135478,135479,135481],{},[56,135480,135063],{"align":26827},[56,135482,135483],{"align":26827},"静态定位",[32,135485,135486,135488],{},[56,135487,57834],{"align":26827},[56,135489,135490],{"align":26827},"相对定位",[32,135492,135493,135495],{},[56,135494,57901],{"align":26827},[56,135496,135497],{"align":26827},"绝对定位",[32,135499,135500,135502],{},[56,135501,89298],{"align":26827},[56,135503,135504],{"align":26827},"固定定位",[19,135506,135507],{},"（1）静态定位：",[4279,135509,135510,135521],{},[1455,135511,135512,135513,135516,135517,135520],{},"静态定位是元素的 ",[3453,135514,135515],{},"默认定位方式"," ， ",[3453,135518,135519],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[1455,135522,8289],{},[153,135524,135525],{"className":129610,"code":135403,"language":129612,"meta":158,"style":158},[71,135526,135527,135533,135545,135559,135573],{"__ignoreMap":158},[162,135528,135529,135531],{"class":164,"line":165},[162,135530,133458],{"class":5082},[162,135532,1722],{"class":168},[162,135534,135535,135537,135539,135541,135543],{"class":164,"line":197},[162,135536,135416],{"class":207},[162,135538,1730],{"class":168},[162,135540,57834],{"class":207},[162,135542,133473],{"class":168},[162,135544,135425],{"class":361},[162,135546,135547,135549,135551,135553,135555,135557],{"class":164,"line":228},[162,135548,135430],{"class":207},[162,135550,1730],{"class":168},[162,135552,1006],{"class":207},[162,135554,54564],{"class":172},[162,135556,135439],{"class":168},[162,135558,135442],{"class":361},[162,135560,135561,135563,135565,135567,135569,135571],{"class":164,"line":252},[162,135562,135447],{"class":207},[162,135564,1730],{"class":168},[162,135566,1011],{"class":207},[162,135568,54564],{"class":172},[162,135570,135456],{"class":168},[162,135572,135459],{"class":361},[162,135574,135575],{"class":164,"line":328},[162,135576,1498],{"class":168},[4279,135578,135579,135582],{},[1455,135580,135581],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[1455,135583,135584],{},"静态定位在布局时我们几乎不用的",[19,135586,135587],{},"（2）相对定位",[4279,135589,135590,135597],{},[1455,135591,135592,135593,135596],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[3453,135594,135595],{},"原来的位置"," 来说的（自恋型）",[1455,135598,8289],{},[153,135600,135601],{"className":129610,"code":135403,"language":129612,"meta":158,"style":158},[71,135602,135603,135609,135621,135635,135649],{"__ignoreMap":158},[162,135604,135605,135607],{"class":164,"line":165},[162,135606,133458],{"class":5082},[162,135608,1722],{"class":168},[162,135610,135611,135613,135615,135617,135619],{"class":164,"line":197},[162,135612,135416],{"class":207},[162,135614,1730],{"class":168},[162,135616,57834],{"class":207},[162,135618,133473],{"class":168},[162,135620,135425],{"class":361},[162,135622,135623,135625,135627,135629,135631,135633],{"class":164,"line":228},[162,135624,135430],{"class":207},[162,135626,1730],{"class":168},[162,135628,1006],{"class":207},[162,135630,54564],{"class":172},[162,135632,135439],{"class":168},[162,135634,135442],{"class":361},[162,135636,135637,135639,135641,135643,135645,135647],{"class":164,"line":252},[162,135638,135447],{"class":207},[162,135640,1730],{"class":168},[162,135642,1011],{"class":207},[162,135644,54564],{"class":172},[162,135646,135456],{"class":168},[162,135648,135459],{"class":361},[162,135650,135651],{"class":164,"line":328},[162,135652,1498],{"class":168},[4279,135654,135655],{},[1455,135656,135657,135658,135660,135661,135663,135664,135667,135668,135671,135672,135674,135675,135678],{},"相对定位的特点：",[56786,135659],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[56786,135662],{},"  ② ",[3453,135665,135666],{},"原来"," 在标准流的 ",[3453,135669,135670],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[56786,135673],{},"  ③因此， ",[3453,135676,135677],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,135680,135681],{},"（3）绝对定位",[4279,135683,135684,135693],{},[1455,135685,135686,135688,135689,135692],{},[3453,135687,135497],{}," 是元素在移动位置的时候，是相对于它 ",[3453,135690,135691],{},"祖先元素"," 来说的（拼爹型）",[1455,135694,8289],{},[153,135696,135697],{"className":129610,"code":135403,"language":129612,"meta":158,"style":158},[71,135698,135699,135705,135717,135731,135745],{"__ignoreMap":158},[162,135700,135701,135703],{"class":164,"line":165},[162,135702,133458],{"class":5082},[162,135704,1722],{"class":168},[162,135706,135707,135709,135711,135713,135715],{"class":164,"line":197},[162,135708,135416],{"class":207},[162,135710,1730],{"class":168},[162,135712,57834],{"class":207},[162,135714,133473],{"class":168},[162,135716,135425],{"class":361},[162,135718,135719,135721,135723,135725,135727,135729],{"class":164,"line":228},[162,135720,135430],{"class":207},[162,135722,1730],{"class":168},[162,135724,1006],{"class":207},[162,135726,54564],{"class":172},[162,135728,135439],{"class":168},[162,135730,135442],{"class":361},[162,135732,135733,135735,135737,135739,135741,135743],{"class":164,"line":252},[162,135734,135447],{"class":207},[162,135736,1730],{"class":168},[162,135738,1011],{"class":207},[162,135740,54564],{"class":172},[162,135742,135456],{"class":168},[162,135744,135459],{"class":361},[162,135746,135747],{"class":164,"line":328},[162,135748,1498],{"class":168},[4279,135750,135751,135766,135775,135778],{},[1455,135752,135753,135754,135756,135757,135759,135760,135762,135763,135765],{},"绝对定位的特点：",[56786,135755],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[56786,135758],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[56786,135761],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[56786,135764],{},"  (4)固定定位",[1455,135767,135768,135770,135771,135774],{},[3453,135769,135504],{}," 是元素 ",[3453,135772,135773],{},"固定于浏览器可视区的位置"," 。（认死理型）",[1455,135776,135777],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[1455,135779,135780],{},"语法:",[153,135782,135783],{"className":129610,"code":135403,"language":129612,"meta":158,"style":158},[71,135784,135785,135791,135803,135817,135831],{"__ignoreMap":158},[162,135786,135787,135789],{"class":164,"line":165},[162,135788,133458],{"class":5082},[162,135790,1722],{"class":168},[162,135792,135793,135795,135797,135799,135801],{"class":164,"line":197},[162,135794,135416],{"class":207},[162,135796,1730],{"class":168},[162,135798,57834],{"class":207},[162,135800,133473],{"class":168},[162,135802,135425],{"class":361},[162,135804,135805,135807,135809,135811,135813,135815],{"class":164,"line":228},[162,135806,135430],{"class":207},[162,135808,1730],{"class":168},[162,135810,1006],{"class":207},[162,135812,54564],{"class":172},[162,135814,135439],{"class":168},[162,135816,135442],{"class":361},[162,135818,135819,135821,135823,135825,135827,135829],{"class":164,"line":252},[162,135820,135447],{"class":207},[162,135822,1730],{"class":168},[162,135824,1011],{"class":207},[162,135826,54564],{"class":172},[162,135828,135456],{"class":168},[162,135830,135459],{"class":361},[162,135832,135833],{"class":164,"line":328},[162,135834,1498],{"class":168},[4279,135836,135837,135846],{},[1455,135838,135839,135840,135842,135843,135845],{},"特点:",[56786,135841],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[56786,135844],{},"  ②固定定位不再占有原先的位置,完全脱标",[1455,135847,135848,135849,135851,135852,135854,135855,135857],{},"固定在版心位置的方法:",[56786,135850],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[56786,135853],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[56786,135856],{},"  实例：",[153,135859,135860],{"className":129610,"code":135403,"language":129612,"meta":158,"style":158},[71,135861,135862,135868,135880,135894,135908],{"__ignoreMap":158},[162,135863,135864,135866],{"class":164,"line":165},[162,135865,133458],{"class":5082},[162,135867,1722],{"class":168},[162,135869,135870,135872,135874,135876,135878],{"class":164,"line":197},[162,135871,135416],{"class":207},[162,135873,1730],{"class":168},[162,135875,57834],{"class":207},[162,135877,133473],{"class":168},[162,135879,135425],{"class":361},[162,135881,135882,135884,135886,135888,135890,135892],{"class":164,"line":228},[162,135883,135430],{"class":207},[162,135885,1730],{"class":168},[162,135887,1006],{"class":207},[162,135889,54564],{"class":172},[162,135891,135439],{"class":168},[162,135893,135442],{"class":361},[162,135895,135896,135898,135900,135902,135904,135906],{"class":164,"line":252},[162,135897,135447],{"class":207},[162,135899,1730],{"class":168},[162,135901,1011],{"class":207},[162,135903,54564],{"class":172},[162,135905,135456],{"class":168},[162,135907,135459],{"class":361},[162,135909,135910],{"class":164,"line":328},[162,135911,1498],{"class":168},[4602,135913],{"style":129466,"src":135914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,135916,135917],{},"(5)粘性定位",[4279,135919,135920,135923],{},[1455,135921,135922],{},"粘性定位可以被认为是相对定位和固定定位的混合",[1455,135924,8289],{},[153,135926,135927],{"className":129610,"code":135403,"language":129612,"meta":158,"style":158},[71,135928,135929,135935,135947,135961,135975],{"__ignoreMap":158},[162,135930,135931,135933],{"class":164,"line":165},[162,135932,133458],{"class":5082},[162,135934,1722],{"class":168},[162,135936,135937,135939,135941,135943,135945],{"class":164,"line":197},[162,135938,135416],{"class":207},[162,135940,1730],{"class":168},[162,135942,57834],{"class":207},[162,135944,133473],{"class":168},[162,135946,135425],{"class":361},[162,135948,135949,135951,135953,135955,135957,135959],{"class":164,"line":228},[162,135950,135430],{"class":207},[162,135952,1730],{"class":168},[162,135954,1006],{"class":207},[162,135956,54564],{"class":172},[162,135958,135439],{"class":168},[162,135960,135442],{"class":361},[162,135962,135963,135965,135967,135969,135971,135973],{"class":164,"line":252},[162,135964,135447],{"class":207},[162,135966,1730],{"class":168},[162,135968,1011],{"class":207},[162,135970,54564],{"class":172},[162,135972,135456],{"class":168},[162,135974,135459],{"class":361},[162,135976,135977],{"class":164,"line":328},[162,135978,1498],{"class":168},[4279,135980,135981],{},[1455,135982,135983,135984,135986,135987,135989,135990,135992,135993,135996,135997,135999],{},"粘性定位的特点：",[56786,135985],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[56786,135988],{},"  ②粘性定位占有原先的位置（相对定位特点）",[56786,135991],{},"  ③必须添加 top 、left、right、bottom ",[3453,135994,135995],{},"其中一个"," 才有效",[56786,135998],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[153,136001,136002],{"className":129610,"code":135403,"language":129612,"meta":158,"style":158},[71,136003,136004,136010,136022,136036,136050],{"__ignoreMap":158},[162,136005,136006,136008],{"class":164,"line":165},[162,136007,133458],{"class":5082},[162,136009,1722],{"class":168},[162,136011,136012,136014,136016,136018,136020],{"class":164,"line":197},[162,136013,135416],{"class":207},[162,136015,1730],{"class":168},[162,136017,57834],{"class":207},[162,136019,133473],{"class":168},[162,136021,135425],{"class":361},[162,136023,136024,136026,136028,136030,136032,136034],{"class":164,"line":228},[162,136025,135430],{"class":207},[162,136027,1730],{"class":168},[162,136029,1006],{"class":207},[162,136031,54564],{"class":172},[162,136033,135439],{"class":168},[162,136035,135442],{"class":361},[162,136037,136038,136040,136042,136044,136046,136048],{"class":164,"line":252},[162,136039,135447],{"class":207},[162,136041,1730],{"class":168},[162,136043,1011],{"class":207},[162,136045,54564],{"class":172},[162,136047,135456],{"class":168},[162,136049,135459],{"class":361},[162,136051,136052],{"class":164,"line":328},[162,136053,1498],{"class":168},[4602,136055],{"style":129466,"src":136056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,136058,136059],{},"(6)总结",[26,136061,136062,136077],{},[29,136063,136064],{},[32,136065,136066,136068,136071,136074],{},[35,136067,135400],{"align":26827},[35,136069,136070],{"align":26827},"是否脱标",[35,136072,136073],{"align":26827},"移动位置",[35,136075,136076],{"align":26827},"是否常用",[51,136078,136079,136092,136106,136120,136133],{},[32,136080,136081,136084,136086,136089],{},[56,136082,136083],{"align":26827},"Static 静态定位",[56,136085,107739],{"align":26827},[56,136087,136088],{"align":26827},"不能使用边偏移",[56,136090,136091],{"align":26827},"很少",[32,136093,136094,136097,136100,136103],{},[56,136095,136096],{"align":26827},"Relative 相对定位",[56,136098,136099],{"align":26827},"否(占有位置)",[56,136101,136102],{"align":26827},"相对于自身位置移动",[56,136104,136105],{"align":26827},"基本单独使用",[32,136107,136108,136111,136114,136117],{},[56,136109,136110],{"align":26827},"Absolute 绝对定位",[56,136112,136113],{"align":26827},"是(不占有位置)",[56,136115,136116],{"align":26827},"带有定位的父级",[56,136118,136119],{"align":26827},"要和定位父级元素搭配使用",[32,136121,136122,136125,136127,136130],{},[56,136123,136124],{"align":26827},"Fixed 固定定位",[56,136126,136113],{"align":26827},[56,136128,136129],{"align":26827},"浏览器可视区",[56,136131,136132],{"align":26827},"单独使用,不需要父级",[32,136134,136135,136138,136140,136142],{},[56,136136,136137],{"align":26827},"Sticky 粘性定位",[56,136139,136099],{"align":26827},[56,136141,136129],{"align":26827},[56,136143,136144],{"align":26827},"当前阶段少",[1452,136146,136147],{"start":197},[1455,136148,136149,136152],{},[3453,136150,136151],{},"边偏移"," 则决定了该元素的最终位置",[26,136154,136155,136166],{},[29,136156,136157],{},[32,136158,136159,136162,136164],{},[35,136160,136161],{"align":26827},"边偏移属性",[35,136163,49],{"align":26827},[35,136165,30579],{"align":26827},[51,136167,136168,136179,136190,136200],{},[32,136169,136170,136173,136176],{},[56,136171,136172],{"align":26827},"top",[56,136174,136175],{"align":26827},"top: 80px;",[56,136177,136178],{"align":26827},"顶端偏移量，定义元素相对于父元素上边线的距离",[32,136180,136181,136184,136187],{},[56,136182,136183],{"align":26827},"bottom",[56,136185,136186],{"align":26827},"bottom: 80px ;",[56,136188,136189],{"align":26827},"底部偏移量，定义元素相对于其父元素下边线的距离",[32,136191,136192,136194,136197],{},[56,136193,26827],{"align":26827},[56,136195,136196],{"align":26827},"left: 80px ;",[56,136198,136199],{"align":26827},"左侧偏移量，定义元素相对于其父元素左边线的距离",[32,136201,136202,136204,136207],{},[56,136203,75587],{"align":26827},[56,136205,136206],{"align":26827},"right: 80px ;",[56,136208,136209],{"align":26827},"右侧偏移量，定义元素相对于其父元素右边线的距离",[4279,136211,136212],{},[1455,136213,1529,136214,136216,136217,136219,136220,136222,136223,136226,136227,136229,136230,136232],{},[56786,136215],{},"  ① ",[3453,136218,136151],{}," 需要和 ",[3453,136221,135400],{}," 联合使用， ",[3453,136224,136225],{},"单独使用无效"," ；",[56786,136228],{},"  ②top和bottom不要同时使用",[56786,136231],{},"  ③left和right不要同时使用",[25089,136234,136236],{"id":136235},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,136238,136239],{},"子级是绝对定位的话，父级要用相对定位",[4279,136241,136242,136245,136248,136251],{},[1455,136243,136244],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[1455,136246,136247],{},"父盒子需要加定位限制子盒子在父盒子内显示",[1455,136249,136250],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[1455,136252,136253,136254,136257],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[3453,136255,136256],{},"子绝父绝"," 也会遇到",[25089,136259,136261],{"id":136260},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[4279,136263,136264,136279],{},[1455,136265,136266,136267,136270,136271,136274,136275,136278],{},"在使用 ",[3453,136268,136269],{},"定位"," 布局时，可能会 ",[3453,136272,136273],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[3453,136276,136277],{},"z-index"," 来控制盒子的前后次序 (z轴)",[1455,136280,8289],{},[153,136282,136283],{"className":129610,"code":135403,"language":129612,"meta":158,"style":158},[71,136284,136285,136291,136303,136317,136331],{"__ignoreMap":158},[162,136286,136287,136289],{"class":164,"line":165},[162,136288,133458],{"class":5082},[162,136290,1722],{"class":168},[162,136292,136293,136295,136297,136299,136301],{"class":164,"line":197},[162,136294,135416],{"class":207},[162,136296,1730],{"class":168},[162,136298,57834],{"class":207},[162,136300,133473],{"class":168},[162,136302,135425],{"class":361},[162,136304,136305,136307,136309,136311,136313,136315],{"class":164,"line":228},[162,136306,135430],{"class":207},[162,136308,1730],{"class":168},[162,136310,1006],{"class":207},[162,136312,54564],{"class":172},[162,136314,135439],{"class":168},[162,136316,135442],{"class":361},[162,136318,136319,136321,136323,136325,136327,136329],{"class":164,"line":252},[162,136320,135447],{"class":207},[162,136322,1730],{"class":168},[162,136324,1011],{"class":207},[162,136326,54564],{"class":172},[162,136328,135456],{"class":168},[162,136330,135459],{"class":361},[162,136332,136333],{"class":164,"line":328},[162,136334,1498],{"class":168},[4279,136336,136337],{},[1455,136338,136339,136340,136216,136342,136344,136345,130773,136348,85604,136351,136353,136354,136356,136357,136360,136361,136226,136364,136366,136367,136370,136372],{},"z-index的特性",[56786,136341],{},[3453,136343,130074],{}," ： ",[3453,136346,136347],{},"正整数",[3453,136349,136350],{},"负整数",[3453,136352,312],{}," ，默认值是 0，数值越大，盒子越靠上；",[56786,136355],{},"  ②如果 ",[3453,136358,136359],{},"属性值相同"," ，则按照书写顺序， ",[3453,136362,136363],{},"后来居上",[56786,136365],{},"  ③数字后面 ",[3453,136368,136369],{},"不能加单位",[56786,136371],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[25089,136374,136376],{"id":136375},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,136378,136379],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,136381,136382],{},"方法:",[4279,136384,136385,136395],{},[1455,136386,136387,136388,136391,136392],{},"left: 50%; 让 ",[3453,136389,136390],{},"盒子的左侧"," 移动到 ",[3453,136393,136394],{},"父级元素的水平中心位置",[1455,136396,136397,136398,136401,136402],{},"margin-left: -100px; 让盒子 ",[3453,136399,136400],{},"向左"," 移动 ",[3453,136403,136404],{},"自身宽度的一半",[25089,136406,136408],{"id":136407},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[1452,136410,136411,136414],{},[1455,136412,136413],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[1455,136415,136416],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,136418,136419],{},"也就是说绝对定位和固定定位和浮动类似",[1452,136421,136422],{"start":228},[1455,136423,136424],{},"display 是显示模式， 可以改变显示模式有以下方式:",[4279,136426,136427,136430,136433],{},[1455,136428,136429],{},"可以用inline-block 转换为行内块",[1455,136431,136432],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[1455,136434,136435],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,136437,136438],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[25089,136440,136442],{"id":136441},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[1452,136444,136445,136448,136451,136454],{},[1455,136446,136447],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[1455,136449,136450],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[1455,136452,136453],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[1455,136455,136456],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[153,136458,136459],{"className":129610,"code":134076,"language":129612,"meta":158,"style":158},[71,136460,136461,136467,136477,136481,136487,136497],{"__ignoreMap":158},[162,136462,136463,136465],{"class":164,"line":165},[162,136464,134083],{"class":5082},[162,136466,1722],{"class":168},[162,136468,136469,136471,136473,136475],{"class":164,"line":197},[162,136470,134090],{"class":207},[162,136472,1730],{"class":168},[162,136474,26827],{"class":207},[162,136476,4433],{"class":168},[162,136478,136479],{"class":164,"line":228},[162,136480,1498],{"class":168},[162,136482,136483,136485],{"class":164,"line":252},[162,136484,134105],{"class":5082},[162,136486,1722],{"class":168},[162,136488,136489,136491,136493,136495],{"class":164,"line":328},[162,136490,134090],{"class":207},[162,136492,1730],{"class":168},[162,136494,75587],{"class":207},[162,136496,4433],{"class":168},[162,136498,136499],{"class":164,"line":466},[162,136500,1498],{"class":168},[4602,136502],{"style":129466,"src":136503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[25089,136505,136507],{"id":136506},"_11138-轮播图","11.1.3.8 轮播图",[4602,136509],{"style":129466,"src":136510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[1452,136512,136513],{},[1455,136514,136515],{},"制作顺序:",[4279,136517,136518,136521,136524,136533],{},[1455,136519,136520],{},"大盒子我们类名为： tb-promo 淘宝广告",[1455,136522,136523],{},"里面先放一张图片",[1455,136525,136526,136527,136529,136530,136532],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[56786,136528],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[56786,136531],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[1455,136534,136535,136536,136538,136539,136541],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[56786,136537],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[56786,136540],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[1452,136543,136544],{"start":197},[1455,136545,136546],{},"代码模块",[153,136548,136550],{"className":129610,"code":136549,"language":129612,"meta":158,"style":158},"\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",[71,136551,136552,136557,136564,136574,136584,136594,136598,136603,136610,136620],{"__ignoreMap":158},[162,136553,136554],{"class":164,"line":165},[162,136555,136556],{"class":361},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[162,136558,136559,136562],{"class":164,"line":197},[162,136560,136561],{"class":5082},".son",[162,136563,1722],{"class":168},[162,136565,136566,136568,136570,136572],{"class":164,"line":228},[162,136567,135416],{"class":207},[162,136569,1730],{"class":168},[162,136571,57901],{"class":207},[162,136573,4433],{"class":168},[162,136575,136576,136578,136580,136582],{"class":164,"line":252},[162,136577,135430],{"class":207},[162,136579,1730],{"class":168},[162,136581,312],{"class":207},[162,136583,4433],{"class":168},[162,136585,136586,136588,136590,136592],{"class":164,"line":328},[162,136587,135447],{"class":207},[162,136589,1730],{"class":168},[162,136591,312],{"class":207},[162,136593,4433],{"class":168},[162,136595,136596],{"class":164,"line":466},[162,136597,1498],{"class":168},[162,136599,136600],{"class":164,"line":471},[162,136601,136602],{"class":361},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[162,136604,136605,136608],{"class":164,"line":687},[162,136606,136607],{"class":5082},".father",[162,136609,1722],{"class":168},[162,136611,136612,136614,136616,136618],{"class":164,"line":692},[162,136613,135416],{"class":207},[162,136615,1730],{"class":168},[162,136617,57834],{"class":207},[162,136619,4433],{"class":168},[162,136621,136622],{"class":164,"line":698},[162,136623,1498],{"class":168},[19,136625,136626],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[3284,136628,136630],{"id":136629},"_1114-定位数值的移动","11.1.4 定位数值的移动",[4602,136632],{"style":129466,"src":136633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,136635,136636],{},"✨ 黄金口诀：",[19,136638,136639],{},"\"TOP正下负上，LEFT正右负左\"",[19,136641,136642],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,136644,136645],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,136647,136648],{},"✨ 简单记：",[19,136650,136651],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[3219,136653,136654],{},"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":158,"searchDepth":197,"depth":197,"links":136656},[136657],{"id":135184,"depth":197,"text":135185,"children":136658},[136659,136660,136661,136662],{"id":135188,"depth":228,"text":135189},{"id":135203,"depth":228,"text":135204},{"id":135371,"depth":228,"text":135372},{"id":136629,"depth":228,"text":136630},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":135176,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":136669,"title":136670,"body":136671,"description":3241,"extension":3242,"meta":138094,"navigation":300,"path":138095,"seo":138096,"stem":138097,"__hash__":138098},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":136672,"toc":138073},[136673,136676,136680,136688,136692,136697,136705,136717,136721,136726,136734,136745,136749,136754,136795,136803,136807,136810,136813,136816,136910,136913,137007,137010,137104,137107,137110,137145,137148,137151,137181,137184,137187,137190,137193,137196,137199,137202,137272,137275,137279,137283,137324,137328,137334,137337,137340,137344,137347,137350,137353,137434,137437,137440,137444,137448,137451,137454,137457,137460,137463,137469,137478,137482,137501,137505,137515,137518,137521,137524,137527,137530,137533,137536,137539,137548,137552,137561,137564,137569,137622,137627,137793,137796,137799,137804,137807,137810,137813,137816,137821,137969,137972,137975,137980,137983,137988,138022,138025,138028,138032,138035,138042,138045,138048,138051,138054,138057,138060,138063,138067,138070],[10,136674,136670],{"id":136675},"_12-显示隐藏与图形资源",[14,136677,136679],{"id":136678},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[4279,136681,136682,136685],{},[1455,136683,136684],{},"目的:让一个元素在页面中消失或者显示出来",[1455,136686,136687],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[3284,136689,136691],{"id":136690},"_1211-display-显示","12.1.1 display 显示",[1452,136693,136694],{},[1455,136695,136696],{},"display 设置或检索对象是否及如何显示",[4279,136698,136699,136702],{},[1455,136700,136701],{},"display: none;隐藏对象",[1455,136703,136704],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[1452,136706,136707,136714],{"start":197},[1455,136708,136709,136710,136713],{},"特点： display 隐藏元素后， ",[3453,136711,136712],{},"不再占"," 有原来的位置",[1455,136715,136716],{},"在js中使用非常的广泛",[3284,136718,136720],{"id":136719},"_1212-visibility可见性","12.1.2 visibility可见性",[1452,136722,136723],{},[1455,136724,136725],{},"visibility 属性用于指定一个元素应可见还是隐藏",[4279,136727,136728,136731],{},[1455,136729,136730],{},"visibility： visible；元素可见",[1455,136732,136733],{},"visibility：hidden；元素隐藏",[1452,136735,136736,136739,136742],{"start":197},[1455,136737,136738],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[1455,136740,136741],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[1455,136743,136744],{},"隐藏后继续占有原有位置",[3284,136746,136748],{"id":136747},"_1213-overflow溢出","12.1.3 overflow溢出",[4279,136750,136751],{},[1455,136752,136753],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[26,136755,136756,136764],{},[29,136757,136758],{},[32,136759,136760,136762],{},[35,136761,130074],{"align":26827},[35,136763,30579],{"align":26827},[51,136765,136766,136774,136781,136788],{},[32,136767,136768,136771],{},[56,136769,136770],{"align":26827},"visible",[56,136772,136773],{"align":26827},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[32,136775,136776,136778],{},[56,136777,64782],{"align":26827},[56,136779,136780],{"align":26827},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[32,136782,136783,136785],{},[56,136784,132030],{"align":26827},[56,136786,136787],{"align":26827},"不管超出内容否，总是显示滚动条",[32,136789,136790,136792],{},[56,136791,75728],{"align":26827},[56,136793,136794],{"align":26827},"超出自动显示滚动条，不超出不显示滚动条",[4279,136796,136797,136800],{},[1455,136798,136799],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[1455,136801,136802],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[3284,136804,136806],{"id":136805},"_1214-案例收获","12.1.4 案例收获",[4602,136808],{"style":129466,"src":136809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,136811,136812],{},"问题：没做出来动态效果，使用hover没实现",[19,136814,136815],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[153,136817,136818],{"className":129610,"code":135042,"language":129612,"meta":158,"style":158},[71,136819,136820,136824,136838,136842,136856,136860,136874,136878,136892,136896],{"__ignoreMap":158},[162,136821,136822],{"class":164,"line":165},[162,136823,135049],{"class":361},[162,136825,136826,136828,136830,136832,136834,136836],{"class":164,"line":197},[162,136827,135054],{"class":5082},[162,136829,82872],{"class":168},[162,136831,131970],{"class":207},[162,136833,1730],{"class":168},[162,136835,135063],{"class":207},[162,136837,132540],{"class":168},[162,136839,136840],{"class":164,"line":228},[162,136841,135070],{"class":361},[162,136843,136844,136846,136848,136850,136852,136854],{"class":164,"line":252},[162,136845,135075],{"class":5082},[162,136847,82872],{"class":168},[162,136849,131970],{"class":207},[162,136851,1730],{"class":168},[162,136853,57834],{"class":207},[162,136855,132540],{"class":168},[162,136857,136858],{"class":164,"line":328},[162,136859,135090],{"class":361},[162,136861,136862,136864,136866,136868,136870,136872],{"class":164,"line":466},[162,136863,135095],{"class":5082},[162,136865,82872],{"class":168},[162,136867,131970],{"class":207},[162,136869,1730],{"class":168},[162,136871,57901],{"class":207},[162,136873,132540],{"class":168},[162,136875,136876],{"class":164,"line":471},[162,136877,135110],{"class":361},[162,136879,136880,136882,136884,136886,136888,136890],{"class":164,"line":687},[162,136881,135115],{"class":5082},[162,136883,82872],{"class":168},[162,136885,131970],{"class":207},[162,136887,1730],{"class":168},[162,136889,89298],{"class":207},[162,136891,132540],{"class":168},[162,136893,136894],{"class":164,"line":692},[162,136895,135130],{"class":361},[162,136897,136898,136900,136902,136904,136906,136908],{"class":164,"line":698},[162,136899,135135],{"class":5082},[162,136901,82872],{"class":168},[162,136903,131970],{"class":207},[162,136905,1730],{"class":168},[162,136907,135144],{"class":207},[162,136909,132540],{"class":168},[19,136911,136912],{},"完整代码：",[153,136914,136915],{"className":129610,"code":135042,"language":129612,"meta":158,"style":158},[71,136916,136917,136921,136935,136939,136953,136957,136971,136975,136989,136993],{"__ignoreMap":158},[162,136918,136919],{"class":164,"line":165},[162,136920,135049],{"class":361},[162,136922,136923,136925,136927,136929,136931,136933],{"class":164,"line":197},[162,136924,135054],{"class":5082},[162,136926,82872],{"class":168},[162,136928,131970],{"class":207},[162,136930,1730],{"class":168},[162,136932,135063],{"class":207},[162,136934,132540],{"class":168},[162,136936,136937],{"class":164,"line":228},[162,136938,135070],{"class":361},[162,136940,136941,136943,136945,136947,136949,136951],{"class":164,"line":252},[162,136942,135075],{"class":5082},[162,136944,82872],{"class":168},[162,136946,131970],{"class":207},[162,136948,1730],{"class":168},[162,136950,57834],{"class":207},[162,136952,132540],{"class":168},[162,136954,136955],{"class":164,"line":328},[162,136956,135090],{"class":361},[162,136958,136959,136961,136963,136965,136967,136969],{"class":164,"line":466},[162,136960,135095],{"class":5082},[162,136962,82872],{"class":168},[162,136964,131970],{"class":207},[162,136966,1730],{"class":168},[162,136968,57901],{"class":207},[162,136970,132540],{"class":168},[162,136972,136973],{"class":164,"line":471},[162,136974,135110],{"class":361},[162,136976,136977,136979,136981,136983,136985,136987],{"class":164,"line":687},[162,136978,135115],{"class":5082},[162,136980,82872],{"class":168},[162,136982,131970],{"class":207},[162,136984,1730],{"class":168},[162,136986,89298],{"class":207},[162,136988,132540],{"class":168},[162,136990,136991],{"class":164,"line":692},[162,136992,135130],{"class":361},[162,136994,136995,136997,136999,137001,137003,137005],{"class":164,"line":698},[162,136996,135135],{"class":5082},[162,136998,82872],{"class":168},[162,137000,131970],{"class":207},[162,137002,1730],{"class":168},[162,137004,135144],{"class":207},[162,137006,132540],{"class":168},[19,137008,137009],{},"分布思路重点详解：",[153,137011,137012],{"className":129610,"code":135042,"language":129612,"meta":158,"style":158},[71,137013,137014,137018,137032,137036,137050,137054,137068,137072,137086,137090],{"__ignoreMap":158},[162,137015,137016],{"class":164,"line":165},[162,137017,135049],{"class":361},[162,137019,137020,137022,137024,137026,137028,137030],{"class":164,"line":197},[162,137021,135054],{"class":5082},[162,137023,82872],{"class":168},[162,137025,131970],{"class":207},[162,137027,1730],{"class":168},[162,137029,135063],{"class":207},[162,137031,132540],{"class":168},[162,137033,137034],{"class":164,"line":228},[162,137035,135070],{"class":361},[162,137037,137038,137040,137042,137044,137046,137048],{"class":164,"line":252},[162,137039,135075],{"class":5082},[162,137041,82872],{"class":168},[162,137043,131970],{"class":207},[162,137045,1730],{"class":168},[162,137047,57834],{"class":207},[162,137049,132540],{"class":168},[162,137051,137052],{"class":164,"line":328},[162,137053,135090],{"class":361},[162,137055,137056,137058,137060,137062,137064,137066],{"class":164,"line":466},[162,137057,135095],{"class":5082},[162,137059,82872],{"class":168},[162,137061,131970],{"class":207},[162,137063,1730],{"class":168},[162,137065,57901],{"class":207},[162,137067,132540],{"class":168},[162,137069,137070],{"class":164,"line":471},[162,137071,135110],{"class":361},[162,137073,137074,137076,137078,137080,137082,137084],{"class":164,"line":687},[162,137075,135115],{"class":5082},[162,137077,82872],{"class":168},[162,137079,131970],{"class":207},[162,137081,1730],{"class":168},[162,137083,89298],{"class":207},[162,137085,132540],{"class":168},[162,137087,137088],{"class":164,"line":692},[162,137089,135130],{"class":361},[162,137091,137092,137094,137096,137098,137100,137102],{"class":164,"line":698},[162,137093,135135],{"class":5082},[162,137095,82872],{"class":168},[162,137097,131970],{"class":207},[162,137099,1730],{"class":168},[162,137101,135144],{"class":207},[162,137103,132540],{"class":168},[4602,137105],{"style":129466,"src":137106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,137108,137109],{},"图片太大，盒子太小，此时需要修改图片的大小",[153,137111,137113],{"className":130357,"code":137112,"language":130359,"meta":158,"style":158},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[71,137114,137115],{"__ignoreMap":158},[162,137116,137117,137119,137121,137123,137125,137128,137130,137132,137135,137138,137140,137143],{"class":164,"line":165},[162,137118,4187],{"class":168},[162,137120,4602],{"class":54373},[162,137122,58309],{"class":5082},[162,137124,173],{"class":168},[162,137126,137127],{"class":179},"\"images\u002Fpic.jpg\"",[162,137129,58317],{"class":5082},[162,137131,173],{"class":168},[162,137133,137134],{"class":179},"\"描述文字\"",[162,137136,137137],{"class":5082}," title",[162,137139,173],{"class":168},[162,137141,137142],{"class":179},"\"悬停提示\"",[162,137144,54380],{"class":168},[4602,137146],{"style":129466,"src":137147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,137149,137150],{},"制造遮罩层",[153,137152,137153],{"className":130357,"code":137112,"language":130359,"meta":158,"style":158},[71,137154,137155],{"__ignoreMap":158},[162,137156,137157,137159,137161,137163,137165,137167,137169,137171,137173,137175,137177,137179],{"class":164,"line":165},[162,137158,4187],{"class":168},[162,137160,4602],{"class":54373},[162,137162,58309],{"class":5082},[162,137164,173],{"class":168},[162,137166,137127],{"class":179},[162,137168,58317],{"class":5082},[162,137170,173],{"class":168},[162,137172,137134],{"class":179},[162,137174,137137],{"class":5082},[162,137176,173],{"class":168},[162,137178,137142],{"class":179},[162,137180,54380],{"class":168},[19,137182,137183],{},"此时是这样的为标准流",[4602,137185],{"style":129466,"src":137186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,137188,137189],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,137191,137192],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,137194,137195],{},"让他在中间，用center(background-position)",[19,137197,137198],{},"将需要变的尽可能放到一个盒子中",[19,137200,137201],{},"放大盒子上内部盒子发生变化",[153,137203,137205],{"className":129610,"code":137204,"language":129612,"meta":158,"style":158},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[71,137206,137207,137213,137223,137227,137234,137244,137256,137268],{"__ignoreMap":158},[162,137208,137209,137211],{"class":164,"line":165},[162,137210,130677],{"class":5082},[162,137212,1722],{"class":168},[162,137214,137215,137217,137219,137221],{"class":164,"line":197},[162,137216,135416],{"class":207},[162,137218,1730],{"class":168},[162,137220,57834],{"class":207},[162,137222,4433],{"class":168},[162,137224,137225],{"class":164,"line":228},[162,137226,1498],{"class":168},[162,137228,137229,137232],{"class":164,"line":252},[162,137230,137231],{"class":5082},".child",[162,137233,1722],{"class":168},[162,137235,137236,137238,137240,137242],{"class":164,"line":328},[162,137237,135416],{"class":207},[162,137239,1730],{"class":168},[162,137241,57901],{"class":207},[162,137243,4433],{"class":168},[162,137245,137246,137248,137250,137252,137254],{"class":164,"line":466},[162,137247,135430],{"class":207},[162,137249,1730],{"class":168},[162,137251,3941],{"class":207},[162,137253,2708],{"class":172},[162,137255,4433],{"class":168},[162,137257,137258,137260,137262,137264,137266],{"class":164,"line":471},[162,137259,135447],{"class":207},[162,137261,1730],{"class":168},[162,137263,3941],{"class":207},[162,137265,2708],{"class":172},[162,137267,4433],{"class":168},[162,137269,137270],{"class":164,"line":687},[162,137271,1498],{"class":168},[19,137273,137274],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,137276,137278],{"id":137277},"_122-精灵图","12.2 精灵图",[3284,137280,137282],{"id":137281},"_1221-理解","12.2.1 理解",[1452,137284,137285,137303],{},[1455,137286,137287,137288,135516,137291,137294,137295,137298,137299,137302],{},"目的： ",[3453,137289,137290],{},"为了有效地减少服务器接收和发送请求的次数",[3453,137292,137293],{},"提高"," 页面的 ",[3453,137296,137297],{},"加载速度"," ，出现了 ",[3453,137300,137301],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[1455,137304,137305,137306,137308,137309,137311,137312,137314,137315,137317,137318,137320,137321,137323],{},"使用精灵图核心：",[56786,137307],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[56786,137310],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[56786,137313],{},"  ③移动背景图片位置， 此时可以使用 background-position",[56786,137316],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[56786,137319],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[56786,137322],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[3284,137325,137327],{"id":137326},"_1222-扒图","12.2.2 扒图",[153,137329,137332],{"className":137330,"code":137331,"language":8295},[8293],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[71,137333,137331],{"__ignoreMap":158},[4602,137335],{"style":129466,"src":137336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[4602,137338],{"style":129466,"src":137339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[3284,137341,137343],{"id":137342},"_1223-精灵图的实现","12.2.3 精灵图的实现",[4602,137345],{"style":129466,"src":137346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,137348,137349],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[4602,137351],{"style":129466,"src":137352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[153,137354,137356],{"className":129610,"code":137355,"language":129612,"meta":158,"style":158},"\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",[71,137357,137358,137363,137370,137382,137394,137413,137430],{"__ignoreMap":158},[162,137359,137360],{"class":164,"line":165},[162,137361,137362],{"class":361},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[162,137364,137365,137368],{"class":164,"line":197},[162,137366,137367],{"class":5082},".icon",[162,137369,1722],{"class":168},[162,137371,137372,137374,137376,137378,137380],{"class":164,"line":228},[162,137373,73633],{"class":207},[162,137375,1730],{"class":168},[162,137377,1011],{"class":207},[162,137379,54564],{"class":172},[162,137381,4433],{"class":168},[162,137383,137384,137386,137388,137390,137392],{"class":164,"line":252},[162,137385,73853],{"class":207},[162,137387,1730],{"class":168},[162,137389,1011],{"class":207},[162,137391,54564],{"class":172},[162,137393,4433],{"class":168},[162,137395,137396,137398,137400,137402,137404,137407,137409,137411],{"class":164,"line":328},[162,137397,73676],{"class":207},[162,137399,1730],{"class":168},[162,137401,64794],{"class":207},[162,137403,604],{"class":168},[162,137405,137406],{"class":671},"sprites.png",[162,137408,1823],{"class":168},[162,137410,64804],{"class":207},[162,137412,4433],{"class":168},[162,137414,137415,137417,137419,137421,137423,137426,137428],{"class":164,"line":466},[162,137416,131870],{"class":207},[162,137418,1730],{"class":168},[162,137420,54835],{"class":207},[162,137422,54564],{"class":172},[162,137424,137425],{"class":207}," -20",[162,137427,54564],{"class":172},[162,137429,4433],{"class":168},[162,137431,137432],{"class":164,"line":471},[162,137433,1498],{"class":168},[4602,137435],{"style":129466,"src":137436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,137438,137439],{},"在前端中坐标轴的正方向是右和下",[14,137441,137443],{"id":137442},"_123-字体图标","12.3 字体图标",[3284,137445,137447],{"id":137446},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,137449,137450],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,137452,137453],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,137455,137456],{},"1.图片文件还是比较大的。",[19,137458,137459],{},"2.图片本身放大和缩小会失真。",[19,137461,137462],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,137464,137465,137466,28832],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[3453,137467,137468],{},"字体图标 iconfont",[19,137470,137471,137474,137475,3183],{},[3453,137472,137473],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[3453,137476,137477],{},"展示的是图标，本质属于字体",[3284,137479,137481],{"id":137480},"_1232-字体图标的优点","12.3.2 字体图标的优点",[4279,137483,137484,137489,137492,137495,137498],{},[1455,137485,137486,137488],{},[3453,137487,28967],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[1455,137490,137491],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[1455,137493,137494],{},"兼容性：几乎支持所有的浏览器，请放心使用",[1455,137496,137497],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[1455,137499,137500],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[3284,137502,137504],{"id":137503},"_1233-字体库下载网站","12.3.3 字体库下载网站",[4279,137506,137507],{},[1455,137508,137509,137510],{},"icomoon字体库：",[3538,137511,137514],{"href":137512,"rel":137513},"http:\u002F\u002Ficomoon.io\u002F",[26956],"http:\u002F\u002Ficomoon.io",[19,137516,137517],{},"进去之后点icomoon app",[4602,137519],{"style":129466,"src":137520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,137522,137523],{},"可以对其编辑：",[4602,137525],{"style":129466,"src":137526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,137528,137529],{},"生成字体：",[4602,137531],{"style":129466,"src":137532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,137534,137535],{},"下载：",[4602,137537],{"style":129466,"src":137538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[4279,137540,137541],{},[1455,137542,137543,137544],{},"阿里iconfont字体库： ",[3538,137545,137546],{"href":137546,"rel":137547},"http:\u002F\u002Fwww.iconfont.cn\u002F",[26956],[3284,137549,137551],{"id":137550},"_1234-字体图标的引入","12.3.4 字体图标的引入",[1452,137553,137554],{},[1455,137555,137556,137557,137560],{},"把下载包里面的 ",[3453,137558,137559],{},"fonts"," 文件夹放入页面根目录下",[4602,137562],{"style":129466,"src":137563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[1452,137565,137566],{"start":197},[1455,137567,137568],{},"字体文件格式",[26,137570,137571,137580],{},[29,137572,137573],{},[32,137574,137575,137578],{},[35,137576,137577],{"align":26827},"格式",[35,137579,26831],{"align":26827},[51,137581,137582,137592,137602,137612],{},[32,137583,137584,137589],{},[56,137585,137586],{"align":26827},[3453,137587,137588],{},".ttf",[56,137590,137591],{"align":26827},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[32,137593,137594,137599],{},[56,137595,137596],{"align":26827},[3453,137597,137598],{},".woff",[56,137600,137601],{"align":26827},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[32,137603,137604,137609],{},[56,137605,137606],{"align":26827},[3453,137607,137608],{},".eot",[56,137610,137611],{"align":26827},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[32,137613,137614,137619],{},[56,137615,137616],{"align":26827},[3453,137617,137618],{},"svg",[56,137620,137621],{"align":26827},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[1452,137623,137624],{"start":228},[1455,137625,137626],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[153,137628,137630],{"className":129610,"code":137629,"language":129612,"meta":158,"style":158},"\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",[71,137631,137632,137637,137644,137656,137672,137697,137718,137738,137758,137762,137768,137778,137789],{"__ignoreMap":158},[162,137633,137634],{"class":164,"line":165},[162,137635,137636],{"class":361},"\u002F* 引入字体图标 *\u002F\n",[162,137638,137639,137642],{"class":164,"line":197},[162,137640,137641],{"class":172},"@font-face",[162,137643,1722],{"class":168},[162,137645,137646,137649,137651,137654],{"class":164,"line":228},[162,137647,137648],{"class":207},"  font-family",[162,137650,1730],{"class":168},[162,137652,137653],{"class":179},"'icomoon'",[162,137655,4433],{"class":168},[162,137657,137658,137661,137663,137665,137667,137670],{"class":164,"line":252},[162,137659,137660],{"class":207},"  src",[162,137662,1730],{"class":168},[162,137664,64794],{"class":207},[162,137666,604],{"class":168},[162,137668,137669],{"class":179},"'fonts\u002Ficomoon.eot'",[162,137671,5836],{"class":168},[162,137673,137674,137676,137678,137680,137682,137685,137687,137690,137692,137695],{"class":164,"line":328},[162,137675,137660],{"class":207},[162,137677,1730],{"class":168},[162,137679,64794],{"class":207},[162,137681,604],{"class":168},[162,137683,137684],{"class":179},"'fonts\u002Ficomoon.eot?#iefix'",[162,137686,1823],{"class":168},[162,137688,137689],{"class":207},"format",[162,137691,604],{"class":168},[162,137693,137694],{"class":179},"'embedded-opentype'",[162,137696,41122],{"class":168},[162,137698,137699,137702,137704,137707,137709,137711,137713,137716],{"class":164,"line":466},[162,137700,137701],{"class":207},"       url",[162,137703,604],{"class":168},[162,137705,137706],{"class":179},"'fonts\u002Ficomoon.woff'",[162,137708,1823],{"class":168},[162,137710,137689],{"class":207},[162,137712,604],{"class":168},[162,137714,137715],{"class":179},"'woff'",[162,137717,41122],{"class":168},[162,137719,137720,137722,137724,137727,137729,137731,137733,137736],{"class":164,"line":471},[162,137721,137701],{"class":207},[162,137723,604],{"class":168},[162,137725,137726],{"class":179},"'fonts\u002Ficomoon.ttf'",[162,137728,1823],{"class":168},[162,137730,137689],{"class":207},[162,137732,604],{"class":168},[162,137734,137735],{"class":179},"'truetype'",[162,137737,41122],{"class":168},[162,137739,137740,137742,137744,137747,137749,137751,137753,137756],{"class":164,"line":687},[162,137741,137701],{"class":207},[162,137743,604],{"class":168},[162,137745,137746],{"class":179},"'fonts\u002Ficomoon.svg#icomoon'",[162,137748,1823],{"class":168},[162,137750,137689],{"class":207},[162,137752,604],{"class":168},[162,137754,137755],{"class":179},"'svg'",[162,137757,5836],{"class":168},[162,137759,137760],{"class":164,"line":692},[162,137761,1498],{"class":168},[162,137763,137764,137766],{"class":164,"line":698},[162,137765,137367],{"class":5082},[162,137767,1722],{"class":168},[162,137769,137770,137772,137774,137776],{"class":164,"line":2955},[162,137771,137648],{"class":207},[162,137773,1730],{"class":168},[162,137775,137653],{"class":179},[162,137777,4433],{"class":168},[162,137779,137780,137783,137785,137787],{"class":164,"line":2960},[162,137781,137782],{"class":207},"  font-style",[162,137784,1730],{"class":168},[162,137786,66908],{"class":207},[162,137788,4433],{"class":168},[162,137790,137791],{"class":164,"line":2971},[162,137792,1498],{"class":168},[19,137794,137795],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[4602,137797],{"style":129466,"src":137798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[1452,137800,137801],{"start":252},[1455,137802,137803],{},"添加字体",[4602,137805],{"style":129466,"src":137806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,137808,137809],{},"复制：",[4602,137811],{"style":129466,"src":137812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,137814,137815],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[1452,137817,137818],{"start":328},[1455,137819,137820],{},"代码展示：",[153,137822,137823],{"className":129610,"code":137629,"language":129612,"meta":158,"style":158},[71,137824,137825,137829,137835,137845,137859,137881,137899,137917,137935,137939,137945,137955,137965],{"__ignoreMap":158},[162,137826,137827],{"class":164,"line":165},[162,137828,137636],{"class":361},[162,137830,137831,137833],{"class":164,"line":197},[162,137832,137641],{"class":172},[162,137834,1722],{"class":168},[162,137836,137837,137839,137841,137843],{"class":164,"line":228},[162,137838,137648],{"class":207},[162,137840,1730],{"class":168},[162,137842,137653],{"class":179},[162,137844,4433],{"class":168},[162,137846,137847,137849,137851,137853,137855,137857],{"class":164,"line":252},[162,137848,137660],{"class":207},[162,137850,1730],{"class":168},[162,137852,64794],{"class":207},[162,137854,604],{"class":168},[162,137856,137669],{"class":179},[162,137858,5836],{"class":168},[162,137860,137861,137863,137865,137867,137869,137871,137873,137875,137877,137879],{"class":164,"line":328},[162,137862,137660],{"class":207},[162,137864,1730],{"class":168},[162,137866,64794],{"class":207},[162,137868,604],{"class":168},[162,137870,137684],{"class":179},[162,137872,1823],{"class":168},[162,137874,137689],{"class":207},[162,137876,604],{"class":168},[162,137878,137694],{"class":179},[162,137880,41122],{"class":168},[162,137882,137883,137885,137887,137889,137891,137893,137895,137897],{"class":164,"line":466},[162,137884,137701],{"class":207},[162,137886,604],{"class":168},[162,137888,137706],{"class":179},[162,137890,1823],{"class":168},[162,137892,137689],{"class":207},[162,137894,604],{"class":168},[162,137896,137715],{"class":179},[162,137898,41122],{"class":168},[162,137900,137901,137903,137905,137907,137909,137911,137913,137915],{"class":164,"line":471},[162,137902,137701],{"class":207},[162,137904,604],{"class":168},[162,137906,137726],{"class":179},[162,137908,1823],{"class":168},[162,137910,137689],{"class":207},[162,137912,604],{"class":168},[162,137914,137735],{"class":179},[162,137916,41122],{"class":168},[162,137918,137919,137921,137923,137925,137927,137929,137931,137933],{"class":164,"line":687},[162,137920,137701],{"class":207},[162,137922,604],{"class":168},[162,137924,137746],{"class":179},[162,137926,1823],{"class":168},[162,137928,137689],{"class":207},[162,137930,604],{"class":168},[162,137932,137755],{"class":179},[162,137934,5836],{"class":168},[162,137936,137937],{"class":164,"line":692},[162,137938,1498],{"class":168},[162,137940,137941,137943],{"class":164,"line":698},[162,137942,137367],{"class":5082},[162,137944,1722],{"class":168},[162,137946,137947,137949,137951,137953],{"class":164,"line":2955},[162,137948,137648],{"class":207},[162,137950,1730],{"class":168},[162,137952,137653],{"class":179},[162,137954,4433],{"class":168},[162,137956,137957,137959,137961,137963],{"class":164,"line":2960},[162,137958,137782],{"class":207},[162,137960,1730],{"class":168},[162,137962,66908],{"class":207},[162,137964,4433],{"class":168},[162,137966,137967],{"class":164,"line":2971},[162,137968,1498],{"class":168},[4602,137970],{"style":129466,"src":137971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,137973,137974],{},"更加细节展示：",[1452,137976,137977],{},[1455,137978,137979],{},"html 标签内添加小图标",[4602,137981],{"style":129466,"src":137982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[1452,137984,137985],{"start":197},[1455,137986,137987],{},"给标签定义字体",[153,137989,137990],{"className":130357,"code":133714,"language":130359,"meta":158,"style":158},[71,137991,137992,137996,138010,138014],{"__ignoreMap":158},[162,137993,137994],{"class":164,"line":165},[162,137995,133721],{"class":361},[162,137997,137998,138000,138002,138004,138006,138008],{"class":164,"line":197},[162,137999,4187],{"class":168},[162,138001,54683],{"class":54373},[162,138003,56556],{"class":5082},[162,138005,173],{"class":168},[162,138007,133734],{"class":179},[162,138009,54380],{"class":168},[162,138011,138012],{"class":164,"line":228},[162,138013,133741],{"class":168},[162,138015,138016,138018,138020],{"class":164,"line":252},[162,138017,54857],{"class":168},[162,138019,54683],{"class":54373},[162,138021,54380],{"class":168},[19,138023,138024],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[4602,138026],{"style":129466,"src":138027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[3284,138029,138031],{"id":138030},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,138033,138034],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,138036,138037,138038,138041],{},"把压缩包里面的 ",[3453,138039,138040],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,138043,138044],{},"打开网站，点下方：",[4602,138046],{"style":129466,"src":138047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[4602,138049],{"style":129466,"src":138050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[4602,138052],{"style":129466,"src":138053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,138055,138056],{},"点yes重新加载",[19,138058,138059],{},"然后重复之前的操作就可以实现了",[19,138061,138062],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[3284,138064,138066],{"id":138065},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[4602,138068],{"style":129466,"src":138069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[3219,138071,138072],{},"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":158,"searchDepth":197,"depth":197,"links":138074},[138075,138081,138086],{"id":136678,"depth":197,"text":136679,"children":138076},[138077,138078,138079,138080],{"id":136690,"depth":228,"text":136691},{"id":136719,"depth":228,"text":136720},{"id":136747,"depth":228,"text":136748},{"id":136805,"depth":228,"text":136806},{"id":137277,"depth":197,"text":137278,"children":138082},[138083,138084,138085],{"id":137281,"depth":228,"text":137282},{"id":137326,"depth":228,"text":137327},{"id":137342,"depth":228,"text":137343},{"id":137442,"depth":197,"text":137443,"children":138087},[138088,138089,138090,138091,138092,138093],{"id":137446,"depth":228,"text":137447},{"id":137480,"depth":228,"text":137481},{"id":137503,"depth":228,"text":137504},{"id":137550,"depth":228,"text":137551},{"id":138030,"depth":228,"text":138031},{"id":138065,"depth":228,"text":138066},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":136670,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":138100,"title":138101,"body":138102,"description":3241,"extension":3242,"meta":139329,"navigation":300,"path":139330,"seo":139331,"stem":139332,"__hash__":139333},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":138103,"toc":139310},[138104,138107,138111,138114,138128,138196,138226,138229,138233,138237,138339,138386,138390,138393,138396,138430,138433,138436,138439,138442,138445,138448,138451,138453,138456,138459,138462,138465,138468,138471,138474,138502,138505,138509,138512,138519,138522,138525,138551,138554,138558,138561,138564,138571,138575,138578,138580,138612,138615,138618,138630,138636,138639,138642,138645,138647,138651,138654,138657,138660,138705,138709,138711,138714,138721,138763,138766,138770,138775,138789,138793,138796,138799,138802,138805,138808,138842,138845,138848,138902,138905,138908,138911,138914,138966,138969,138972,139021,139025,139027,139030,139033,139036,139039,139042,139100,139103,139109,139112,139115,139147,139150,139154,139158,139161,139193,139197,139200,139244,139248,139251,139254,139257,139260,139263,139266,139269,139271,139274,139276,139279,139282,139285,139288,139293,139296,139298,139301,139304,139307],[10,138105,138101],{"id":138106},"_13-界面样式与布局技巧",[14,138108,138110],{"id":138109},"_131-css三角","13.1 css三角",[19,138112,138113],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[4279,138115,138116,138119,138122,138125],{},[1455,138117,138118],{},"用css 边框可以模拟三角效果",[1455,138120,138121],{},"宽度高度为0",[1455,138123,138124],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[1455,138126,138127],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[153,138129,138131],{"className":129610,"code":138130,"language":129612,"meta":158,"style":158},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[71,138132,138133,138138,138145,138155,138165,138181,138192],{"__ignoreMap":158},[162,138134,138135],{"class":164,"line":165},[162,138136,138137],{"class":361},"\u002F* CSS 实现三角形 *\u002F\n",[162,138139,138140,138143],{"class":164,"line":197},[162,138141,138142],{"class":5082},".triangle",[162,138144,1722],{"class":168},[162,138146,138147,138149,138151,138153],{"class":164,"line":228},[162,138148,73633],{"class":207},[162,138150,1730],{"class":168},[162,138152,312],{"class":207},[162,138154,4433],{"class":168},[162,138156,138157,138159,138161,138163],{"class":164,"line":252},[162,138158,73853],{"class":207},[162,138160,1730],{"class":168},[162,138162,312],{"class":207},[162,138164,4433],{"class":168},[162,138166,138167,138169,138171,138173,138175,138177,138179],{"class":164,"line":328},[162,138168,73961],{"class":207},[162,138170,1730],{"class":168},[162,138172,1006],{"class":207},[162,138174,54564],{"class":172},[162,138176,54593],{"class":207},[162,138178,67058],{"class":207},[162,138180,4433],{"class":168},[162,138182,138183,138186,138188,138190],{"class":164,"line":466},[162,138184,138185],{"class":207},"  border-bottom-color",[162,138187,1730],{"class":168},[162,138189,65437],{"class":207},[162,138191,4433],{"class":168},[162,138193,138194],{"class":164,"line":471},[162,138195,1498],{"class":168},[153,138197,138198],{"className":129610,"code":133767,"language":129612,"meta":158,"style":158},[71,138199,138200,138206,138222],{"__ignoreMap":158},[162,138201,138202,138204],{"class":164,"line":165},[162,138203,54683],{"class":54373},[162,138205,1722],{"class":168},[162,138207,138208,138210,138212,138214,138216,138218,138220],{"class":164,"line":197},[162,138209,73961],{"class":207},[162,138211,1730],{"class":168},[162,138213,208],{"class":207},[162,138215,54564],{"class":172},[162,138217,54593],{"class":207},[162,138219,133002],{"class":207},[162,138221,4433],{"class":168},[162,138223,138224],{"class":164,"line":228},[162,138225,1498],{"class":168},[4602,138227],{"style":129466,"src":138228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,138230,138232],{"id":138231},"_132-css用户界面样式","13.2 css用户界面样式",[3284,138234,138236],{"id":138235},"_1321-鼠标样式","13.2.1 鼠标样式",[153,138238,138240],{"className":129610,"code":138239,"language":129612,"meta":158,"style":158},"\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",[71,138241,138242,138247,138266,138284,138303,138320],{"__ignoreMap":158},[162,138243,138244],{"class":164,"line":165},[162,138245,138246],{"class":361},"\u002F* 鼠标样式 *\u002F\n",[162,138248,138249,138251,138253,138256,138258,138260,138263],{"class":164,"line":197},[162,138250,54683],{"class":54373},[162,138252,82872],{"class":168},[162,138254,138255],{"class":207},"cursor",[162,138257,1730],{"class":168},[162,138259,65098],{"class":207},[162,138261,138262],{"class":168},"; }   ",[162,138264,138265],{"class":361},"\u002F* 手型 *\u002F\n",[162,138267,138268,138270,138272,138274,138276,138279,138281],{"class":164,"line":228},[162,138269,54683],{"class":54373},[162,138271,82872],{"class":168},[162,138273,138255],{"class":207},[162,138275,1730],{"class":168},[162,138277,138278],{"class":207},"default",[162,138280,138262],{"class":168},[162,138282,138283],{"class":361},"\u002F* 默认 *\u002F\n",[162,138285,138286,138288,138290,138292,138294,138297,138300],{"class":164,"line":252},[162,138287,54683],{"class":54373},[162,138289,82872],{"class":168},[162,138291,138255],{"class":207},[162,138293,1730],{"class":168},[162,138295,138296],{"class":207},"move",[162,138298,138299],{"class":168},"; }      ",[162,138301,138302],{"class":361},"\u002F* 移动 *\u002F\n",[162,138304,138305,138307,138309,138311,138313,138315,138317],{"class":164,"line":328},[162,138306,54683],{"class":54373},[162,138308,82872],{"class":168},[162,138310,138255],{"class":207},[162,138312,1730],{"class":168},[162,138314,8295],{"class":207},[162,138316,138299],{"class":168},[162,138318,138319],{"class":361},"\u002F* 文本 *\u002F\n",[162,138321,138322,138324,138326,138328,138330,138333,138336],{"class":164,"line":466},[162,138323,54683],{"class":54373},[162,138325,82872],{"class":168},[162,138327,138255],{"class":207},[162,138329,1730],{"class":168},[162,138331,138332],{"class":207},"not-allowed",[162,138334,138335],{"class":168},"; } ",[162,138337,138338],{"class":361},"\u002F* 禁止 *\u002F\n",[26,138340,138341,138349],{},[29,138342,138343],{},[32,138344,138345,138347],{},[35,138346,130074],{"align":26827},[35,138348,30579],{"align":26827},[51,138350,138351,138358,138365,138372,138379],{},[32,138352,138353,138355],{},[56,138354,138278],{"align":26827},[56,138356,138357],{"align":26827},"小白 默认",[32,138359,138360,138362],{},[56,138361,65098],{"align":26827},[56,138363,138364],{"align":26827},"小手",[32,138366,138367,138369],{},[56,138368,138296],{"align":26827},[56,138370,138371],{"align":26827},"移动",[32,138373,138374,138376],{},[56,138375,8295],{"align":26827},[56,138377,138378],{"align":26827},"文本",[32,138380,138381,138383],{},[56,138382,138332],{"align":26827},[56,138384,138385],{"align":26827},"禁止",[3284,138387,138389],{"id":138388},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,138391,138392],{},"去除表单轮廓线",[19,138394,138395],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[153,138397,138398],{"className":129610,"code":132974,"language":129612,"meta":158,"style":158},[71,138399,138400,138404,138410,138426],{"__ignoreMap":158},[162,138401,138402],{"class":164,"line":165},[162,138403,132981],{"class":361},[162,138405,138406,138408],{"class":164,"line":197},[162,138407,54683],{"class":54373},[162,138409,1722],{"class":168},[162,138411,138412,138414,138416,138418,138420,138422,138424],{"class":164,"line":228},[162,138413,73961],{"class":207},[162,138415,1730],{"class":168},[162,138417,208],{"class":207},[162,138419,54564],{"class":172},[162,138421,54593],{"class":207},[162,138423,133002],{"class":207},[162,138425,4433],{"class":168},[162,138427,138428],{"class":164,"line":252},[162,138429,1498],{"class":168},[19,138431,138432],{},"文本域：",[4602,138434],{"style":129466,"src":138435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,138437,138438],{},"此时会有一个空白区域",[4602,138440],{"style":129466,"src":138441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,138443,138444],{},"写在同一行就不会出现这个问题",[4602,138446],{"style":129466,"src":138447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,138449,138450],{},"文本域是行内块元素，一定记住！！！",[19,138452,101297],{},[4602,138454],{"style":129466,"src":138455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,138457,138458],{},"文本域尽量放在一行",[19,138460,138461],{},"知识回顾：cols是列，rols是行",[4602,138463],{"style":129466,"src":138464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,138466,138467],{},"它可以进行拖动，显然这是我们不愿意看到的",[4602,138469],{"style":129466,"src":138470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,138472,138473],{},"使用resize进行解决",[153,138475,138477],{"className":129610,"code":138476,"language":129612,"meta":158,"style":158},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[71,138478,138479,138485,138498],{"__ignoreMap":158},[162,138480,138481,138483],{"class":164,"line":165},[162,138482,56891],{"class":54373},[162,138484,1722],{"class":168},[162,138486,138487,138489,138491,138493,138495],{"class":164,"line":197},[162,138488,73863],{"class":207},[162,138490,1730],{"class":168},[162,138492,57807],{"class":207},[162,138494,133473],{"class":168},[162,138496,138497],{"class":361},"\u002F* 取消表单轮廓线 *\u002F\n",[162,138499,138500],{"class":164,"line":228},[162,138501,1498],{"class":168},[19,138503,138504],{},"此时就无法通过右下方实现拖动了",[3284,138506,138508],{"id":138507},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,138510,138511],{},"实现一个盒子中的文字和图片对齐",[19,138513,138514,138515,138518],{},"用于设置一个元素的 ",[3453,138516,138517],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,138520,138521],{},"图片和文字默认是基线对齐",[4602,138523],{"style":129466,"src":138524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[153,138526,138527],{"className":129610,"code":138476,"language":129612,"meta":158,"style":158},[71,138528,138529,138535,138547],{"__ignoreMap":158},[162,138530,138531,138533],{"class":164,"line":165},[162,138532,56891],{"class":54373},[162,138534,1722],{"class":168},[162,138536,138537,138539,138541,138543,138545],{"class":164,"line":197},[162,138538,73863],{"class":207},[162,138540,1730],{"class":168},[162,138542,57807],{"class":207},[162,138544,133473],{"class":168},[162,138546,138497],{"class":361},[162,138548,138549],{"class":164,"line":228},[162,138550,1498],{"class":168},[4602,138552],{"style":129466,"src":138553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[25089,138555,138557],{"id":138556},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,138559,138560],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[4602,138562],{"style":129466,"src":138563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,138565,138566,138567,138570],{},"此时可以给图片、表单这些行内块元素的 ",[3453,138568,138569],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[25089,138572,138574],{"id":138573},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,138576,138577],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,138579,17727],{},[153,138581,138583],{"className":129610,"code":138582,"language":129612,"meta":158,"style":158},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[71,138584,138585,138590,138596,138608],{"__ignoreMap":158},[162,138586,138587],{"class":164,"line":165},[162,138588,138589],{"class":361},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[162,138591,138592,138594],{"class":164,"line":197},[162,138593,4602],{"class":54373},[162,138595,1722],{"class":168},[162,138597,138598,138601,138603,138606],{"class":164,"line":228},[162,138599,138600],{"class":207},"  vertical-align",[162,138602,1730],{"class":168},[162,138604,138605],{"class":207},"middle",[162,138607,4433],{"class":168},[162,138609,138610],{"class":164,"line":252},[162,138611,1498],{"class":168},[4602,138613],{"style":129466,"src":138614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,138616,138617],{},"主要解决方法有两种：",[1452,138619,138620],{},[1455,138621,138622,138625,138626,138629],{},[3453,138623,138624],{},"给图片"," 添加 ",[3453,138627,138628],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,138631,138632,138633],{},"2.把图片转换为块级元素 ",[3453,138634,138635],{},"display: block",[19,138637,138638],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,138640,138641],{},"img {",[19,138643,138644],{},"vertical-align:middle;",[19,138646,976],{},[3284,138648,138650],{"id":138649},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,138652,138653],{},"效果：",[4602,138655],{"style":129466,"src":138656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,138658,138659],{},"单行文本溢出显示省略号--必须满足三个条件：",[153,138661,138663],{"className":129610,"code":138662,"language":129612,"meta":158,"style":158},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[71,138664,138665,138670,138676,138686,138691,138701],{"__ignoreMap":158},[162,138666,138667],{"class":164,"line":165},[162,138668,138669],{"class":361},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[162,138671,138672,138674],{"class":164,"line":197},[162,138673,4602],{"class":54373},[162,138675,1722],{"class":168},[162,138677,138678,138680,138682,138684],{"class":164,"line":228},[162,138679,138600],{"class":207},[162,138681,1730],{"class":168},[162,138683,138605],{"class":207},[162,138685,4433],{"class":168},[162,138687,138688],{"class":164,"line":252},[162,138689,138690],{"class":361},"  \u002F* 或 *\u002F\n",[162,138692,138693,138695,138697,138699],{"class":164,"line":328},[162,138694,131226],{"class":207},[162,138696,1730],{"class":168},[162,138698,63937],{"class":207},[162,138700,4433],{"class":168},[162,138702,138703],{"class":164,"line":466},[162,138704,1498],{"class":168},[3284,138706,138708],{"id":138707},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,138710,138653],{},[4602,138712],{"style":129466,"src":138713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,138715,138716,138717,138720],{},"多行文本溢出显示省略号， ",[3453,138718,138719],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[153,138722,138723],{"className":129610,"code":138662,"language":129612,"meta":158,"style":158},[71,138724,138725,138729,138735,138745,138749,138759],{"__ignoreMap":158},[162,138726,138727],{"class":164,"line":165},[162,138728,138669],{"class":361},[162,138730,138731,138733],{"class":164,"line":197},[162,138732,4602],{"class":54373},[162,138734,1722],{"class":168},[162,138736,138737,138739,138741,138743],{"class":164,"line":228},[162,138738,138600],{"class":207},[162,138740,1730],{"class":168},[162,138742,138605],{"class":207},[162,138744,4433],{"class":168},[162,138746,138747],{"class":164,"line":252},[162,138748,138690],{"class":361},[162,138750,138751,138753,138755,138757],{"class":164,"line":328},[162,138752,131226],{"class":207},[162,138754,1730],{"class":168},[162,138756,63937],{"class":207},[162,138758,4433],{"class":168},[162,138760,138761],{"class":164,"line":466},[162,138762,1498],{"class":168},[19,138764,138765],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,138767,138769],{"id":138768},"_133-常见布局技巧","13.3 常见布局技巧",[19,138771,138772],{},[3453,138773,138774],{},"巧妙利用一个技术更快更好的布局：",[1452,138776,138777,138780,138783,138786],{},[1455,138778,138779],{},"margin负值的运用",[1455,138781,138782],{},"文字围绕浮动元素",[1455,138784,138785],{},"行内块的巧妙运用",[1455,138787,138788],{},"CSS三角强化",[3284,138790,138792],{"id":138791},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,138794,138795],{},"应用场景：",[4602,138797],{"style":129466,"src":138798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[4602,138800],{"style":129466,"src":138801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,138803,138804],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,138806,138807],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[153,138809,138810],{"className":129610,"code":132974,"language":129612,"meta":158,"style":158},[71,138811,138812,138816,138822,138838],{"__ignoreMap":158},[162,138813,138814],{"class":164,"line":165},[162,138815,132981],{"class":361},[162,138817,138818,138820],{"class":164,"line":197},[162,138819,54683],{"class":54373},[162,138821,1722],{"class":168},[162,138823,138824,138826,138828,138830,138832,138834,138836],{"class":164,"line":228},[162,138825,73961],{"class":207},[162,138827,1730],{"class":168},[162,138829,208],{"class":207},[162,138831,54564],{"class":172},[162,138833,54593],{"class":207},[162,138835,133002],{"class":207},[162,138837,4433],{"class":168},[162,138839,138840],{"class":164,"line":252},[162,138841,1498],{"class":168},[4602,138843],{"style":129466,"src":138844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,138846,138847],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[153,138849,138851],{"className":129610,"code":138850,"language":129612,"meta":158,"style":158},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[71,138852,138853,138858,138864,138874,138886,138898],{"__ignoreMap":158},[162,138854,138855],{"class":164,"line":165},[162,138856,138857],{"class":361},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[162,138859,138860,138862],{"class":164,"line":197},[162,138861,133458],{"class":5082},[162,138863,1722],{"class":168},[162,138865,138866,138868,138870,138872],{"class":164,"line":228},[162,138867,135416],{"class":207},[162,138869,1730],{"class":168},[162,138871,57834],{"class":207},[162,138873,4433],{"class":168},[162,138875,138876,138878,138880,138882,138884],{"class":164,"line":252},[162,138877,135430],{"class":207},[162,138879,1730],{"class":168},[162,138881,1006],{"class":207},[162,138883,54564],{"class":172},[162,138885,4433],{"class":168},[162,138887,138888,138890,138892,138894,138896],{"class":164,"line":328},[162,138889,135447],{"class":207},[162,138891,1730],{"class":168},[162,138893,1011],{"class":207},[162,138895,54564],{"class":172},[162,138897,4433],{"class":168},[162,138899,138900],{"class":164,"line":466},[162,138901,1498],{"class":168},[19,138903,138904],{},"加上上述代码会发现：",[4602,138906],{"style":129466,"src":138907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,138909,138910],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,138912,138913],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[153,138915,138916],{"className":129610,"code":138850,"language":129612,"meta":158,"style":158},[71,138917,138918,138922,138928,138938,138950,138962],{"__ignoreMap":158},[162,138919,138920],{"class":164,"line":165},[162,138921,138857],{"class":361},[162,138923,138924,138926],{"class":164,"line":197},[162,138925,133458],{"class":5082},[162,138927,1722],{"class":168},[162,138929,138930,138932,138934,138936],{"class":164,"line":228},[162,138931,135416],{"class":207},[162,138933,1730],{"class":168},[162,138935,57834],{"class":207},[162,138937,4433],{"class":168},[162,138939,138940,138942,138944,138946,138948],{"class":164,"line":252},[162,138941,135430],{"class":207},[162,138943,1730],{"class":168},[162,138945,1006],{"class":207},[162,138947,54564],{"class":172},[162,138949,4433],{"class":168},[162,138951,138952,138954,138956,138958,138960],{"class":164,"line":328},[162,138953,135447],{"class":207},[162,138955,1730],{"class":168},[162,138957,1011],{"class":207},[162,138959,54564],{"class":172},[162,138961,4433],{"class":168},[162,138963,138964],{"class":164,"line":466},[162,138965,1498],{"class":168},[19,138967,138968],{},"解决方式2：",[19,138970,138971],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[153,138973,138975],{"className":129610,"code":138974,"language":129612,"meta":158,"style":158},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[71,138976,138977,138983,138993,139005,139017],{"__ignoreMap":158},[162,138978,138979,138981],{"class":164,"line":165},[162,138980,54683],{"class":54373},[162,138982,1722],{"class":168},[162,138984,138985,138987,138989,138991],{"class":164,"line":197},[162,138986,135416],{"class":207},[162,138988,1730],{"class":168},[162,138990,57834],{"class":207},[162,138992,4433],{"class":168},[162,138994,138995,138997,138999,139001,139003],{"class":164,"line":228},[162,138996,135430],{"class":207},[162,138998,1730],{"class":168},[162,139000,1006],{"class":207},[162,139002,54564],{"class":172},[162,139004,4433],{"class":168},[162,139006,139007,139009,139011,139013,139015],{"class":164,"line":252},[162,139008,135447],{"class":207},[162,139010,1730],{"class":168},[162,139012,1011],{"class":207},[162,139014,54564],{"class":172},[162,139016,4433],{"class":168},[162,139018,139019],{"class":164,"line":328},[162,139020,1498],{"class":168},[3284,139022,139024],{"id":139023},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,139026,138795],{},[4602,139028],{"style":129466,"src":139029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,139031,139032],{},"实现结构图：",[4602,139034],{"style":129466,"src":139035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,139037,139038],{},"巧妙运用浮动元素不会压住文字的特性",[19,139040,139041],{},"代码显示：",[153,139043,139045],{"className":129610,"code":139044,"language":129612,"meta":158,"style":158},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[71,139046,139047,139053,139063,139067,139072,139076,139082,139096],{"__ignoreMap":158},[162,139048,139049,139051],{"class":164,"line":165},[162,139050,133458],{"class":5082},[162,139052,1722],{"class":168},[162,139054,139055,139057,139059,139061],{"class":164,"line":197},[162,139056,134090],{"class":207},[162,139058,1730],{"class":168},[162,139060,26827],{"class":207},[162,139062,4433],{"class":168},[162,139064,139065],{"class":164,"line":228},[162,139066,1498],{"class":168},[162,139068,139069],{"class":164,"line":252},[162,139070,139071],{"class":168},"```Css\n",[162,139073,139074],{"class":164,"line":328},[162,139075,133453],{"class":361},[162,139077,139078,139080],{"class":164,"line":466},[162,139079,133458],{"class":5082},[162,139081,1722],{"class":168},[162,139083,139084,139086,139088,139090,139092,139094],{"class":164,"line":471},[162,139085,73535],{"class":207},[162,139087,1730],{"class":168},[162,139089,312],{"class":207},[162,139091,54628],{"class":207},[162,139093,133473],{"class":168},[162,139095,133476],{"class":361},[162,139097,139098],{"class":164,"line":687},[162,139099,1498],{"class":168},[19,139101,139102],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[153,139104,139107],{"className":139105,"code":139106,"language":8295},[8293],"\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",[71,139108,139106],{"__ignoreMap":158},[4602,139110],{"style":129466,"src":139111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,139113,139114],{},"最终展示结果：",[153,139116,139117],{"className":129610,"code":133446,"language":129612,"meta":158,"style":158},[71,139118,139119,139123,139129,139143],{"__ignoreMap":158},[162,139120,139121],{"class":164,"line":165},[162,139122,133453],{"class":361},[162,139124,139125,139127],{"class":164,"line":197},[162,139126,133458],{"class":5082},[162,139128,1722],{"class":168},[162,139130,139131,139133,139135,139137,139139,139141],{"class":164,"line":228},[162,139132,73535],{"class":207},[162,139134,1730],{"class":168},[162,139136,312],{"class":207},[162,139138,54628],{"class":207},[162,139140,133473],{"class":168},[162,139142,133476],{"class":361},[162,139144,139145],{"class":164,"line":252},[162,139146,1498],{"class":168},[4602,139148],{"style":129466,"src":139149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,139151,139153],{"id":139152},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[3284,139155,139157],{"id":139156},"_1341-原理","13.4.1 原理",[4602,139159],{"style":129466,"src":139160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[153,139162,139163],{"className":129610,"code":133446,"language":129612,"meta":158,"style":158},[71,139164,139165,139169,139175,139189],{"__ignoreMap":158},[162,139166,139167],{"class":164,"line":165},[162,139168,133453],{"class":361},[162,139170,139171,139173],{"class":164,"line":197},[162,139172,133458],{"class":5082},[162,139174,1722],{"class":168},[162,139176,139177,139179,139181,139183,139185,139187],{"class":164,"line":228},[162,139178,73535],{"class":207},[162,139180,1730],{"class":168},[162,139182,312],{"class":207},[162,139184,54628],{"class":207},[162,139186,133473],{"class":168},[162,139188,133476],{"class":361},[162,139190,139191],{"class":164,"line":252},[162,139192,1498],{"class":168},[3284,139194,139196],{"id":139195},"_1342-实例","13.4.2 实例",[4602,139198],{"style":129466,"src":139199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[153,139201,139202],{"className":129610,"code":134076,"language":129612,"meta":158,"style":158},[71,139203,139204,139210,139220,139224,139230,139240],{"__ignoreMap":158},[162,139205,139206,139208],{"class":164,"line":165},[162,139207,134083],{"class":5082},[162,139209,1722],{"class":168},[162,139211,139212,139214,139216,139218],{"class":164,"line":197},[162,139213,134090],{"class":207},[162,139215,1730],{"class":168},[162,139217,26827],{"class":207},[162,139219,4433],{"class":168},[162,139221,139222],{"class":164,"line":228},[162,139223,1498],{"class":168},[162,139225,139226,139228],{"class":164,"line":252},[162,139227,134105],{"class":5082},[162,139229,1722],{"class":168},[162,139231,139232,139234,139236,139238],{"class":164,"line":328},[162,139233,134090],{"class":207},[162,139235,1730],{"class":168},[162,139237,75587],{"class":207},[162,139239,4433],{"class":168},[162,139241,139242],{"class":164,"line":466},[162,139243,1498],{"class":168},[14,139245,139247],{"id":139246},"_135-css的初始化","13.5 css的初始化",[19,139249,139250],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,139252,139253],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,139255,139256],{},"每个网页都必须首先进行 CSS初始化。",[19,139258,139259],{},"这里我们以 京东CSS初始化代码为例。",[19,139261,139262],{},"在网页右键查看网页源代码",[19,139264,139265],{},"找到css的link引入语句",[19,139267,139268],{},"然后ctrl+f 输入body",[19,139270,80291],{},[4602,139272],{"style":129466,"src":139273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,139275,80314],{},[4602,139277],{"style":129466,"src":139278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,139280,139281],{},"③打开了网页上传压缩的代码",[4602,139283],{"style":129466,"src":139284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,139286,139287],{},"④从body前可以查看这个网页的初始化代码",[19,139289,139290],{},[3453,139291,139292],{},"Unicode编码字体：",[19,139294,139295],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,139297,86272],{},[19,139299,139300],{},"黑体 \\9ED1\\4F53",[19,139302,139303],{},"宋体 \\5B8B\\4F53",[19,139305,139306],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[3219,139308,139309],{},"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":158,"searchDepth":197,"depth":197,"links":139311},[139312,139313,139320,139324,139328],{"id":138109,"depth":197,"text":138110},{"id":138231,"depth":197,"text":138232,"children":139314},[139315,139316,139317,139318,139319],{"id":138235,"depth":228,"text":138236},{"id":138388,"depth":228,"text":138389},{"id":138507,"depth":228,"text":138508},{"id":138649,"depth":228,"text":138650},{"id":138707,"depth":228,"text":138708},{"id":138768,"depth":197,"text":138769,"children":139321},[139322,139323],{"id":138791,"depth":228,"text":138792},{"id":139023,"depth":228,"text":139024},{"id":139152,"depth":197,"text":139153,"children":139325},[139326,139327],{"id":139156,"depth":228,"text":139157},{"id":139195,"depth":228,"text":139196},{"id":139246,"depth":197,"text":139247},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":138101,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":139335,"title":139336,"body":139337,"description":3241,"extension":3242,"meta":141023,"navigation":300,"path":141024,"seo":141025,"stem":141026,"__hash__":141027},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":139338,"toc":141012},[139339,139342,139346,139350,139353,139360,139363,139366,139404,139407,139409,139423,139427,139436,139440,139445,139448,139451,139454,139489,139494,139497,139527,139530,139535,139538,139541,139571,139574,139628,139631,139635,139640,139652,139655,139659,139689,139692,139697,139700,139730,139733,139737,139754,139758,139762,139765,139798,139801,139805,139808,139811,139814,139817,139820,139931,139934,139937,139940,140042,140045,140049,140053,140057,140060,140100,140103,140105,140121,140125,140128,140133,140214,140217,140220,140346,140351,140354,140362,140365,140370,140455,140458,140462,140465,140468,140472,140492,140497,140581,140584,140589,140592,140595,140673,140676,140679,140682,140685,140688,140693,140696,140699,140771,140774,140779,140782,140879,140882,140888,140891,140894,140897,140900,140903,140906,140909,140912,140916,140921,140924,140957,140962,140965,141006,141009],[10,139340,139336],{"id":139341},"_14-html5与css3新特性",[14,139343,139345],{"id":139344},"_141-html5的新特性","14.1 HTML5的新特性",[3284,139347,139349],{"id":139348},"_1411-基本标签","14.1.1 基本标签",[19,139351,139352],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,139354,139355,139356,139359],{},"这些新特性都有兼容性问题，基本是 ",[3453,139357,139358],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,139361,139362],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,139364,139365],{},"现在使用的是新特性：",[4279,139367,139368,139374,139380,139386,139392,139398],{},[1455,139369,139370,139373],{},[71,139371,139372],{},"\u003Cheader>"," 头部标签",[1455,139375,139376,139379],{},[71,139377,139378],{},"\u003Cnav>"," 导航标签",[1455,139381,139382,139385],{},[71,139383,139384],{},"\u003Carticle>"," 内容标签",[1455,139387,139388,139391],{},[71,139389,139390],{},"\u003Csection>"," 定义文档某个区域",[1455,139393,139394,139397],{},[71,139395,139396],{},"\u003Caside>"," 侧边栏标签",[1455,139399,139400,139403],{},[71,139401,139402],{},"\u003Cfooter>"," 尾部标签",[4602,139405],{"style":129466,"src":139406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,139408,3344],{},[4279,139410,139411,139414,139417,139420],{},[1455,139412,139413],{},"这种语义化标准主要是针对搜索引擎的",[1455,139415,139416],{},"这些标签页面中可以经常使用",[1455,139418,139419],{},"在IE9中，需要把这些元素转换为块级元素",[1455,139421,139422],{},"移动端更喜欢使用这些标签",[3284,139424,139426],{"id":139425},"_1412-多媒体标签","14.1.2 多媒体标签",[19,139428,139429,139430,139432,139433,139435],{},"音频 ",[3453,139431,31263],{}," 和视频 ",[3453,139434,31272],{}," 两个标签",[25089,139437,139439],{"id":139438},"_14121-视频标签-video","14.1.2.1 视频标签- video",[1452,139441,139442],{},[1455,139443,139444],{},"支持格式：",[4602,139446],{"style":129466,"src":139447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,139449,139450],{},"尽量使用MP4，兼容性好",[19,139452,139453],{},"用MP4就可以",[153,139455,139457],{"className":130357,"code":139456,"language":130359,"meta":158,"style":158},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[71,139458,139459],{"__ignoreMap":158},[162,139460,139461,139463,139465,139467,139469,139472,139474,139477,139480,139483,139485,139487],{"class":164,"line":165},[162,139462,4187],{"class":168},[162,139464,31272],{"class":54373},[162,139466,58309],{"class":5082},[162,139468,173],{"class":168},[162,139470,139471],{"class":179},"\"movie.mp4\"",[162,139473,95488],{"class":5082},[162,139475,139476],{"class":5082}," autoplay",[162,139478,139479],{"class":5082}," muted",[162,139481,139482],{"class":5082}," loop",[162,139484,58384],{"class":168},[162,139486,31272],{"class":54373},[162,139488,54380],{"class":168},[1452,139490,139491],{"start":197},[1455,139492,139493],{},"兼容写法",[19,139495,139496],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[153,139498,139499],{"className":130357,"code":139456,"language":130359,"meta":158,"style":158},[71,139500,139501],{"__ignoreMap":158},[162,139502,139503,139505,139507,139509,139511,139513,139515,139517,139519,139521,139523,139525],{"class":164,"line":165},[162,139504,4187],{"class":168},[162,139506,31272],{"class":54373},[162,139508,58309],{"class":5082},[162,139510,173],{"class":168},[162,139512,139471],{"class":179},[162,139514,95488],{"class":5082},[162,139516,139476],{"class":5082},[162,139518,139479],{"class":5082},[162,139520,139482],{"class":5082},[162,139522,58384],{"class":168},[162,139524,31272],{"class":54373},[162,139526,54380],{"class":168},[19,139528,139529],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[1452,139531,139532],{"start":228},[1455,139533,139534],{},"video常用属性",[4602,139536],{"style":129466,"src":139537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,139539,139540],{},"poster属性后面是跟的等待加载图片的地址",[153,139542,139543],{"className":130357,"code":137112,"language":130359,"meta":158,"style":158},[71,139544,139545],{"__ignoreMap":158},[162,139546,139547,139549,139551,139553,139555,139557,139559,139561,139563,139565,139567,139569],{"class":164,"line":165},[162,139548,4187],{"class":168},[162,139550,4602],{"class":54373},[162,139552,58309],{"class":5082},[162,139554,173],{"class":168},[162,139556,137127],{"class":179},[162,139558,58317],{"class":5082},[162,139560,173],{"class":168},[162,139562,137134],{"class":179},[162,139564,137137],{"class":5082},[162,139566,173],{"class":168},[162,139568,137142],{"class":179},[162,139570,54380],{"class":168},[19,139572,139573],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[153,139575,139577],{"className":129610,"code":139576,"language":129612,"meta":158,"style":158},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[71,139578,139579,139584,139590,139614,139619,139624],{"__ignoreMap":158},[162,139580,139581],{"class":164,"line":165},[162,139582,139583],{"class":361},"\u002F* 2D 位移 *\u002F\n",[162,139585,139586,139588],{"class":164,"line":197},[162,139587,54683],{"class":54373},[162,139589,1722],{"class":168},[162,139591,139592,139595,139597,139600,139602,139604,139606,139608,139610,139612],{"class":164,"line":228},[162,139593,139594],{"class":207},"  transform",[162,139596,1730],{"class":168},[162,139598,139599],{"class":207},"translate",[162,139601,604],{"class":168},[162,139603,3608],{"class":207},[162,139605,54564],{"class":172},[162,139607,183],{"class":168},[162,139609,3941],{"class":207},[162,139611,54564],{"class":172},[162,139613,5836],{"class":168},[162,139615,139616],{"class":164,"line":252},[162,139617,139618],{"class":361},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[162,139620,139621],{"class":164,"line":328},[162,139622,139623],{"class":361},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[162,139625,139626],{"class":164,"line":466},[162,139627,1498],{"class":168},[19,139629,139630],{},"muted:自动静音属性",[25089,139632,139634],{"id":139633},"_14122-音频标签audio","14.1.2.2 音频标签audio",[1452,139636,139637],{},[1455,139638,139639],{},"基本使用",[19,139641,139642,139643,139648,139649],{},"当前 ",[3453,139644,139645],{},[71,139646,139647],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[3453,139650,139651],{},"mp3格式",[4602,139653],{"style":129466,"src":139654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[1452,139656,139657],{"start":197},[1455,139658,139493],{},[153,139660,139661],{"className":130357,"code":139456,"language":130359,"meta":158,"style":158},[71,139662,139663],{"__ignoreMap":158},[162,139664,139665,139667,139669,139671,139673,139675,139677,139679,139681,139683,139685,139687],{"class":164,"line":165},[162,139666,4187],{"class":168},[162,139668,31272],{"class":54373},[162,139670,58309],{"class":5082},[162,139672,173],{"class":168},[162,139674,139471],{"class":179},[162,139676,95488],{"class":5082},[162,139678,139476],{"class":5082},[162,139680,139479],{"class":5082},[162,139682,139482],{"class":5082},[162,139684,58384],{"class":168},[162,139686,31272],{"class":54373},[162,139688,54380],{"class":168},[19,139690,139691],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[1452,139693,139694],{"start":228},[1455,139695,139696],{},"常用属性",[4602,139698],{"style":129466,"src":139699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[153,139701,139702],{"className":130357,"code":139456,"language":130359,"meta":158,"style":158},[71,139703,139704],{"__ignoreMap":158},[162,139705,139706,139708,139710,139712,139714,139716,139718,139720,139722,139724,139726,139728],{"class":164,"line":165},[162,139707,4187],{"class":168},[162,139709,31272],{"class":54373},[162,139711,58309],{"class":5082},[162,139713,173],{"class":168},[162,139715,139471],{"class":179},[162,139717,95488],{"class":5082},[162,139719,139476],{"class":5082},[162,139721,139479],{"class":5082},[162,139723,139482],{"class":5082},[162,139725,58384],{"class":168},[162,139727,31272],{"class":54373},[162,139729,54380],{"class":168},[19,139731,139732],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[25089,139734,139736],{"id":139735},"_14123-总结","14.1.2.3 总结",[4279,139738,139739,139742,139745,139748,139751],{},[1455,139740,139741],{},"音频标签和视频标签使用方式基本一致",[1455,139743,139744],{},"浏览器支持情况不同",[1455,139746,139747],{},"谷歌浏览器把音频和视频自动播放禁止了",[1455,139749,139750],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[1455,139752,139753],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[3284,139755,139757],{"id":139756},"_1413-表单元素","14.1.3 表单元素",[25089,139759,139761],{"id":139760},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[4602,139763],{"style":129466,"src":139764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[153,139766,139768],{"className":130357,"code":139767,"language":130359,"meta":158,"style":158},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[71,139769,139770],{"__ignoreMap":158},[162,139771,139772,139774,139776,139778,139780,139782,139784,139786,139789,139791,139793,139796],{"class":164,"line":165},[162,139773,4187],{"class":168},[162,139775,56891],{"class":54373},[162,139777,56894],{"class":5082},[162,139779,173],{"class":168},[162,139781,65766],{"class":179},[162,139783,18013],{"class":5082},[162,139785,173],{"class":168},[162,139787,139788],{"class":179},"\"username\"",[162,139790,64088],{"class":5082},[162,139792,173],{"class":168},[162,139794,139795],{"class":179},"\"请输入用户名\"",[162,139797,54380],{"class":168},[4602,139799],{"style":129466,"src":139800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[25089,139802,139804],{"id":139803},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[4602,139806],{"style":129466,"src":139807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,139809,139810],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,139812,139813],{},"快捷操作：",[4602,139815],{"style":129466,"src":139816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,139818,139819],{},"例子1：",[153,139821,139823],{"className":130357,"code":139822,"language":130359,"meta":158,"style":158},"\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",[71,139824,139825,139848,139875,139904,139923],{"__ignoreMap":158},[162,139826,139827,139829,139831,139833,139835,139838,139841,139843,139846],{"class":164,"line":165},[162,139828,4187],{"class":168},[162,139830,69692],{"class":54373},[162,139832,69695],{"class":5082},[162,139834,173],{"class":168},[162,139836,139837],{"class":179},"\"\u002Fsubmit\"",[162,139839,139840],{"class":5082}," method",[162,139842,173],{"class":168},[162,139844,139845],{"class":179},"\"post\"",[162,139847,54380],{"class":168},[162,139849,139850,139852,139854,139856,139858,139860,139862,139864,139866,139868,139870,139873],{"class":164,"line":197},[162,139851,55215],{"class":168},[162,139853,56891],{"class":54373},[162,139855,56894],{"class":5082},[162,139857,173],{"class":168},[162,139859,65766],{"class":179},[162,139861,18013],{"class":5082},[162,139863,173],{"class":168},[162,139865,139788],{"class":179},[162,139867,64088],{"class":5082},[162,139869,173],{"class":168},[162,139871,139872],{"class":179},"\"用户名\"",[162,139874,54380],{"class":168},[162,139876,139877,139879,139881,139883,139885,139888,139890,139892,139895,139897,139899,139902],{"class":164,"line":228},[162,139878,55215],{"class":168},[162,139880,56891],{"class":54373},[162,139882,56894],{"class":5082},[162,139884,173],{"class":168},[162,139886,139887],{"class":179},"\"password\"",[162,139889,18013],{"class":5082},[162,139891,173],{"class":168},[162,139893,139894],{"class":179},"\"pwd\"",[162,139896,64088],{"class":5082},[162,139898,173],{"class":168},[162,139900,139901],{"class":179},"\"密码\"",[162,139903,54380],{"class":168},[162,139905,139906,139908,139910,139912,139914,139916,139919,139921],{"class":164,"line":252},[162,139907,55215],{"class":168},[162,139909,56957],{"class":54373},[162,139911,56894],{"class":5082},[162,139913,173],{"class":168},[162,139915,69715],{"class":179},[162,139917,139918],{"class":168},">提交\u003C\u002F",[162,139920,56957],{"class":54373},[162,139922,54380],{"class":168},[162,139924,139925,139927,139929],{"class":164,"line":328},[162,139926,54857],{"class":168},[162,139928,69692],{"class":54373},[162,139930,54380],{"class":168},[4602,139932],{"style":129466,"src":139933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,139935,139936],{},"value是表单域的内容",[19,139938,139939],{},"例子2：",[153,139941,139942],{"className":130357,"code":139822,"language":130359,"meta":158,"style":158},[71,139943,139944,139964,139990,140016,140034],{"__ignoreMap":158},[162,139945,139946,139948,139950,139952,139954,139956,139958,139960,139962],{"class":164,"line":165},[162,139947,4187],{"class":168},[162,139949,69692],{"class":54373},[162,139951,69695],{"class":5082},[162,139953,173],{"class":168},[162,139955,139837],{"class":179},[162,139957,139840],{"class":5082},[162,139959,173],{"class":168},[162,139961,139845],{"class":179},[162,139963,54380],{"class":168},[162,139965,139966,139968,139970,139972,139974,139976,139978,139980,139982,139984,139986,139988],{"class":164,"line":197},[162,139967,55215],{"class":168},[162,139969,56891],{"class":54373},[162,139971,56894],{"class":5082},[162,139973,173],{"class":168},[162,139975,65766],{"class":179},[162,139977,18013],{"class":5082},[162,139979,173],{"class":168},[162,139981,139788],{"class":179},[162,139983,64088],{"class":5082},[162,139985,173],{"class":168},[162,139987,139872],{"class":179},[162,139989,54380],{"class":168},[162,139991,139992,139994,139996,139998,140000,140002,140004,140006,140008,140010,140012,140014],{"class":164,"line":228},[162,139993,55215],{"class":168},[162,139995,56891],{"class":54373},[162,139997,56894],{"class":5082},[162,139999,173],{"class":168},[162,140001,139887],{"class":179},[162,140003,18013],{"class":5082},[162,140005,173],{"class":168},[162,140007,139894],{"class":179},[162,140009,64088],{"class":5082},[162,140011,173],{"class":168},[162,140013,139901],{"class":179},[162,140015,54380],{"class":168},[162,140017,140018,140020,140022,140024,140026,140028,140030,140032],{"class":164,"line":252},[162,140019,55215],{"class":168},[162,140021,56957],{"class":54373},[162,140023,56894],{"class":5082},[162,140025,173],{"class":168},[162,140027,69715],{"class":179},[162,140029,139918],{"class":168},[162,140031,56957],{"class":54373},[162,140033,54380],{"class":168},[162,140035,140036,140038,140040],{"class":164,"line":328},[162,140037,54857],{"class":168},[162,140039,69692],{"class":54373},[162,140041,54380],{"class":168},[4602,140043],{"style":129466,"src":140044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,140046,140048],{"id":140047},"_142-css新特性","14.2 CSS新特性",[3284,140050,140052],{"id":140051},"_1421-新增选择器","14.2.1 新增选择器",[25089,140054,140056],{"id":140055},"_14211-属性选择器","14.2.1.1 属性选择器",[4602,140058],{"style":129466,"src":140059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[153,140061,140063],{"className":129610,"code":140062,"language":129612,"meta":158,"style":158},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[71,140064,140065,140080,140096],{"__ignoreMap":158},[162,140066,140067,140069,140071,140073,140075,140077],{"class":164,"line":165},[162,140068,56891],{"class":54373},[162,140070,4168],{"class":168},[162,140072,1083],{"class":5082},[162,140074,173],{"class":172},[162,140076,65766],{"class":179},[162,140078,140079],{"class":168},"] {\n",[162,140081,140082,140084,140086,140088,140090,140092,140094],{"class":164,"line":197},[162,140083,73961],{"class":207},[162,140085,1730],{"class":168},[162,140087,208],{"class":207},[162,140089,54564],{"class":172},[162,140091,54593],{"class":207},[162,140093,133190],{"class":207},[162,140095,4433],{"class":168},[162,140097,140098],{"class":164,"line":228},[162,140099,1498],{"class":168},[4602,140101],{"style":129466,"src":140102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,140104,3344],{},[4279,140106,140107,140110,140113,140116],{},[1455,140108,140109],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[1455,140111,140112],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[1455,140114,140115],{},"属性选择器也可以选择出来自定义的属性",[1455,140117,140118,140120],{},[3453,140119,1529],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[25089,140122,140124],{"id":140123},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[4602,140126],{"style":129466,"src":140127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[1452,140129,140130],{},[1455,140131,140132],{},"fist-child",[153,140134,140136],{"className":129610,"code":140135,"language":129612,"meta":158,"style":158},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[71,140137,140138,140143,140158,140178,140196],{"__ignoreMap":158},[162,140139,140140],{"class":164,"line":165},[162,140141,140142],{"class":361},"\u002F* 属性选择器 *\u002F\n",[162,140144,140145,140147,140149,140151,140153,140155],{"class":164,"line":197},[162,140146,56891],{"class":54373},[162,140148,4168],{"class":168},[162,140150,1083],{"class":5082},[162,140152,173],{"class":172},[162,140154,65766],{"class":179},[162,140156,140157],{"class":168},"] { }\n",[162,140159,140160,140162,140164,140166,140169,140172,140175],{"class":164,"line":228},[162,140161,56891],{"class":54373},[162,140163,4168],{"class":168},[162,140165,17788],{"class":5082},[162,140167,140168],{"class":172},"^=",[162,140170,140171],{"class":179},"\"icon\"",[162,140173,140174],{"class":168},"] { }  ",[162,140176,140177],{"class":361},"\u002F* 以 icon 开头 *\u002F\n",[162,140179,140180,140182,140184,140186,140189,140191,140193],{"class":164,"line":252},[162,140181,56891],{"class":54373},[162,140183,4168],{"class":168},[162,140185,17788],{"class":5082},[162,140187,140188],{"class":172},"$=",[162,140190,140171],{"class":179},[162,140192,140174],{"class":168},[162,140194,140195],{"class":361},"\u002F* 以 icon 结尾 *\u002F\n",[162,140197,140198,140200,140202,140204,140207,140209,140211],{"class":164,"line":328},[162,140199,56891],{"class":54373},[162,140201,4168],{"class":168},[162,140203,17788],{"class":5082},[162,140205,140206],{"class":172},"*=",[162,140208,140171],{"class":179},[162,140210,140174],{"class":168},[162,140212,140213],{"class":361},"\u002F* 包含 icon *\u002F\n",[19,140215,140216],{},"ul的第一个儿子文本为红色",[19,140218,140219],{},"一定要在冒号前加空格，不然就是选中所有的了",[153,140221,140223],{"className":129610,"code":140222,"language":129612,"meta":158,"style":158},".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",[71,140224,140225,140231,140241,140245,140249,140254,140267,140280,140296,140313,140330],{"__ignoreMap":158},[162,140226,140227,140229],{"class":164,"line":165},[162,140228,129901],{"class":5082},[162,140230,1722],{"class":168},[162,140232,140233,140235,140237,140239],{"class":164,"line":197},[162,140234,73970],{"class":207},[162,140236,1730],{"class":168},[162,140238,60490],{"class":207},[162,140240,4433],{"class":168},[162,140242,140243],{"class":164,"line":228},[162,140244,1498],{"class":168},[162,140246,140247],{"class":164,"line":252},[162,140248,139071],{"class":168},[162,140250,140251],{"class":164,"line":328},[162,140252,140253],{"class":361},"\u002F* 结构伪类选择器 *\u002F\n",[162,140255,140256,140258,140261,140264],{"class":164,"line":466},[162,140257,1455],{"class":54373},[162,140259,140260],{"class":5082},":first-child",[162,140262,140263],{"class":168}," { }           ",[162,140265,140266],{"class":361},"\u002F* 第一个 *\u002F\n",[162,140268,140269,140271,140274,140277],{"class":164,"line":471},[162,140270,1455],{"class":54373},[162,140272,140273],{"class":5082},":last-child",[162,140275,140276],{"class":168}," { }            ",[162,140278,140279],{"class":361},"\u002F* 最后一个 *\u002F\n",[162,140281,140282,140284,140286,140288,140290,140293],{"class":164,"line":687},[162,140283,1455],{"class":54373},[162,140285,132524],{"class":5082},[162,140287,604],{"class":168},[162,140289,213],{"class":207},[162,140291,140292],{"class":168},") { }          ",[162,140294,140295],{"class":361},"\u002F* 第2个 *\u002F\n",[162,140297,140298,140300,140302,140304,140307,140310],{"class":164,"line":692},[162,140299,1455],{"class":54373},[162,140301,132524],{"class":5082},[162,140303,604],{"class":168},[162,140305,140306],{"class":207},"2n",[162,140308,140309],{"class":168},") { }         ",[162,140311,140312],{"class":361},"\u002F* 偶数 *\u002F\n",[162,140314,140315,140317,140319,140321,140324,140327],{"class":164,"line":698},[162,140316,1455],{"class":54373},[162,140318,132524],{"class":5082},[162,140320,604],{"class":168},[162,140322,140323],{"class":207},"2n+1",[162,140325,140326],{"class":168},") { }       ",[162,140328,140329],{"class":361},"\u002F* 奇数 *\u002F\n",[162,140331,140332,140334,140336,140338,140341,140343],{"class":164,"line":2955},[162,140333,1455],{"class":54373},[162,140335,132524],{"class":5082},[162,140337,604],{"class":168},[162,140339,140340],{"class":207},"-n+3",[162,140342,140326],{"class":168},[162,140344,140345],{"class":361},"\u002F* 前3个 *\u002F\n",[54683,140347,140350],{"className":140348},[140349],"example","\n  示例内容\n",[19,140352,140353],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[4279,140355,140356],{},[1455,140357,140358,140361],{},[71,140359,140360],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,140363,140364],{},"也就是说它选择的是熊大",[1452,140366,140367],{"start":466},[1455,140368,140369],{},"权重",[153,140371,140373],{"className":129610,"code":140372,"language":129612,"meta":158,"style":158},"\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",[71,140374,140375,140379,140389,140399,140413,140427,140441],{"__ignoreMap":158},[162,140376,140377],{"class":164,"line":165},[162,140378,140253],{"class":361},[162,140380,140381,140383,140385,140387],{"class":164,"line":197},[162,140382,1455],{"class":54373},[162,140384,140260],{"class":5082},[162,140386,140263],{"class":168},[162,140388,140266],{"class":361},[162,140390,140391,140393,140395,140397],{"class":164,"line":228},[162,140392,1455],{"class":54373},[162,140394,140273],{"class":5082},[162,140396,140276],{"class":168},[162,140398,140279],{"class":361},[162,140400,140401,140403,140405,140407,140409,140411],{"class":164,"line":252},[162,140402,1455],{"class":54373},[162,140404,132524],{"class":5082},[162,140406,604],{"class":168},[162,140408,213],{"class":207},[162,140410,140292],{"class":168},[162,140412,140295],{"class":361},[162,140414,140415,140417,140419,140421,140423,140425],{"class":164,"line":328},[162,140416,1455],{"class":54373},[162,140418,132524],{"class":5082},[162,140420,604],{"class":168},[162,140422,140306],{"class":207},[162,140424,140309],{"class":168},[162,140426,140312],{"class":361},[162,140428,140429,140431,140433,140435,140437,140439],{"class":164,"line":466},[162,140430,1455],{"class":54373},[162,140432,132524],{"class":5082},[162,140434,604],{"class":168},[162,140436,140323],{"class":207},[162,140438,140326],{"class":168},[162,140440,140329],{"class":361},[162,140442,140443,140445,140447,140449,140451,140453],{"class":164,"line":471},[162,140444,1455],{"class":54373},[162,140446,132524],{"class":5082},[162,140448,604],{"class":168},[162,140450,140340],{"class":207},[162,140452,140326],{"class":168},[162,140454,140345],{"class":361},[19,140456,140457],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[25089,140459,140461],{"id":140460},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,140463,140464],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[4602,140466],{"style":129466,"src":140467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[1452,140469,140470],{},[1455,140471,3344],{},[4279,140473,140474,140477,140480,140483,140486,140489],{},[1455,140475,140476],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[1455,140478,140479],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[1455,140481,140482],{},"语法： element::before {}",[1455,140484,140485],{},"before 和 after 必须有 content 属性",[1455,140487,140488],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[1455,140490,140491],{},"伪元素选择器和标签选择器一样，权重为 1",[1452,140493,140494],{"start":197},[1455,140495,140496],{},"实例",[153,140498,140499],{"className":129610,"code":140372,"language":129612,"meta":158,"style":158},[71,140500,140501,140505,140515,140525,140539,140553,140567],{"__ignoreMap":158},[162,140502,140503],{"class":164,"line":165},[162,140504,140253],{"class":361},[162,140506,140507,140509,140511,140513],{"class":164,"line":197},[162,140508,1455],{"class":54373},[162,140510,140260],{"class":5082},[162,140512,140263],{"class":168},[162,140514,140266],{"class":361},[162,140516,140517,140519,140521,140523],{"class":164,"line":228},[162,140518,1455],{"class":54373},[162,140520,140273],{"class":5082},[162,140522,140276],{"class":168},[162,140524,140279],{"class":361},[162,140526,140527,140529,140531,140533,140535,140537],{"class":164,"line":252},[162,140528,1455],{"class":54373},[162,140530,132524],{"class":5082},[162,140532,604],{"class":168},[162,140534,213],{"class":207},[162,140536,140292],{"class":168},[162,140538,140295],{"class":361},[162,140540,140541,140543,140545,140547,140549,140551],{"class":164,"line":328},[162,140542,1455],{"class":54373},[162,140544,132524],{"class":5082},[162,140546,604],{"class":168},[162,140548,140306],{"class":207},[162,140550,140309],{"class":168},[162,140552,140312],{"class":361},[162,140554,140555,140557,140559,140561,140563,140565],{"class":164,"line":466},[162,140556,1455],{"class":54373},[162,140558,132524],{"class":5082},[162,140560,604],{"class":168},[162,140562,140323],{"class":207},[162,140564,140326],{"class":168},[162,140566,140329],{"class":361},[162,140568,140569,140571,140573,140575,140577,140579],{"class":164,"line":471},[162,140570,1455],{"class":54373},[162,140572,132524],{"class":5082},[162,140574,604],{"class":168},[162,140576,140340],{"class":207},[162,140578,140326],{"class":168},[162,140580,140345],{"class":361},[4602,140582],{"style":129466,"src":140583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[1452,140585,140586],{"start":228},[1455,140587,140588],{},"使用场景1",[4602,140590],{"style":129466,"src":140591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,140593,140594],{},"不需要再加盒子来整红色那部分了",[153,140596,140598],{"className":129610,"code":140597,"language":129612,"meta":158,"style":158},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[71,140599,140600,140605,140614,140625,140635,140639,140648,140659,140669],{"__ignoreMap":158},[162,140601,140602],{"class":164,"line":165},[162,140603,140604],{"class":361},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[162,140606,140607,140609,140612],{"class":164,"line":197},[162,140608,54683],{"class":54373},[162,140610,140611],{"class":5082},"::before",[162,140613,1722],{"class":168},[162,140615,140616,140619,140621,140623],{"class":164,"line":228},[162,140617,140618],{"class":207},"  content",[162,140620,1730],{"class":168},[162,140622,10756],{"class":179},[162,140624,4433],{"class":168},[162,140626,140627,140629,140631,140633],{"class":164,"line":252},[162,140628,131226],{"class":207},[162,140630,1730],{"class":168},[162,140632,63937],{"class":207},[162,140634,4433],{"class":168},[162,140636,140637],{"class":164,"line":328},[162,140638,1498],{"class":168},[162,140640,140641,140643,140646],{"class":164,"line":466},[162,140642,54683],{"class":54373},[162,140644,140645],{"class":5082},"::after",[162,140647,1722],{"class":168},[162,140649,140650,140652,140654,140657],{"class":164,"line":471},[162,140651,140618],{"class":207},[162,140653,1730],{"class":168},[162,140655,140656],{"class":179},"\"→\"",[162,140658,4433],{"class":168},[162,140660,140661,140663,140665,140667],{"class":164,"line":687},[162,140662,73970],{"class":207},[162,140664,1730],{"class":168},[162,140666,65138],{"class":207},[162,140668,4433],{"class":168},[162,140670,140671],{"class":164,"line":692},[162,140672,1498],{"class":168},[4602,140674],{"style":129466,"src":140675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,140677,140678],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[4602,140680],{"style":129466,"src":140681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,140683,140684],{},"但是在引用时需要先转义一下",[19,140686,140687],{},"content='\\e930'",[1452,140689,140690],{"start":252},[1455,140691,140692],{},"使用场景2",[19,140694,140695],{},"仿土豆效果",[19,140697,140698],{},"通过使用伪元素选择器可以减少body中盒子的数量",[153,140700,140701],{"className":129610,"code":140597,"language":129612,"meta":158,"style":158},[71,140702,140703,140707,140715,140725,140735,140739,140747,140757,140767],{"__ignoreMap":158},[162,140704,140705],{"class":164,"line":165},[162,140706,140604],{"class":361},[162,140708,140709,140711,140713],{"class":164,"line":197},[162,140710,54683],{"class":54373},[162,140712,140611],{"class":5082},[162,140714,1722],{"class":168},[162,140716,140717,140719,140721,140723],{"class":164,"line":228},[162,140718,140618],{"class":207},[162,140720,1730],{"class":168},[162,140722,10756],{"class":179},[162,140724,4433],{"class":168},[162,140726,140727,140729,140731,140733],{"class":164,"line":252},[162,140728,131226],{"class":207},[162,140730,1730],{"class":168},[162,140732,63937],{"class":207},[162,140734,4433],{"class":168},[162,140736,140737],{"class":164,"line":328},[162,140738,1498],{"class":168},[162,140740,140741,140743,140745],{"class":164,"line":466},[162,140742,54683],{"class":54373},[162,140744,140645],{"class":5082},[162,140746,1722],{"class":168},[162,140748,140749,140751,140753,140755],{"class":164,"line":471},[162,140750,140618],{"class":207},[162,140752,1730],{"class":168},[162,140754,140656],{"class":179},[162,140756,4433],{"class":168},[162,140758,140759,140761,140763,140765],{"class":164,"line":687},[162,140760,73970],{"class":207},[162,140762,1730],{"class":168},[162,140764,65138],{"class":207},[162,140766,4433],{"class":168},[162,140768,140769],{"class":164,"line":692},[162,140770,1498],{"class":168},[4602,140772],{"style":129466,"src":140773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[1452,140775,140776],{"start":328},[1455,140777,140778],{},"使用场景3",[19,140780,140781],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[153,140783,140785],{"className":129610,"code":140784,"language":129612,"meta":158,"style":158},".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",[71,140786,140787,140793,140803,140807,140811,140815,140823,140833,140843,140847,140855,140865,140875],{"__ignoreMap":158},[162,140788,140789,140791],{"class":164,"line":165},[162,140790,133458],{"class":5082},[162,140792,1722],{"class":168},[162,140794,140795,140797,140799,140801],{"class":164,"line":197},[162,140796,134090],{"class":207},[162,140798,1730],{"class":168},[162,140800,26827],{"class":207},[162,140802,4433],{"class":168},[162,140804,140805],{"class":164,"line":228},[162,140806,1498],{"class":168},[162,140808,140809],{"class":164,"line":252},[162,140810,139071],{"class":168},[162,140812,140813],{"class":164,"line":328},[162,140814,140604],{"class":361},[162,140816,140817,140819,140821],{"class":164,"line":466},[162,140818,54683],{"class":54373},[162,140820,140611],{"class":5082},[162,140822,1722],{"class":168},[162,140824,140825,140827,140829,140831],{"class":164,"line":471},[162,140826,140618],{"class":207},[162,140828,1730],{"class":168},[162,140830,10756],{"class":179},[162,140832,4433],{"class":168},[162,140834,140835,140837,140839,140841],{"class":164,"line":687},[162,140836,131226],{"class":207},[162,140838,1730],{"class":168},[162,140840,63937],{"class":207},[162,140842,4433],{"class":168},[162,140844,140845],{"class":164,"line":692},[162,140846,1498],{"class":168},[162,140848,140849,140851,140853],{"class":164,"line":698},[162,140850,54683],{"class":54373},[162,140852,140645],{"class":5082},[162,140854,1722],{"class":168},[162,140856,140857,140859,140861,140863],{"class":164,"line":2955},[162,140858,140618],{"class":207},[162,140860,1730],{"class":168},[162,140862,140656],{"class":179},[162,140864,4433],{"class":168},[162,140866,140867,140869,140871,140873],{"class":164,"line":2960},[162,140868,73970],{"class":207},[162,140870,1730],{"class":168},[162,140872,65138],{"class":207},[162,140874,4433],{"class":168},[162,140876,140877],{"class":164,"line":2971},[162,140878,1498],{"class":168},[19,140880,140881],{},"div {\nmargin: 0 auto;\n}",[153,140883,140886],{"className":140884,"code":140885,"language":8295},[8293],"\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",[71,140887,140885],{"__ignoreMap":158},[19,140889,140890],{},"如果想让多个元素都发生变化",[19,140892,140893],{},"不能如下操作：",[19,140895,140896],{},"transition: width 2s ease 0.5s;",[19,140898,140899],{},"transition: height 2s ease 0.5s;不对！！！",[19,140901,140902],{},"上方会样式冲突，导致不显示任何过渡效果",[19,140904,140905],{},"使用如下：加逗号隔开",[19,140907,140908],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,140910,140911],{},"transition all 2s ease;",[3284,140913,140915],{"id":140914},"_1426-过渡练习","14.2.6 过渡练习",[1452,140917,140918],{},[1455,140919,140920],{},"进度条",[4602,140922],{"style":129466,"src":140923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[153,140925,140927],{"className":129610,"code":140926,"language":129612,"meta":158,"style":158},"div {\n  transition: all 0.3s ease;\n}\n",[71,140928,140929,140935,140953],{"__ignoreMap":158},[162,140930,140931,140933],{"class":164,"line":165},[162,140932,54683],{"class":54373},[162,140934,1722],{"class":168},[162,140936,140937,140940,140942,140944,140947,140949,140951],{"class":164,"line":197},[162,140938,140939],{"class":207},"  transition",[162,140941,1730],{"class":168},[162,140943,31210],{"class":207},[162,140945,140946],{"class":207}," 0.3",[162,140948,3979],{"class":172},[162,140950,81745],{"class":207},[162,140952,4433],{"class":168},[162,140954,140955],{"class":164,"line":228},[162,140956,1498],{"class":168},[1452,140958,140959],{"start":197},[1455,140960,140961],{},"小米logo",[19,140963,140964],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[153,140966,140968],{"className":129610,"code":140967,"language":129612,"meta":158,"style":158},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[71,140969,140970,140975,140981,140997,141002],{"__ignoreMap":158},[162,140971,140972],{"class":164,"line":165},[162,140973,140974],{"class":361},"\u002F* CSS3 过渡 *\u002F\n",[162,140976,140977,140979],{"class":164,"line":197},[162,140978,54683],{"class":54373},[162,140980,1722],{"class":168},[162,140982,140983,140985,140987,140989,140991,140993,140995],{"class":164,"line":228},[162,140984,140939],{"class":207},[162,140986,1730],{"class":168},[162,140988,31210],{"class":207},[162,140990,140946],{"class":207},[162,140992,3979],{"class":172},[162,140994,81745],{"class":207},[162,140996,4433],{"class":168},[162,140998,140999],{"class":164,"line":252},[162,141000,141001],{"class":361},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[162,141003,141004],{"class":164,"line":328},[162,141005,1498],{"class":168},[19,141007,141008],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[3219,141010,141011],{},"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":158,"searchDepth":197,"depth":197,"links":141013},[141014,141019],{"id":139344,"depth":197,"text":139345,"children":141015},[141016,141017,141018],{"id":139348,"depth":228,"text":139349},{"id":139425,"depth":228,"text":139426},{"id":139756,"depth":228,"text":139757},{"id":140047,"depth":197,"text":140048,"children":141020},[141021,141022],{"id":140051,"depth":228,"text":140052},{"id":140914,"depth":228,"text":140915},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":139336,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":141029,"title":141030,"body":141031,"description":3241,"extension":3242,"meta":142775,"navigation":300,"path":142776,"seo":142777,"stem":142778,"__hash__":142779},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":141032,"toc":142756},[141033,141036,141040,141043,141049,141055,141059,141061,141064,141067,141070,141073,141076,141079,141082,141086,141090,141093,141096,141099,141103,141106,141109,141114,141117,141120,141123,141127,141130,141139,141142,141145,141149,141152,141155,141160,141167,141181,141189,141196,141201,141204,141207,141210,141217,141221,141227,141233,141236,141239,141244,141250,141252,141260,141265,141268,141274,141276,141281,141286,141289,141291,141296,141299,141304,141309,141343,141347,141351,141354,141358,141361,141447,141450,141487,141490,141526,141530,141535,141548,141602,141604,141632,141634,141662,141668,141682,141684,141728,141730,141774,141777,141784,141795,141797,141824,141826,141852,141859,141875,141877,141971,141973,142067,142074,142077,142082,142088,142162,142165,142167,142203,142205,142241,142244,142251,142270,142273,142276,142278,142303,142305,142329,142332,142335,142365,142369,142372,142435,142437,142503,142505,142569,142572,142604,142606,142632,142634,142660,142663,142694,142696,142722,142724,142750,142753],[10,141034,141030],{"id":141035},"_15-品优购项目上篇-搭建与公共模块",[14,141037,141039],{"id":141038},"_151-项目规划","15.1 项目规划",[4602,141041],{"style":129466,"src":141042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,141044,141045,141048],{},[3453,141046,141047],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,141050,141051,141054],{},[3453,141052,141053],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,141056,141058],{"id":141057},"_152-项目介绍","15.2 项目介绍",[19,141060,141047],{},[4602,141062],{"style":129466,"src":141063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,141065,141066],{},"主页：",[4602,141068],{"style":129466,"src":141069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,141071,141072],{},"列表页：",[4602,141074],{"style":129466,"src":141075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,141077,141078],{},"注册页：",[4602,141080],{"style":129466,"src":141081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,141083,141085],{"id":141084},"_153-项目搭建工作","15.3 项目搭建工作",[3284,141087,141089],{"id":141088},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[4602,141091],{"style":129466,"src":141092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,141094,141095],{},"经常更换的图片要放到upload文件夹中",[19,141097,141098],{},"不经常换的放到images文件夹中",[3284,141100,141102],{"id":141101},"_1532-创建文件如下","15.3.2 创建文件如下",[4602,141104],{"style":129466,"src":141105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[4602,141107],{"style":129466,"src":141108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,141110,141111],{},[3453,141112,141113],{},"初始化样式：",[19,141115,141116],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,141118,141119],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,141121,141122],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[3284,141124,141126],{"id":141125},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,141128,141129],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,141131,141132,141133,141138],{},"这里最典型的应用就是 ",[3453,141134,141135],{},[71,141136,141137],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[4602,141140],{"style":129466,"src":141141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,141143,141144],{},"通过link方法来引入",[3284,141146,141148],{"id":141147},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[4602,141150],{"style":129466,"src":141151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,141153,141154],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[1452,141156,141157],{},[1455,141158,141159],{},"制作favicon图标",[19,141161,141162,141163,141166],{},"①把品优购图标切成 ",[71,141164,141165],{},"png"," 图片",[19,141168,141169,141170,141172,141173,141176,141177],{},"②把 ",[71,141171,141165],{}," 图片转换为 ",[71,141174,141175],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[3538,141178,141179],{"href":141179,"rel":141180},"http:\u002F\u002Fwww.bitbug.net\u002F",[26956],[1452,141182,141183,141186],{"start":197},[1455,141184,141185],{},"favicon图标放到网站根目录下",[1455,141187,141188],{},"HTML页面引入favicon",[19,141190,141191,141192,141195],{},"在html 页面里面的 ",[71,141193,141194],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,141197,141198],{},[71,141199,141200],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,141202,141203],{},"复制这行代码或者在生成这个的网站进行复制",[4602,141205],{"style":129466,"src":141206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,141208,141209],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,141211,141212,141213],{},"例如:",[3538,141214,141215],{"href":141215,"rel":141216},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[26956],[3284,141218,141220],{"id":141219},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,141222,141223,141226],{},[3453,141224,141225],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,141228,141229,141232],{},[3453,141230,141231],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,141234,141235],{},"页面必须有三个标签用来符合 SEO 优化",[4602,141237],{"style":129466,"src":141238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[1452,141240,141241],{},[1455,141242,141243],{},"title网站标题",[19,141245,141246,141249],{},[3453,141247,141248],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,141251,71857],{},[4279,141253,141254,141257],{},[1455,141255,141256],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[1455,141258,141259],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[1452,141261,141262],{"start":197},[1455,141263,141264],{},"description网站描述",[19,141266,141267],{},"简要说明我们网站主要是做什么的",[19,141269,141270,141273],{},[3453,141271,141272],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,141275,71857],{},[19,141277,141278],{},[71,141279,141280],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[1452,141282,141283],{"start":228},[1455,141284,141285],{},"keywords关键词",[19,141287,141288],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,141290,71857],{},[19,141292,141293],{},[71,141294,141295],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,141297,141298],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,141300,141301],{},[3453,141302,141303],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[1452,141305,141306],{"start":252},[1455,141307,141308],{},"代码总结",[153,141310,141311],{"className":130357,"code":133714,"language":130359,"meta":158,"style":158},[71,141312,141313,141317,141331,141335],{"__ignoreMap":158},[162,141314,141315],{"class":164,"line":165},[162,141316,133721],{"class":361},[162,141318,141319,141321,141323,141325,141327,141329],{"class":164,"line":197},[162,141320,4187],{"class":168},[162,141322,54683],{"class":54373},[162,141324,56556],{"class":5082},[162,141326,173],{"class":168},[162,141328,133734],{"class":179},[162,141330,54380],{"class":168},[162,141332,141333],{"class":164,"line":228},[162,141334,133741],{"class":168},[162,141336,141337,141339,141341],{"class":164,"line":252},[162,141338,54857],{"class":168},[162,141340,54683],{"class":54373},[162,141342,54380],{"class":168},[14,141344,141346],{"id":141345},"_154-项目公共部分制作","15.4 项目公共部分制作",[3284,141348,141350],{"id":141349},"_1541-常用模块类命名","15.4.1 常用模块类命名",[4602,141352],{"style":129466,"src":141353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[3284,141355,141357],{"id":141356},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,141359,141360],{},"布局思路：",[4279,141362,141363,141366,141369,141391,141424],{},[1455,141364,141365],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[1455,141367,141368],{},"里面包含版心的盒子",[1455,141370,141371,141372],{},"版心盒子里面包含 1 号左侧盒子左浮动",[4279,141373,141374,141382,141388],{},[1455,141375,141376,141377,24591,141379,141381],{},"1 号盒子 里面包含一个",[71,141378,4279],{},[71,141380,4279],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[1455,141383,141384,141385,141387],{},"里面的内容是水平排列，所以需要给",[71,141386,1455],{},"设置浮动",[1455,141389,141390],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[1455,141392,141393,141394],{},"版心盒子里面包含 2 号右侧盒子右浮动",[4279,141395,141396,141410,141415],{},[1455,141397,141398,141399,24591,141401,141403,141404,141406,141407,141409],{},"2 号盒子 里面包含一个",[71,141400,4279],{},[71,141402,4279],{},"包裹",[71,141405,1455],{},"，中间的",[71,141408,1682],{},"可以用样式去设置，也可以用字符 |",[1455,141411,141412,141413,141387],{},"里面内容水平排列，给",[71,141414,1455],{},[1455,141416,141417,141418,141420,141421,141423],{},"找到里面所有偶数的 ",[71,141419,1455],{}," 设置样式（偶数的 ",[71,141422,1455],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[1455,141425,141426,141427],{},"需要用到字体图标",[4279,141428,141429,141435,141438,141441,141444],{},[1455,141430,141431,141432],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[71,141433,141434],{},"arrow-icon",[1455,141436,141437],{},"先要引入字体图片的资源",[1455,141439,141440],{},"在样式里面利用 font-face 来进行声明",[1455,141442,141443],{},"在伪元素的 content属性设置 图标的编码",[1455,141445,141446],{},"给伪元素设置font-family属性",[19,141448,141449],{},"结构实例代码：",[153,141451,141453],{"className":129610,"code":141452,"language":129612,"meta":158,"style":158},"div::before {\n  content: \"\";\n  display: block;\n}\n",[71,141454,141455,141463,141473,141483],{"__ignoreMap":158},[162,141456,141457,141459,141461],{"class":164,"line":165},[162,141458,54683],{"class":54373},[162,141460,140611],{"class":5082},[162,141462,1722],{"class":168},[162,141464,141465,141467,141469,141471],{"class":164,"line":197},[162,141466,140618],{"class":207},[162,141468,1730],{"class":168},[162,141470,10756],{"class":179},[162,141472,4433],{"class":168},[162,141474,141475,141477,141479,141481],{"class":164,"line":228},[162,141476,131226],{"class":207},[162,141478,1730],{"class":168},[162,141480,63937],{"class":207},[162,141482,4433],{"class":168},[162,141484,141485],{"class":164,"line":252},[162,141486,1498],{"class":168},[19,141488,141489],{},"样式实例代码：",[153,141491,141492],{"className":129610,"code":141452,"language":129612,"meta":158,"style":158},[71,141493,141494,141502,141512,141522],{"__ignoreMap":158},[162,141495,141496,141498,141500],{"class":164,"line":165},[162,141497,54683],{"class":54373},[162,141499,140611],{"class":5082},[162,141501,1722],{"class":168},[162,141503,141504,141506,141508,141510],{"class":164,"line":197},[162,141505,140618],{"class":207},[162,141507,1730],{"class":168},[162,141509,10756],{"class":179},[162,141511,4433],{"class":168},[162,141513,141514,141516,141518,141520],{"class":164,"line":228},[162,141515,131226],{"class":207},[162,141517,1730],{"class":168},[162,141519,63937],{"class":207},[162,141521,4433],{"class":168},[162,141523,141524],{"class":164,"line":252},[162,141525,1498],{"class":168},[3284,141527,141529],{"id":141528},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[4279,141531,141532],{},[1455,141533,141534],{},"header 盒子必须要有高度",[19,141536,141537,141538,141540,141541],{},"1 号盒子是 ",[71,141539,134622],{}," 标志定位，在正常开发过程中， ",[3453,141542,141543,141544,141547],{},"logo的布局其实是有讲究的，需要进行 ",[71,141545,141546],{},"logoSEO","的优化 （★★★）",[4279,141549,141550,141558,141566,141593],{},[1455,141551,141552,141554,141555,141557],{},[71,141553,134622],{}," 里面首先放一个 ",[71,141556,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[1455,141559,141560,141562,141563,141565],{},[71,141561,10],{}," 里面再放一个链接，可以返回首页的，把 ",[71,141564,134622],{}," 的背景图片给链接即可",[1455,141567,141568,141569],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[4279,141570,141571,141586],{},[1455,141572,141573,141574,141577,141578,141581,141582,141585],{},"方法1：",[71,141575,141576],{},"text-indent"," 移到盒子外面（",[71,141579,141580],{},"text-indent: -9999px",") ，然后 ",[71,141583,141584],{},"overflow:hidden"," ，淘宝的做法",[1455,141587,141588,141589,141592],{},"方法2：直接给 ",[71,141590,141591],{},"font-size: 0;"," 就看不到文字了，京东的做法",[1455,141594,141595,141596,141598,141599,141601],{},"最后给链接一个 ",[71,141597,54480],{}," 属性，这样鼠标放到 ",[71,141600,134622],{}," 上就可以看到提示文字了",[19,141603,141449],{},[153,141605,141606],{"className":130357,"code":134843,"language":130359,"meta":158,"style":158},[71,141607,141608],{"__ignoreMap":158},[162,141609,141610,141612,141614,141616,141618,141620,141622,141624,141626,141628,141630],{"class":164,"line":165},[162,141611,4187],{"class":168},[162,141613,3538],{"class":54373},[162,141615,64125],{"class":5082},[162,141617,173],{"class":168},[162,141619,134858],{"class":179},[162,141621,134861],{"class":5082},[162,141623,173],{"class":168},[162,141625,134866],{"class":179},[162,141627,134869],{"class":168},[162,141629,3538],{"class":54373},[162,141631,54380],{"class":168},[19,141633,141489],{},[153,141635,141636],{"className":130357,"code":134843,"language":130359,"meta":158,"style":158},[71,141637,141638],{"__ignoreMap":158},[162,141639,141640,141642,141644,141646,141648,141650,141652,141654,141656,141658,141660],{"class":164,"line":165},[162,141641,4187],{"class":168},[162,141643,3538],{"class":54373},[162,141645,64125],{"class":5082},[162,141647,173],{"class":168},[162,141649,134858],{"class":179},[162,141651,134861],{"class":5082},[162,141653,173],{"class":168},[162,141655,134866],{"class":179},[162,141657,134869],{"class":168},[162,141659,3538],{"class":54373},[162,141661,54380],{"class":168},[19,141663,141664,141665,141667],{},"2 号盒子是 ",[71,141666,134635],{}," 搜索模块定位",[4279,141669,141670,141673,141676,141679],{},[1455,141671,141672],{},"search盒子利用定位的方式放在对应的位置",[1455,141674,141675],{},"search盒子设置绝对定位，header盒子设置相对定位",[1455,141677,141678],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[1455,141680,141681],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,141683,141449],{},[153,141685,141686],{"className":129610,"code":134930,"language":129612,"meta":158,"style":158},[71,141687,141688,141710,141714,141724],{"__ignoreMap":158},[162,141689,141690,141692,141694,141696,141698,141700,141702,141704,141706,141708],{"class":164,"line":165},[162,141691,54683],{"class":54373},[162,141693,183],{"class":168},[162,141695,19],{"class":54373},[162,141697,183],{"class":168},[162,141699,10],{"class":54373},[162,141701,183],{"class":168},[162,141703,4279],{"class":54373},[162,141705,183],{"class":168},[162,141707,1455],{"class":54373},[162,141709,1722],{"class":168},[162,141711,141712],{"class":164,"line":197},[162,141713,134959],{"class":361},[162,141715,141716,141718,141720,141722],{"class":164,"line":228},[162,141717,131226],{"class":207},[162,141719,1730],{"class":168},[162,141721,63937],{"class":207},[162,141723,4433],{"class":168},[162,141725,141726],{"class":164,"line":252},[162,141727,1498],{"class":168},[19,141729,141489],{},[153,141731,141732],{"className":129610,"code":134930,"language":129612,"meta":158,"style":158},[71,141733,141734,141756,141760,141770],{"__ignoreMap":158},[162,141735,141736,141738,141740,141742,141744,141746,141748,141750,141752,141754],{"class":164,"line":165},[162,141737,54683],{"class":54373},[162,141739,183],{"class":168},[162,141741,19],{"class":54373},[162,141743,183],{"class":168},[162,141745,10],{"class":54373},[162,141747,183],{"class":168},[162,141749,4279],{"class":54373},[162,141751,183],{"class":168},[162,141753,1455],{"class":54373},[162,141755,1722],{"class":168},[162,141757,141758],{"class":164,"line":197},[162,141759,134959],{"class":361},[162,141761,141762,141764,141766,141768],{"class":164,"line":228},[162,141763,131226],{"class":207},[162,141765,1730],{"class":168},[162,141767,63937],{"class":207},[162,141769,4433],{"class":168},[162,141771,141772],{"class":164,"line":252},[162,141773,1498],{"class":168},[19,141775,141776],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,141778,141779,141780,141783],{},"3 号盒子是 ",[71,141781,141782],{},"hotwords"," 热词模块定位",[4279,141785,141786,141789,141792],{},[1455,141787,141788],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[1455,141790,141791],{},"给里面所有的a标签设置 左右10px的外边距",[1455,141793,141794],{},"给第一个a标签设置文字变红色（#c81623）",[19,141796,141449],{},[153,141798,141800],{"className":129610,"code":141799,"language":129612,"meta":158,"style":158},"div {\n  margin: 0 auto;\n}\n",[71,141801,141802,141808,141820],{"__ignoreMap":158},[162,141803,141804,141806],{"class":164,"line":165},[162,141805,54683],{"class":54373},[162,141807,1722],{"class":168},[162,141809,141810,141812,141814,141816,141818],{"class":164,"line":197},[162,141811,73535],{"class":207},[162,141813,1730],{"class":168},[162,141815,312],{"class":207},[162,141817,54628],{"class":207},[162,141819,4433],{"class":168},[162,141821,141822],{"class":164,"line":228},[162,141823,1498],{"class":168},[19,141825,141489],{},[153,141827,141828],{"className":129610,"code":141799,"language":129612,"meta":158,"style":158},[71,141829,141830,141836,141848],{"__ignoreMap":158},[162,141831,141832,141834],{"class":164,"line":165},[162,141833,54683],{"class":54373},[162,141835,1722],{"class":168},[162,141837,141838,141840,141842,141844,141846],{"class":164,"line":197},[162,141839,73535],{"class":207},[162,141841,1730],{"class":168},[162,141843,312],{"class":207},[162,141845,54628],{"class":207},[162,141847,4433],{"class":168},[162,141849,141850],{"class":164,"line":228},[162,141851,1498],{"class":168},[19,141853,141854,141855,141858],{},"4 号盒子是 ",[71,141856,141857],{},"shopcar"," 购物车模块",[4279,141860,141861,141866,141869,141872],{},[1455,141862,126393,141863,141865],{},[71,141864,141857],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[1455,141867,141868],{},"count 统计部分用绝对定位做",[1455,141870,141871],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[1455,141873,141874],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,141876,141449],{},[153,141878,141879],{"className":129610,"code":135042,"language":129612,"meta":158,"style":158},[71,141880,141881,141885,141899,141903,141917,141921,141935,141939,141953,141957],{"__ignoreMap":158},[162,141882,141883],{"class":164,"line":165},[162,141884,135049],{"class":361},[162,141886,141887,141889,141891,141893,141895,141897],{"class":164,"line":197},[162,141888,135054],{"class":5082},[162,141890,82872],{"class":168},[162,141892,131970],{"class":207},[162,141894,1730],{"class":168},[162,141896,135063],{"class":207},[162,141898,132540],{"class":168},[162,141900,141901],{"class":164,"line":228},[162,141902,135070],{"class":361},[162,141904,141905,141907,141909,141911,141913,141915],{"class":164,"line":252},[162,141906,135075],{"class":5082},[162,141908,82872],{"class":168},[162,141910,131970],{"class":207},[162,141912,1730],{"class":168},[162,141914,57834],{"class":207},[162,141916,132540],{"class":168},[162,141918,141919],{"class":164,"line":328},[162,141920,135090],{"class":361},[162,141922,141923,141925,141927,141929,141931,141933],{"class":164,"line":466},[162,141924,135095],{"class":5082},[162,141926,82872],{"class":168},[162,141928,131970],{"class":207},[162,141930,1730],{"class":168},[162,141932,57901],{"class":207},[162,141934,132540],{"class":168},[162,141936,141937],{"class":164,"line":471},[162,141938,135110],{"class":361},[162,141940,141941,141943,141945,141947,141949,141951],{"class":164,"line":687},[162,141942,135115],{"class":5082},[162,141944,82872],{"class":168},[162,141946,131970],{"class":207},[162,141948,1730],{"class":168},[162,141950,89298],{"class":207},[162,141952,132540],{"class":168},[162,141954,141955],{"class":164,"line":692},[162,141956,135130],{"class":361},[162,141958,141959,141961,141963,141965,141967,141969],{"class":164,"line":698},[162,141960,135135],{"class":5082},[162,141962,82872],{"class":168},[162,141964,131970],{"class":207},[162,141966,1730],{"class":168},[162,141968,135144],{"class":207},[162,141970,132540],{"class":168},[19,141972,141489],{},[153,141974,141975],{"className":129610,"code":135042,"language":129612,"meta":158,"style":158},[71,141976,141977,141981,141995,141999,142013,142017,142031,142035,142049,142053],{"__ignoreMap":158},[162,141978,141979],{"class":164,"line":165},[162,141980,135049],{"class":361},[162,141982,141983,141985,141987,141989,141991,141993],{"class":164,"line":197},[162,141984,135054],{"class":5082},[162,141986,82872],{"class":168},[162,141988,131970],{"class":207},[162,141990,1730],{"class":168},[162,141992,135063],{"class":207},[162,141994,132540],{"class":168},[162,141996,141997],{"class":164,"line":228},[162,141998,135070],{"class":361},[162,142000,142001,142003,142005,142007,142009,142011],{"class":164,"line":252},[162,142002,135075],{"class":5082},[162,142004,82872],{"class":168},[162,142006,131970],{"class":207},[162,142008,1730],{"class":168},[162,142010,57834],{"class":207},[162,142012,132540],{"class":168},[162,142014,142015],{"class":164,"line":328},[162,142016,135090],{"class":361},[162,142018,142019,142021,142023,142025,142027,142029],{"class":164,"line":466},[162,142020,135095],{"class":5082},[162,142022,82872],{"class":168},[162,142024,131970],{"class":207},[162,142026,1730],{"class":168},[162,142028,57901],{"class":207},[162,142030,132540],{"class":168},[162,142032,142033],{"class":164,"line":471},[162,142034,135110],{"class":361},[162,142036,142037,142039,142041,142043,142045,142047],{"class":164,"line":687},[162,142038,135115],{"class":5082},[162,142040,82872],{"class":168},[162,142042,131970],{"class":207},[162,142044,1730],{"class":168},[162,142046,89298],{"class":207},[162,142048,132540],{"class":168},[162,142050,142051],{"class":164,"line":692},[162,142052,135130],{"class":361},[162,142054,142055,142057,142059,142061,142063,142065],{"class":164,"line":698},[162,142056,135135],{"class":5082},[162,142058,82872],{"class":168},[162,142060,131970],{"class":207},[162,142062,1730],{"class":168},[162,142064,135144],{"class":207},[162,142066,132540],{"class":168},[3284,142068,142070,142071,142073],{"id":142069},"_1544-nav导航模块制作","15.4.4 ",[71,142072,56783],{},"导航模块制作",[4602,142075],{"style":129466,"src":142076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,142078,142079,142081],{},[71,142080,56783],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,142083,142084,142085],{},"1 号盒子左侧浮动，",[71,142086,142087],{},"dropdown",[4279,142089,142090,142100,142108,142114,142122,142132,142140,142151],{},[1455,142091,142092,142093,104082,142096,142099],{},"1号盒子有讲究，根据相关性 里面包含 ",[71,142094,142095],{},".dt",[71,142097,142098],{},".dd"," 两个盒子",[1455,142101,142102,142104,142105,142107],{},[71,142103,142095],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[71,142106,142098],{}," 挤到下面去了",[1455,142109,142110,142111,142113],{},"给 ",[71,142112,142098],{}," 盒子设置宽度 和 高度，以及背景颜色",[1455,142115,142110,142116,142118,142119,123295],{},[71,142117,142098],{}," 盒子里面定义 无序列表 （",[71,142120,142121],{},"ul > li > a",[1455,142123,142124,142125,142127,142128,142131],{},"每个 ",[71,142126,1455],{}," 都有一个高度（",[71,142129,142130],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[1455,142133,142110,142134,142136,142137,123295],{},[71,142135,1455],{}," 里面的a设置文字大小（",[71,142138,142139],{},"14px",[1455,142141,142110,142142,142144,142145,142147,142148,142150],{},[71,142143,1455],{}," 设置 ",[71,142146,130771],{},"，当鼠标移入的时候，让",[71,142149,1455],{},"的背景变成白色，让里面的文字变成红色",[1455,142152,142153,142155,142156,142158,142159,142161],{},[71,142154,1455],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[71,142157,1455],{},"的右侧，那么给",[71,142160,1455],{},"设置相对定位",[19,142163,142164],{},"一定要注意相关性",[19,142166,141449],{},[153,142168,142169],{"className":129610,"code":141452,"language":129612,"meta":158,"style":158},[71,142170,142171,142179,142189,142199],{"__ignoreMap":158},[162,142172,142173,142175,142177],{"class":164,"line":165},[162,142174,54683],{"class":54373},[162,142176,140611],{"class":5082},[162,142178,1722],{"class":168},[162,142180,142181,142183,142185,142187],{"class":164,"line":197},[162,142182,140618],{"class":207},[162,142184,1730],{"class":168},[162,142186,10756],{"class":179},[162,142188,4433],{"class":168},[162,142190,142191,142193,142195,142197],{"class":164,"line":228},[162,142192,131226],{"class":207},[162,142194,1730],{"class":168},[162,142196,63937],{"class":207},[162,142198,4433],{"class":168},[162,142200,142201],{"class":164,"line":252},[162,142202,1498],{"class":168},[19,142204,141489],{},[153,142206,142207],{"className":129610,"code":141452,"language":129612,"meta":158,"style":158},[71,142208,142209,142217,142227,142237],{"__ignoreMap":158},[162,142210,142211,142213,142215],{"class":164,"line":165},[162,142212,54683],{"class":54373},[162,142214,140611],{"class":5082},[162,142216,1722],{"class":168},[162,142218,142219,142221,142223,142225],{"class":164,"line":197},[162,142220,140618],{"class":207},[162,142222,1730],{"class":168},[162,142224,10756],{"class":179},[162,142226,4433],{"class":168},[162,142228,142229,142231,142233,142235],{"class":164,"line":228},[162,142230,131226],{"class":207},[162,142232,1730],{"class":168},[162,142234,63937],{"class":207},[162,142236,4433],{"class":168},[162,142238,142239],{"class":164,"line":252},[162,142240,1498],{"class":168},[19,142242,142243],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,142245,142246,142247,142250],{},"2 号盒子左侧浮动，",[71,142248,142249],{},"navitems"," 导航栏组",[4279,142252,142253,142258,142267],{},[1455,142254,142255,142256],{},"里面结构是 ",[71,142257,142121],{},[1455,142259,142260,142261,142263,142264,142266],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[71,142262,3538],{},"左右的",[71,142265,33967],{},"把两侧撑开",[1455,142268,142269],{},"让文字垂直居中（行高等于高度）",[4602,142271],{"style":129466,"src":142272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,142274,142275],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,142277,141449],{},[153,142279,142281],{"className":129610,"code":142280,"language":129612,"meta":158,"style":158},".box {\n  float: left;\n}\n",[71,142282,142283,142289,142299],{"__ignoreMap":158},[162,142284,142285,142287],{"class":164,"line":165},[162,142286,133458],{"class":5082},[162,142288,1722],{"class":168},[162,142290,142291,142293,142295,142297],{"class":164,"line":197},[162,142292,134090],{"class":207},[162,142294,1730],{"class":168},[162,142296,26827],{"class":207},[162,142298,4433],{"class":168},[162,142300,142301],{"class":164,"line":228},[162,142302,1498],{"class":168},[19,142304,141489],{},[153,142306,142307],{"className":129610,"code":142280,"language":129612,"meta":158,"style":158},[71,142308,142309,142315,142325],{"__ignoreMap":158},[162,142310,142311,142313],{"class":164,"line":165},[162,142312,133458],{"class":5082},[162,142314,1722],{"class":168},[162,142316,142317,142319,142321,142323],{"class":164,"line":197},[162,142318,134090],{"class":207},[162,142320,1730],{"class":168},[162,142322,26827],{"class":207},[162,142324,4433],{"class":168},[162,142326,142327],{"class":164,"line":228},[162,142328,1498],{"class":168},[19,142330,142331],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[4602,142333],{"style":129466,"src":142334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[153,142336,142337],{"className":129610,"code":133767,"language":129612,"meta":158,"style":158},[71,142338,142339,142345,142361],{"__ignoreMap":158},[162,142340,142341,142343],{"class":164,"line":165},[162,142342,54683],{"class":54373},[162,142344,1722],{"class":168},[162,142346,142347,142349,142351,142353,142355,142357,142359],{"class":164,"line":197},[162,142348,73961],{"class":207},[162,142350,1730],{"class":168},[162,142352,208],{"class":207},[162,142354,54564],{"class":172},[162,142356,54593],{"class":207},[162,142358,133002],{"class":207},[162,142360,4433],{"class":168},[162,142362,142363],{"class":164,"line":228},[162,142364,1498],{"class":168},[3284,142366,142368],{"id":142367},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[4602,142370],{"style":129466,"src":142371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[4279,142373,142374,142379,142384],{},[1455,142375,142376,142378],{},[71,142377,134813],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[1455,142380,142381,142383],{},[71,142382,134813],{}," 里面有一个大的版心",[1455,142385,142386,142387,142390,142391],{},"版心里面包含 1 号盒子，",[71,142388,142389],{},"mod_service"," 是服务模块，mod 是模块的意思",[4279,142392,142393,142398,142411,142427,142432],{},[1455,142394,142110,142395,142397],{},[71,142396,142389],{}," 设置高度（80px）和下边框",[1455,142399,142400,142401,142404,142405,142407,142408,142410],{},"在里面定义 ",[71,142402,142403],{},"ul > li"," ,每个",[71,142406,1455],{}," 宽度是300px 高度是 50px，给每个",[71,142409,1455],{},"设置35px的左内边距",[1455,142412,142413,142414,142416,142417,142419,142420,142422,142423,21501,142425,123295],{},"在每个",[71,142415,1455],{},"里面，放一个 ",[71,142418,26001],{},"（里面放图标），一个",[71,142421,54683],{},"（里面放",[71,142424,54683],{},[71,142426,19],{},[1455,142428,142110,142429,142431],{},[71,142430,26001],{},"设置浮动，让h5与这个div左右排列",[1455,142433,142434],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,142436,141449],{},[153,142438,142440],{"className":129610,"code":142439,"language":129612,"meta":158,"style":158},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[71,142441,142442,142448,142460,142472,142499],{"__ignoreMap":158},[162,142443,142444,142446],{"class":164,"line":165},[162,142445,137367],{"class":5082},[162,142447,1722],{"class":168},[162,142449,142450,142452,142454,142456,142458],{"class":164,"line":197},[162,142451,73633],{"class":207},[162,142453,1730],{"class":168},[162,142455,1011],{"class":207},[162,142457,54564],{"class":172},[162,142459,4433],{"class":168},[162,142461,142462,142464,142466,142468,142470],{"class":164,"line":228},[162,142463,73853],{"class":207},[162,142465,1730],{"class":168},[162,142467,1011],{"class":207},[162,142469,54564],{"class":172},[162,142471,4433],{"class":168},[162,142473,142474,142476,142478,142480,142482,142484,142486,142488,142491,142493,142495,142497],{"class":164,"line":252},[162,142475,73676],{"class":207},[162,142477,1730],{"class":168},[162,142479,64794],{"class":207},[162,142481,604],{"class":168},[162,142483,137406],{"class":671},[162,142485,1823],{"class":168},[162,142487,64804],{"class":207},[162,142489,142490],{"class":207}," -10",[162,142492,54564],{"class":172},[162,142494,137425],{"class":207},[162,142496,54564],{"class":172},[162,142498,4433],{"class":168},[162,142500,142501],{"class":164,"line":328},[162,142502,1498],{"class":168},[19,142504,141489],{},[153,142506,142507],{"className":129610,"code":142439,"language":129612,"meta":158,"style":158},[71,142508,142509,142515,142527,142539,142565],{"__ignoreMap":158},[162,142510,142511,142513],{"class":164,"line":165},[162,142512,137367],{"class":5082},[162,142514,1722],{"class":168},[162,142516,142517,142519,142521,142523,142525],{"class":164,"line":197},[162,142518,73633],{"class":207},[162,142520,1730],{"class":168},[162,142522,1011],{"class":207},[162,142524,54564],{"class":172},[162,142526,4433],{"class":168},[162,142528,142529,142531,142533,142535,142537],{"class":164,"line":228},[162,142530,73853],{"class":207},[162,142532,1730],{"class":168},[162,142534,1011],{"class":207},[162,142536,54564],{"class":172},[162,142538,4433],{"class":168},[162,142540,142541,142543,142545,142547,142549,142551,142553,142555,142557,142559,142561,142563],{"class":164,"line":252},[162,142542,73676],{"class":207},[162,142544,1730],{"class":168},[162,142546,64794],{"class":207},[162,142548,604],{"class":168},[162,142550,137406],{"class":671},[162,142552,1823],{"class":168},[162,142554,64804],{"class":207},[162,142556,142490],{"class":207},[162,142558,54564],{"class":172},[162,142560,137425],{"class":207},[162,142562,54564],{"class":172},[162,142564,4433],{"class":168},[162,142566,142567],{"class":164,"line":328},[162,142568,1498],{"class":168},[19,142570,142571],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[4279,142573,142574,142577,142583,142589,142601],{},[1455,142575,142576],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[1455,142578,142579,142580,123295],{},"里面的布局利用 自定义列表来实现（",[71,142581,142582],{},"dl > dt + dd",[1455,142584,142110,142585,142588],{},[71,142586,142587],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[1455,142590,142110,142591,142594,142595,21501,142597,142600],{},[71,142592,142593],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[71,142596,142593],{},[71,142598,142599],{},"dd","之间有些距离",[1455,142602,142603],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,142605,141449],{},[153,142607,142608],{"className":129610,"code":141799,"language":129612,"meta":158,"style":158},[71,142609,142610,142616,142628],{"__ignoreMap":158},[162,142611,142612,142614],{"class":164,"line":165},[162,142613,54683],{"class":54373},[162,142615,1722],{"class":168},[162,142617,142618,142620,142622,142624,142626],{"class":164,"line":197},[162,142619,73535],{"class":207},[162,142621,1730],{"class":168},[162,142623,312],{"class":207},[162,142625,54628],{"class":207},[162,142627,4433],{"class":168},[162,142629,142630],{"class":164,"line":228},[162,142631,1498],{"class":168},[19,142633,141489],{},[153,142635,142636],{"className":129610,"code":141799,"language":129612,"meta":158,"style":158},[71,142637,142638,142644,142656],{"__ignoreMap":158},[162,142639,142640,142642],{"class":164,"line":165},[162,142641,54683],{"class":54373},[162,142643,1722],{"class":168},[162,142645,142646,142648,142650,142652,142654],{"class":164,"line":197},[162,142647,73535],{"class":207},[162,142649,1730],{"class":168},[162,142651,312],{"class":207},[162,142653,54628],{"class":207},[162,142655,4433],{"class":168},[162,142657,142658],{"class":164,"line":228},[162,142659,1498],{"class":168},[19,142661,142662],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[4279,142664,142665,142674,142677,142688],{},[1455,142666,142667,142668,142670,142671,142673],{},"分为上下两块，上面是 ",[71,142669,134830],{}," 友情链接，下面是 ",[71,142672,134823],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[1455,142675,142676],{},"把内容分别复制到相应模块中",[1455,142678,142110,142679,142681,142682,142684,142685,142687],{},[71,142680,134830],{}," 设置 15px 的下外边距，给",[71,142683,134830],{}," 里面 的 ",[71,142686,3538],{}," 标签设置 左右 3px 的外边距",[1455,142689,142690,142691,142693],{},"给",[71,142692,134823],{}," 设置 20px 的行高",[19,142695,141449],{},[153,142697,142698],{"className":129610,"code":141799,"language":129612,"meta":158,"style":158},[71,142699,142700,142706,142718],{"__ignoreMap":158},[162,142701,142702,142704],{"class":164,"line":165},[162,142703,54683],{"class":54373},[162,142705,1722],{"class":168},[162,142707,142708,142710,142712,142714,142716],{"class":164,"line":197},[162,142709,73535],{"class":207},[162,142711,1730],{"class":168},[162,142713,312],{"class":207},[162,142715,54628],{"class":207},[162,142717,4433],{"class":168},[162,142719,142720],{"class":164,"line":228},[162,142721,1498],{"class":168},[19,142723,141489],{},[153,142725,142726],{"className":129610,"code":141799,"language":129612,"meta":158,"style":158},[71,142727,142728,142734,142746],{"__ignoreMap":158},[162,142729,142730,142732],{"class":164,"line":165},[162,142731,54683],{"class":54373},[162,142733,1722],{"class":168},[162,142735,142736,142738,142740,142742,142744],{"class":164,"line":197},[162,142737,73535],{"class":207},[162,142739,1730],{"class":168},[162,142741,312],{"class":207},[162,142743,54628],{"class":207},[162,142745,4433],{"class":168},[162,142747,142748],{"class":164,"line":228},[162,142749,1498],{"class":168},[19,142751,142752],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[3219,142754,142755],{},"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":158,"searchDepth":197,"depth":197,"links":142757},[142758,142759,142760,142767],{"id":141038,"depth":197,"text":141039},{"id":141057,"depth":197,"text":141058},{"id":141084,"depth":197,"text":141085,"children":142761},[142762,142763,142764,142765,142766],{"id":141088,"depth":228,"text":141089},{"id":141101,"depth":228,"text":141102},{"id":141125,"depth":228,"text":141126},{"id":141147,"depth":228,"text":141148},{"id":141219,"depth":228,"text":141220},{"id":141345,"depth":197,"text":141346,"children":142768},[142769,142770,142771,142772,142774],{"id":141349,"depth":228,"text":141350},{"id":141356,"depth":228,"text":141357},{"id":141528,"depth":228,"text":141529},{"id":142069,"depth":228,"text":142773},"15.4.4 nav导航模块制作",{"id":142367,"depth":228,"text":142368},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":141030,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":142781,"title":142782,"body":142783,"description":3241,"extension":3242,"meta":145185,"navigation":300,"path":145186,"seo":145187,"stem":145188,"__hash__":145189},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":142784,"toc":145162},[142785,142788,142792,142796,142808,142811,142814,142817,142828,142830,142854,142856,142880,142885,142888,142890,142926,142928,142964,142967,142972,142975,142978,142981,143011,143018,143021,143031,143033,143067,143070,143104,143110,143127,143129,143165,143167,143203,143208,143233,143235,143261,143263,143287,143294,143297,143361,143363,143405,143407,143447,143454,143459,143461,143491,143493,143523,143527,143530,143537,143549,143551,143577,143579,143603,143606,143608,143632,143638,143648,143650,143680,143682,143712,143719,143760,143762,143798,143800,143836,143840,143843,143846,143849,143855,143860,143863,143886,143889,143913,143916,143940,143945,143948,143951,143954,143957,143960,144034,144036,144066,144068,144098,144101,144104,144136,144140,144144,144158,144167,144170,144175,144177,144271,144273,144367,144390,144392,144416,144418,144442,144449,144452,144462,144464,144488,144493,144501,144503,144533,144538,144578,144580,144606,144608,144634,144638,144641,144646,144649,144653,144661,144668,144676,144678,144708,144710,144740,144748,144751,144754,144756,144786,144788,144818,144821,144826,144828,144852,144854,144878,144881,144966,144968,144992,144994,145018,145022,145024,145048,145050,145084,145088,145102,145105,145110,145113,145118,145121,145151,145159],[10,142786,142782],{"id":142787},"_16-品优购项目下篇-主体与页面开发",[14,142789,142791],{"id":142790},"_161-项目主体模块制作","16.1 项目主体模块制作",[3284,142793,142795],{"id":142794},"_1611-首页制作","16.1.1 首页制作",[19,142797,142798,142800,142801,142803,142804,142807],{},[3453,142799,105121],{}," 主体模块是 ",[3453,142802,77123],{}," 里面专有的，注意需要新的样式文件 ",[3453,142805,142806],{},"index.css，"," 就不要写在common.css中了",[4602,142809],{"style":129466,"src":142810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[4602,142812],{"style":129466,"src":142813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,142815,142816],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[4279,142818,142819,142822,142825],{},[1455,142820,142821],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[1455,142823,142824],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[1455,142826,142827],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,142829,141449],{},[153,142831,142832],{"className":129610,"code":142280,"language":129612,"meta":158,"style":158},[71,142833,142834,142840,142850],{"__ignoreMap":158},[162,142835,142836,142838],{"class":164,"line":165},[162,142837,133458],{"class":5082},[162,142839,1722],{"class":168},[162,142841,142842,142844,142846,142848],{"class":164,"line":197},[162,142843,134090],{"class":207},[162,142845,1730],{"class":168},[162,142847,26827],{"class":207},[162,142849,4433],{"class":168},[162,142851,142852],{"class":164,"line":228},[162,142853,1498],{"class":168},[19,142855,141489],{},[153,142857,142858],{"className":129610,"code":142280,"language":129612,"meta":158,"style":158},[71,142859,142860,142866,142876],{"__ignoreMap":158},[162,142861,142862,142864],{"class":164,"line":165},[162,142863,133458],{"class":5082},[162,142865,1722],{"class":168},[162,142867,142868,142870,142872,142874],{"class":164,"line":197},[162,142869,134090],{"class":207},[162,142871,1730],{"class":168},[162,142873,26827],{"class":207},[162,142875,4433],{"class":168},[162,142877,142878],{"class":164,"line":228},[162,142879,1498],{"class":168},[1452,142881,142882],{},[1455,142883,142884],{},"左侧focus模块制作",[4602,142886],{"style":129466,"src":142887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,142889,141449],{},[153,142891,142892],{"className":129610,"code":130933,"language":129612,"meta":158,"style":158},[71,142893,142894,142902,142912,142922],{"__ignoreMap":158},[162,142895,142896,142898,142900],{"class":164,"line":165},[162,142897,56891],{"class":54373},[162,142899,64968],{"class":5082},[162,142901,1722],{"class":168},[162,142903,142904,142906,142908,142910],{"class":164,"line":197},[162,142905,130948],{"class":207},[162,142907,1730],{"class":168},[162,142909,57959],{"class":207},[162,142911,4433],{"class":168},[162,142913,142914,142916,142918,142920],{"class":164,"line":228},[162,142915,73863],{"class":207},[162,142917,1730],{"class":168},[162,142919,57807],{"class":207},[162,142921,4433],{"class":168},[162,142923,142924],{"class":164,"line":252},[162,142925,1498],{"class":168},[19,142927,141489],{},[153,142929,142930],{"className":129610,"code":130933,"language":129612,"meta":158,"style":158},[71,142931,142932,142940,142950,142960],{"__ignoreMap":158},[162,142933,142934,142936,142938],{"class":164,"line":165},[162,142935,56891],{"class":54373},[162,142937,64968],{"class":5082},[162,142939,1722],{"class":168},[162,142941,142942,142944,142946,142948],{"class":164,"line":197},[162,142943,130948],{"class":207},[162,142945,1730],{"class":168},[162,142947,57959],{"class":207},[162,142949,4433],{"class":168},[162,142951,142952,142954,142956,142958],{"class":164,"line":228},[162,142953,73863],{"class":207},[162,142955,1730],{"class":168},[162,142957,57807],{"class":207},[162,142959,4433],{"class":168},[162,142961,142962],{"class":164,"line":252},[162,142963,1498],{"class":168},[19,142965,142966],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[1452,142968,142969],{"start":197},[1455,142970,142971],{},"右侧newsflash模块制作",[4602,142973],{"style":129466,"src":142974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,142976,142977],{},"右侧的模块 分为上中下三个盒子",[19,142979,142980],{},"结构代码：",[153,142982,142983],{"className":130357,"code":137112,"language":130359,"meta":158,"style":158},[71,142984,142985],{"__ignoreMap":158},[162,142986,142987,142989,142991,142993,142995,142997,142999,143001,143003,143005,143007,143009],{"class":164,"line":165},[162,142988,4187],{"class":168},[162,142990,4602],{"class":54373},[162,142992,58309],{"class":5082},[162,142994,173],{"class":168},[162,142996,137127],{"class":179},[162,142998,58317],{"class":5082},[162,143000,173],{"class":168},[162,143002,137134],{"class":179},[162,143004,137137],{"class":5082},[162,143006,173],{"class":168},[162,143008,137142],{"class":179},[162,143010,54380],{"class":168},[19,143012,143013,143014,143017],{},"1 号盒子为 ",[71,143015,143016],{},"news"," 新闻模块 高度为 165px",[4602,143019],{"style":129466,"src":143020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,143022,143023,143024,143027,143028],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[71,143025,143026],{},"news-hd","，下面是 ",[71,143029,143030],{},"news-bd",[19,143032,142980],{},[153,143034,143035],{"className":130357,"code":133714,"language":130359,"meta":158,"style":158},[71,143036,143037,143041,143055,143059],{"__ignoreMap":158},[162,143038,143039],{"class":164,"line":165},[162,143040,133721],{"class":361},[162,143042,143043,143045,143047,143049,143051,143053],{"class":164,"line":197},[162,143044,4187],{"class":168},[162,143046,54683],{"class":54373},[162,143048,56556],{"class":5082},[162,143050,173],{"class":168},[162,143052,133734],{"class":179},[162,143054,54380],{"class":168},[162,143056,143057],{"class":164,"line":228},[162,143058,133741],{"class":168},[162,143060,143061,143063,143065],{"class":164,"line":252},[162,143062,54857],{"class":168},[162,143064,54683],{"class":54373},[162,143066,54380],{"class":168},[19,143068,143069],{},"样式代码：",[153,143071,143072],{"className":130357,"code":133714,"language":130359,"meta":158,"style":158},[71,143073,143074,143078,143092,143096],{"__ignoreMap":158},[162,143075,143076],{"class":164,"line":165},[162,143077,133721],{"class":361},[162,143079,143080,143082,143084,143086,143088,143090],{"class":164,"line":197},[162,143081,4187],{"class":168},[162,143083,54683],{"class":54373},[162,143085,56556],{"class":5082},[162,143087,173],{"class":168},[162,143089,133734],{"class":179},[162,143091,54380],{"class":168},[162,143093,143094],{"class":164,"line":228},[162,143095,133741],{"class":168},[162,143097,143098,143100,143102],{"class":164,"line":252},[162,143099,54857],{"class":168},[162,143101,54683],{"class":54373},[162,143103,54380],{"class":168},[19,143105,143106,143107,143109],{},"上面是",[71,143108,143026],{},"，设置高度是 33px，设置下边框",[4279,143111,143112,143118],{},[1455,143113,143114,143115,143117],{},"里面放一个",[71,143116,26001],{}," 标题",[1455,143119,143120,143121,143123,143124,143126],{},"放一个a",[71,143122,105756],{},"，内容是 更多，然后让 ",[71,143125,3538],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,143128,142980],{},[153,143130,143131],{"className":129610,"code":141452,"language":129612,"meta":158,"style":158},[71,143132,143133,143141,143151,143161],{"__ignoreMap":158},[162,143134,143135,143137,143139],{"class":164,"line":165},[162,143136,54683],{"class":54373},[162,143138,140611],{"class":5082},[162,143140,1722],{"class":168},[162,143142,143143,143145,143147,143149],{"class":164,"line":197},[162,143144,140618],{"class":207},[162,143146,1730],{"class":168},[162,143148,10756],{"class":179},[162,143150,4433],{"class":168},[162,143152,143153,143155,143157,143159],{"class":164,"line":228},[162,143154,131226],{"class":207},[162,143156,1730],{"class":168},[162,143158,63937],{"class":207},[162,143160,4433],{"class":168},[162,143162,143163],{"class":164,"line":252},[162,143164,1498],{"class":168},[19,143166,143069],{},[153,143168,143169],{"className":129610,"code":141452,"language":129612,"meta":158,"style":158},[71,143170,143171,143179,143189,143199],{"__ignoreMap":158},[162,143172,143173,143175,143177],{"class":164,"line":165},[162,143174,54683],{"class":54373},[162,143176,140611],{"class":5082},[162,143178,1722],{"class":168},[162,143180,143181,143183,143185,143187],{"class":164,"line":197},[162,143182,140618],{"class":207},[162,143184,1730],{"class":168},[162,143186,10756],{"class":179},[162,143188,4433],{"class":168},[162,143190,143191,143193,143195,143197],{"class":164,"line":228},[162,143192,131226],{"class":207},[162,143194,1730],{"class":168},[162,143196,63937],{"class":207},[162,143198,4433],{"class":168},[162,143200,143201],{"class":164,"line":252},[162,143202,1498],{"class":168},[19,143204,143205,143206],{},"下面是",[71,143207,143030],{},[4279,143209,143210,143218],{},[1455,143211,143212,143213,104082,143215,143217],{},"里面包含 ",[71,143214,4279],{},[71,143216,1455],{}," 还有链接",[1455,143219,142690,143220,143222,143223,143225,143226,143229,143230],{},[71,143221,1455],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[71,143224,134276],{}," 2.设置 ",[71,143227,143228],{},"white-space: nowrap;"," 3. 设置 ",[71,143231,143232],{},"text-overflow: ellipsis;",[19,143234,142980],{},[153,143236,143238],{"className":129610,"code":143237,"language":129612,"meta":158,"style":158},"div {\n  overflow: hidden;\n}\n",[71,143239,143240,143246,143257],{"__ignoreMap":158},[162,143241,143242,143244],{"class":164,"line":165},[162,143243,54683],{"class":54373},[162,143245,1722],{"class":168},[162,143247,143248,143251,143253,143255],{"class":164,"line":197},[162,143249,143250],{"class":207},"  overflow",[162,143252,1730],{"class":168},[162,143254,64782],{"class":207},[162,143256,4433],{"class":168},[162,143258,143259],{"class":164,"line":228},[162,143260,1498],{"class":168},[19,143262,143069],{},[153,143264,143265],{"className":129610,"code":143237,"language":129612,"meta":158,"style":158},[71,143266,143267,143273,143283],{"__ignoreMap":158},[162,143268,143269,143271],{"class":164,"line":165},[162,143270,54683],{"class":54373},[162,143272,1722],{"class":168},[162,143274,143275,143277,143279,143281],{"class":164,"line":197},[162,143276,143250],{"class":207},[162,143278,1730],{"class":168},[162,143280,64782],{"class":207},[162,143282,4433],{"class":168},[162,143284,143285],{"class":164,"line":228},[162,143286,1498],{"class":168},[19,143288,143289,143290,143293],{},"2 号盒子为 ",[71,143291,143292],{},"lifeservice"," 生活服务模块 高度为 209px",[4602,143295],{"style":129466,"src":143296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[4279,143298,143299,143302,143312,143336,143347],{},[1455,143300,143301],{},"设置边框（左右下边框）",[1455,143303,143304,143305,143308,143309,143311],{},"里面的内容 是 ",[71,143306,143307],{},"ul > 12*li","，给",[71,143310,1455],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[1455,143313,143314,143315],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[4279,143316,143317,143322,143331],{},[1455,143318,143319,143321],{},[71,143320,143292],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[1455,143323,143324,143325,143327,143328,143330],{},"可以让 ",[71,143326,143292],{}," 里面的 ",[71,143329,4279],{}," 宽度为 252，就可以装的下 4 个 小 li",[1455,143332,143333,143335],{},[71,143334,143292],{}," 盒子 overflow 隐藏多余的部分就可以了",[1455,143337,119526,143338,143340,143341,143343,143344,143346],{},[71,143339,1455],{}," 里面放一个 ",[71,143342,3732],{},"（里面放图标），下面的文本用 ",[71,143345,19],{}," 标签包裹",[1455,143348,142110,143349,143351,143352,143354,143355,142144,143357,143360],{},[71,143350,3732],{}," 设置 24px宽和28px的高（注意 ",[71,143353,3732],{}," 是行内元素， 转成行内块），给 ",[71,143356,1455],{},[71,143358,143359],{},"text-align:center"," 让里面内容居中显示",[19,143362,142980],{},[153,143364,143366],{"className":129610,"code":143365,"language":129612,"meta":158,"style":158},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[71,143367,143368,143386,143391,143401],{"__ignoreMap":158},[162,143369,143370,143372,143374,143376,143378,143380,143382,143384],{"class":164,"line":165},[162,143371,162],{"class":54373},[162,143373,183],{"class":168},[162,143375,3538],{"class":54373},[162,143377,183],{"class":168},[162,143379,26644],{"class":54373},[162,143381,183],{"class":168},[162,143383,3453],{"class":54373},[162,143385,1722],{"class":168},[162,143387,143388],{"class":164,"line":197},[162,143389,143390],{"class":361},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[162,143392,143393,143395,143397,143399],{"class":164,"line":228},[162,143394,131226],{"class":207},[162,143396,1730],{"class":168},[162,143398,131288],{"class":207},[162,143400,4433],{"class":168},[162,143402,143403],{"class":164,"line":252},[162,143404,1498],{"class":168},[19,143406,143069],{},[153,143408,143409],{"className":129610,"code":143365,"language":129612,"meta":158,"style":158},[71,143410,143411,143429,143433,143443],{"__ignoreMap":158},[162,143412,143413,143415,143417,143419,143421,143423,143425,143427],{"class":164,"line":165},[162,143414,162],{"class":54373},[162,143416,183],{"class":168},[162,143418,3538],{"class":54373},[162,143420,183],{"class":168},[162,143422,26644],{"class":54373},[162,143424,183],{"class":168},[162,143426,3453],{"class":54373},[162,143428,1722],{"class":168},[162,143430,143431],{"class":164,"line":197},[162,143432,143390],{"class":361},[162,143434,143435,143437,143439,143441],{"class":164,"line":228},[162,143436,131226],{"class":207},[162,143438,1730],{"class":168},[162,143440,131288],{"class":207},[162,143442,4433],{"class":168},[162,143444,143445],{"class":164,"line":252},[162,143446,1498],{"class":168},[19,143448,143449,143450,143453],{},"3 号盒子为 ",[71,143451,143452],{},"bargain"," 特价商品",[4279,143455,143456],{},[1455,143457,143458],{},"这个比较简单，直接插入一张图片即可",[19,143460,142980],{},[153,143462,143463],{"className":130357,"code":137112,"language":130359,"meta":158,"style":158},[71,143464,143465],{"__ignoreMap":158},[162,143466,143467,143469,143471,143473,143475,143477,143479,143481,143483,143485,143487,143489],{"class":164,"line":165},[162,143468,4187],{"class":168},[162,143470,4602],{"class":54373},[162,143472,58309],{"class":5082},[162,143474,173],{"class":168},[162,143476,137127],{"class":179},[162,143478,58317],{"class":5082},[162,143480,173],{"class":168},[162,143482,137134],{"class":179},[162,143484,137137],{"class":5082},[162,143486,173],{"class":168},[162,143488,137142],{"class":179},[162,143490,54380],{"class":168},[19,143492,143069],{},[153,143494,143495],{"className":130357,"code":137112,"language":130359,"meta":158,"style":158},[71,143496,143497],{"__ignoreMap":158},[162,143498,143499,143501,143503,143505,143507,143509,143511,143513,143515,143517,143519,143521],{"class":164,"line":165},[162,143500,4187],{"class":168},[162,143502,4602],{"class":54373},[162,143504,58309],{"class":5082},[162,143506,173],{"class":168},[162,143508,137127],{"class":179},[162,143510,58317],{"class":5082},[162,143512,173],{"class":168},[162,143514,137134],{"class":179},[162,143516,137137],{"class":5082},[162,143518,173],{"class":168},[162,143520,137142],{"class":179},[162,143522,54380],{"class":168},[3284,143524,143526],{"id":143525},"_1612-推荐模块制作","16.1.2 推荐模块制作",[4602,143528],{"style":129466,"src":143529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,143531,143532,143533,143536],{},"大盒子 ",[71,143534,143535],{},"recom"," 推荐模块 recommend",[4279,143538,143539],{},[1455,143540,143541,143542,143544,143545,143548],{},"给这个 ",[71,143543,143535],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[71,143546,143547],{},"#ebebeb","），设置距离上边 12px",[19,143550,142980],{},[153,143552,143554],{"className":129610,"code":143553,"language":129612,"meta":158,"style":158},"div {\n  background-color: #f0f0f0;\n}\n",[71,143555,143556,143562,143573],{"__ignoreMap":158},[162,143557,143558,143560],{"class":164,"line":165},[162,143559,54683],{"class":54373},[162,143561,1722],{"class":168},[162,143563,143564,143566,143568,143571],{"class":164,"line":197},[162,143565,73943],{"class":207},[162,143567,1730],{"class":168},[162,143569,143570],{"class":207},"#f0f0f0",[162,143572,4433],{"class":168},[162,143574,143575],{"class":164,"line":228},[162,143576,1498],{"class":168},[19,143578,143069],{},[153,143580,143581],{"className":129610,"code":143553,"language":129612,"meta":158,"style":158},[71,143582,143583,143589,143599],{"__ignoreMap":158},[162,143584,143585,143587],{"class":164,"line":165},[162,143586,54683],{"class":54373},[162,143588,1722],{"class":168},[162,143590,143591,143593,143595,143597],{"class":164,"line":197},[162,143592,73943],{"class":207},[162,143594,1730],{"class":168},[162,143596,143570],{"class":207},[162,143598,4433],{"class":168},[162,143600,143601],{"class":164,"line":228},[162,143602,1498],{"class":168},[19,143604,143605],{},"里面包含 2 个盒子， 浮动即可",[19,143607,142980],{},[153,143609,143610],{"className":129610,"code":142280,"language":129612,"meta":158,"style":158},[71,143611,143612,143618,143628],{"__ignoreMap":158},[162,143613,143614,143616],{"class":164,"line":165},[162,143615,133458],{"class":5082},[162,143617,1722],{"class":168},[162,143619,143620,143622,143624,143626],{"class":164,"line":197},[162,143621,134090],{"class":207},[162,143623,1730],{"class":168},[162,143625,26827],{"class":207},[162,143627,4433],{"class":168},[162,143629,143630],{"class":164,"line":228},[162,143631,1498],{"class":168},[19,143633,143634,143635],{},"1 号盒子 ",[71,143636,143637],{},"recom_hd",[4279,143639,143640,143643],{},[1455,143641,143642],{},"设置宽度205px，高度163px",[1455,143644,143114,143645,143647],{},[71,143646,4602],{},"标签，插入图片即可",[19,143649,142980],{},[153,143651,143652],{"className":130357,"code":137112,"language":130359,"meta":158,"style":158},[71,143653,143654],{"__ignoreMap":158},[162,143655,143656,143658,143660,143662,143664,143666,143668,143670,143672,143674,143676,143678],{"class":164,"line":165},[162,143657,4187],{"class":168},[162,143659,4602],{"class":54373},[162,143661,58309],{"class":5082},[162,143663,173],{"class":168},[162,143665,137127],{"class":179},[162,143667,58317],{"class":5082},[162,143669,173],{"class":168},[162,143671,137134],{"class":179},[162,143673,137137],{"class":5082},[162,143675,173],{"class":168},[162,143677,137142],{"class":179},[162,143679,54380],{"class":168},[19,143681,143069],{},[153,143683,143684],{"className":130357,"code":137112,"language":130359,"meta":158,"style":158},[71,143685,143686],{"__ignoreMap":158},[162,143687,143688,143690,143692,143694,143696,143698,143700,143702,143704,143706,143708,143710],{"class":164,"line":165},[162,143689,4187],{"class":168},[162,143691,4602],{"class":54373},[162,143693,58309],{"class":5082},[162,143695,173],{"class":168},[162,143697,137127],{"class":179},[162,143699,58317],{"class":5082},[162,143701,173],{"class":168},[162,143703,137134],{"class":179},[162,143705,137137],{"class":5082},[162,143707,173],{"class":168},[162,143709,137142],{"class":179},[162,143711,54380],{"class":168},[19,143713,143714,143715,143718],{},"2 号盒子 ",[71,143716,143717],{},"recom_bd"," ，注意里面的小竖线",[4279,143720,143721,143732,143735,143740,143745],{},[1455,143722,143723,143724,143726,143727,143729,143730],{},"右侧结构里面放 ",[71,143725,4279],{}," 包含 4个 ",[71,143728,1455],{},"，每个li里面包含一个",[71,143731,4602],{},[1455,143733,143734],{},"直接利用切片工具把里面的内容当成一张图片",[1455,143736,142110,143737,143739],{},[71,143738,1455],{}," 设置浮动",[1455,143741,142110,143742,143744],{},[71,143743,4602],{}," 设置宽高，宽度 248px，高度 163px",[1455,143746,143747,143748,143308,143751,143753,143754,143756,143757],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[71,143749,143750],{},"top 10px",[71,143752,1455],{},"设置相对定位（注意，最后一个",[71,143755,1455],{},"不用设置伪元素），可以利用 ",[71,143758,143759],{},"nth-child(-n+3){...}",[19,143761,142980],{},[153,143763,143764],{"className":129610,"code":141452,"language":129612,"meta":158,"style":158},[71,143765,143766,143774,143784,143794],{"__ignoreMap":158},[162,143767,143768,143770,143772],{"class":164,"line":165},[162,143769,54683],{"class":54373},[162,143771,140611],{"class":5082},[162,143773,1722],{"class":168},[162,143775,143776,143778,143780,143782],{"class":164,"line":197},[162,143777,140618],{"class":207},[162,143779,1730],{"class":168},[162,143781,10756],{"class":179},[162,143783,4433],{"class":168},[162,143785,143786,143788,143790,143792],{"class":164,"line":228},[162,143787,131226],{"class":207},[162,143789,1730],{"class":168},[162,143791,63937],{"class":207},[162,143793,4433],{"class":168},[162,143795,143796],{"class":164,"line":252},[162,143797,1498],{"class":168},[19,143799,143069],{},[153,143801,143802],{"className":129610,"code":141452,"language":129612,"meta":158,"style":158},[71,143803,143804,143812,143822,143832],{"__ignoreMap":158},[162,143805,143806,143808,143810],{"class":164,"line":165},[162,143807,54683],{"class":54373},[162,143809,140611],{"class":5082},[162,143811,1722],{"class":168},[162,143813,143814,143816,143818,143820],{"class":164,"line":197},[162,143815,140618],{"class":207},[162,143817,1730],{"class":168},[162,143819,10756],{"class":179},[162,143821,4433],{"class":168},[162,143823,143824,143826,143828,143830],{"class":164,"line":228},[162,143825,131226],{"class":207},[162,143827,1730],{"class":168},[162,143829,63937],{"class":207},[162,143831,4433],{"class":168},[162,143833,143834],{"class":164,"line":252},[162,143835,1498],{"class":168},[3284,143837,143839],{"id":143838},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[4602,143841],{"style":129466,"src":143842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,143844,143845],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,143847,143848],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,143850,143851,143854],{},[71,143852,143853],{},"box_hd"," 制作",[19,143856,143634,143857,143859],{},[71,143858,143853],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[4602,143861],{"style":129466,"src":143862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[4279,143864,143865,143870,143875,143878],{},[1455,143866,143867,143869],{},[71,143868,143853],{}," 给 30px 的高度，2个像素的下边框",[1455,143871,143872,143873],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[71,143874,142121],{},[1455,143876,143877],{},"左侧盒左浮动，右侧盒子右浮动",[1455,143879,143880,143882,143883,143885],{},[71,143881,3538],{},"标签之间的距离用左右的",[71,143884,33967],{},"撑开即可",[19,143887,143888],{},"结构代码",[153,143890,143891],{"className":129610,"code":142280,"language":129612,"meta":158,"style":158},[71,143892,143893,143899,143909],{"__ignoreMap":158},[162,143894,143895,143897],{"class":164,"line":165},[162,143896,133458],{"class":5082},[162,143898,1722],{"class":168},[162,143900,143901,143903,143905,143907],{"class":164,"line":197},[162,143902,134090],{"class":207},[162,143904,1730],{"class":168},[162,143906,26827],{"class":207},[162,143908,4433],{"class":168},[162,143910,143911],{"class":164,"line":228},[162,143912,1498],{"class":168},[19,143914,143915],{},"样式代码",[153,143917,143918],{"className":129610,"code":142280,"language":129612,"meta":158,"style":158},[71,143919,143920,143926,143936],{"__ignoreMap":158},[162,143921,143922,143924],{"class":164,"line":165},[162,143923,133458],{"class":5082},[162,143925,1722],{"class":168},[162,143927,143928,143930,143932,143934],{"class":164,"line":197},[162,143929,134090],{"class":207},[162,143931,1730],{"class":168},[162,143933,26827],{"class":207},[162,143935,4433],{"class":168},[162,143937,143938],{"class":164,"line":228},[162,143939,1498],{"class":168},[19,143941,143942,143854],{},[71,143943,143944],{},"box_bd",[19,143946,143947],{},"2 号盒子 box_bd，不要给高度",[4602,143949],{"style":129466,"src":143950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,143952,143953],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,143955,143956],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,143958,143959],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[4279,143961,143962,143974,143990],{},[1455,143963,143964,143966,143967,143970,143971,143973],{},[71,143965,143944],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[71,143968,143969],{},"tab_content","，在",[71,143972,143969],{}," 里面包裹tab选项卡对应的内容",[1455,143975,143976,143977,143980,143981,143983,143984,143986,143987,143989],{},"内容被一个大盒子包裹（",[71,143978,143979],{},"tab_list_item","），里面是 ",[71,143982,4279],{}," 包裹 5个 ",[71,143985,1455],{},"，每个",[71,143988,1455],{},"设置对应的宽度，然后设置浮动",[1455,143991,143992,143993,143995,143996,143998,143999],{},"而这5个",[71,143994,1455],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[71,143997,1455],{},"设置",[4279,144000,144001,144019,144022],{},[1455,144002,144003,144004,144006,144007,144009,144010,144012,144013,144015,144016,144018],{},"第一个小 ",[71,144005,1455],{}," 分为上下结构，上面是 ",[71,144008,4279],{}," 包裹 ",[71,144011,1455],{}," ，",[71,144014,1455],{},"里面包裹 ",[71,144017,3538],{},"，下面插入一张图片",[1455,144020,144021],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[1455,144023,144024,144025,144027,144028,144030,144031,144033],{},"后面的小 ",[71,144026,1455],{}," 里面先放一个",[71,144029,3538],{},"标签，然后在",[71,144032,3538],{},"标签里面插入图片即可",[19,144035,143888],{},[153,144037,144038],{"className":130357,"code":137112,"language":130359,"meta":158,"style":158},[71,144039,144040],{"__ignoreMap":158},[162,144041,144042,144044,144046,144048,144050,144052,144054,144056,144058,144060,144062,144064],{"class":164,"line":165},[162,144043,4187],{"class":168},[162,144045,4602],{"class":54373},[162,144047,58309],{"class":5082},[162,144049,173],{"class":168},[162,144051,137127],{"class":179},[162,144053,58317],{"class":5082},[162,144055,173],{"class":168},[162,144057,137134],{"class":179},[162,144059,137137],{"class":5082},[162,144061,173],{"class":168},[162,144063,137142],{"class":179},[162,144065,54380],{"class":168},[19,144067,143915],{},[153,144069,144070],{"className":130357,"code":137112,"language":130359,"meta":158,"style":158},[71,144071,144072],{"__ignoreMap":158},[162,144073,144074,144076,144078,144080,144082,144084,144086,144088,144090,144092,144094,144096],{"class":164,"line":165},[162,144075,4187],{"class":168},[162,144077,4602],{"class":54373},[162,144079,58309],{"class":5082},[162,144081,173],{"class":168},[162,144083,137127],{"class":179},[162,144085,58317],{"class":5082},[162,144087,173],{"class":168},[162,144089,137134],{"class":179},[162,144091,137137],{"class":5082},[162,144093,173],{"class":168},[162,144095,137142],{"class":179},[162,144097,54380],{"class":168},[19,144099,144100],{},"tab栏切换需求！！！！！！介绍：",[4602,144102],{"style":129466,"src":144103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[4279,144105,144106,144114,144120,144123],{},[1455,144107,144108,144111,144112],{},[71,144109,144110],{},"tab","栏的布局是 ",[71,144113,142121],{},[1455,144115,144116,144117,144119],{},"有多少个",[71,144118,144110],{},"选项卡，那么对应就有多少个内容",[1455,144121,144122],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[1455,144124,144125,144126,144129,144130,144132,144133,144135],{},"等后面我们学习了",[71,144127,144128],{},"js","之后，我们就会配合",[71,144131,144128],{},"来实现，",[71,144134,144110],{},"栏的切换",[14,144137,144139],{"id":144138},"_162-列表制作","16.2 列表制作",[3284,144141,144143],{"id":144142},"_1621-准备工作","16.2.1 准备工作",[4279,144145,144146,144149,144152,144155],{},[1455,144147,144148],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[1455,144150,144151],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[1455,144153,144154],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[1455,144156,144157],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[3284,144159,144161,144162,104082,144164,144166],{"id":144160},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[71,144163,134615],{},[71,144165,56783],{}," 修改",[4602,144168],{"style":129466,"src":144169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[4279,144171,144172],{},[1455,144173,144174],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,144176,142980],{},[153,144178,144179],{"className":129610,"code":135042,"language":129612,"meta":158,"style":158},[71,144180,144181,144185,144199,144203,144217,144221,144235,144239,144253,144257],{"__ignoreMap":158},[162,144182,144183],{"class":164,"line":165},[162,144184,135049],{"class":361},[162,144186,144187,144189,144191,144193,144195,144197],{"class":164,"line":197},[162,144188,135054],{"class":5082},[162,144190,82872],{"class":168},[162,144192,131970],{"class":207},[162,144194,1730],{"class":168},[162,144196,135063],{"class":207},[162,144198,132540],{"class":168},[162,144200,144201],{"class":164,"line":228},[162,144202,135070],{"class":361},[162,144204,144205,144207,144209,144211,144213,144215],{"class":164,"line":252},[162,144206,135075],{"class":5082},[162,144208,82872],{"class":168},[162,144210,131970],{"class":207},[162,144212,1730],{"class":168},[162,144214,57834],{"class":207},[162,144216,132540],{"class":168},[162,144218,144219],{"class":164,"line":328},[162,144220,135090],{"class":361},[162,144222,144223,144225,144227,144229,144231,144233],{"class":164,"line":466},[162,144224,135095],{"class":5082},[162,144226,82872],{"class":168},[162,144228,131970],{"class":207},[162,144230,1730],{"class":168},[162,144232,57901],{"class":207},[162,144234,132540],{"class":168},[162,144236,144237],{"class":164,"line":471},[162,144238,135110],{"class":361},[162,144240,144241,144243,144245,144247,144249,144251],{"class":164,"line":687},[162,144242,135115],{"class":5082},[162,144244,82872],{"class":168},[162,144246,131970],{"class":207},[162,144248,1730],{"class":168},[162,144250,89298],{"class":207},[162,144252,132540],{"class":168},[162,144254,144255],{"class":164,"line":692},[162,144256,135130],{"class":361},[162,144258,144259,144261,144263,144265,144267,144269],{"class":164,"line":698},[162,144260,135135],{"class":5082},[162,144262,82872],{"class":168},[162,144264,131970],{"class":207},[162,144266,1730],{"class":168},[162,144268,135144],{"class":207},[162,144270,132540],{"class":168},[19,144272,143069],{},[153,144274,144275],{"className":129610,"code":135042,"language":129612,"meta":158,"style":158},[71,144276,144277,144281,144295,144299,144313,144317,144331,144335,144349,144353],{"__ignoreMap":158},[162,144278,144279],{"class":164,"line":165},[162,144280,135049],{"class":361},[162,144282,144283,144285,144287,144289,144291,144293],{"class":164,"line":197},[162,144284,135054],{"class":5082},[162,144286,82872],{"class":168},[162,144288,131970],{"class":207},[162,144290,1730],{"class":168},[162,144292,135063],{"class":207},[162,144294,132540],{"class":168},[162,144296,144297],{"class":164,"line":228},[162,144298,135070],{"class":361},[162,144300,144301,144303,144305,144307,144309,144311],{"class":164,"line":252},[162,144302,135075],{"class":5082},[162,144304,82872],{"class":168},[162,144306,131970],{"class":207},[162,144308,1730],{"class":168},[162,144310,57834],{"class":207},[162,144312,132540],{"class":168},[162,144314,144315],{"class":164,"line":328},[162,144316,135090],{"class":361},[162,144318,144319,144321,144323,144325,144327,144329],{"class":164,"line":466},[162,144320,135095],{"class":5082},[162,144322,82872],{"class":168},[162,144324,131970],{"class":207},[162,144326,1730],{"class":168},[162,144328,57901],{"class":207},[162,144330,132540],{"class":168},[162,144332,144333],{"class":164,"line":471},[162,144334,135110],{"class":361},[162,144336,144337,144339,144341,144343,144345,144347],{"class":164,"line":687},[162,144338,135115],{"class":5082},[162,144340,82872],{"class":168},[162,144342,131970],{"class":207},[162,144344,1730],{"class":168},[162,144346,89298],{"class":207},[162,144348,132540],{"class":168},[162,144350,144351],{"class":164,"line":692},[162,144352,135130],{"class":361},[162,144354,144355,144357,144359,144361,144363,144365],{"class":164,"line":698},[162,144356,135135],{"class":5082},[162,144358,82872],{"class":168},[162,144360,131970],{"class":207},[162,144362,1730],{"class":168},[162,144364,135144],{"class":207},[162,144366,132540],{"class":168},[4279,144368,144369,144380],{},[1455,144370,144371,144372,144375,144376,104082,144378],{},"1 号盒子左侧浮动 ",[71,144373,144374],{},"sk_list"," 里面包含 ",[71,144377,4279],{},[71,144379,1455],{},[1455,144381,144382,144383,144375,144386,104082,144388],{},"2 号盒子左侧浮动 ",[71,144384,144385],{},"sk_con",[71,144387,4279],{},[71,144389,1455],{},[19,144391,142980],{},[153,144393,144394],{"className":129610,"code":142280,"language":129612,"meta":158,"style":158},[71,144395,144396,144402,144412],{"__ignoreMap":158},[162,144397,144398,144400],{"class":164,"line":165},[162,144399,133458],{"class":5082},[162,144401,1722],{"class":168},[162,144403,144404,144406,144408,144410],{"class":164,"line":197},[162,144405,134090],{"class":207},[162,144407,1730],{"class":168},[162,144409,26827],{"class":207},[162,144411,4433],{"class":168},[162,144413,144414],{"class":164,"line":228},[162,144415,1498],{"class":168},[19,144417,143069],{},[153,144419,144420],{"className":129610,"code":142280,"language":129612,"meta":158,"style":158},[71,144421,144422,144428,144438],{"__ignoreMap":158},[162,144423,144424,144426],{"class":164,"line":165},[162,144425,133458],{"class":5082},[162,144427,1722],{"class":168},[162,144429,144430,144432,144434,144436],{"class":164,"line":197},[162,144431,134090],{"class":207},[162,144433,1730],{"class":168},[162,144435,26827],{"class":207},[162,144437,4433],{"class":168},[162,144439,144440],{"class":164,"line":228},[162,144441,1498],{"class":168},[3284,144443,144445,144446],{"id":144444},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[71,144447,144448],{},"sk_container",[4602,144450],{"style":129466,"src":144451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[4279,144453,144454,144459],{},[1455,144455,143634,144456,144458],{},[71,144457,144448],{}," 给宽度 1200，不要给高度",[1455,144460,144461],{},"一定不要忘记清除浮动",[19,144463,142980],{},[153,144465,144466],{"className":129610,"code":142280,"language":129612,"meta":158,"style":158},[71,144467,144468,144474,144484],{"__ignoreMap":158},[162,144469,144470,144472],{"class":164,"line":165},[162,144471,133458],{"class":5082},[162,144473,1722],{"class":168},[162,144475,144476,144478,144480,144482],{"class":164,"line":197},[162,144477,134090],{"class":207},[162,144479,1730],{"class":168},[162,144481,26827],{"class":207},[162,144483,4433],{"class":168},[162,144485,144486],{"class":164,"line":228},[162,144487,1498],{"class":168},[1452,144489,144490],{},[1455,144491,144492],{},"sk_hd制作",[4279,144494,144495],{},[1455,144496,143714,144497,144500],{},[71,144498,144499],{},"sk_hd"," ，插入图片即可",[19,144502,142980],{},[153,144504,144505],{"className":130357,"code":137112,"language":130359,"meta":158,"style":158},[71,144506,144507],{"__ignoreMap":158},[162,144508,144509,144511,144513,144515,144517,144519,144521,144523,144525,144527,144529,144531],{"class":164,"line":165},[162,144510,4187],{"class":168},[162,144512,4602],{"class":54373},[162,144514,58309],{"class":5082},[162,144516,173],{"class":168},[162,144518,137127],{"class":179},[162,144520,58317],{"class":5082},[162,144522,173],{"class":168},[162,144524,137134],{"class":179},[162,144526,137137],{"class":5082},[162,144528,173],{"class":168},[162,144530,137142],{"class":179},[162,144532,54380],{"class":168},[1452,144534,144535],{"start":197},[1455,144536,144537],{},"sk_bd制作",[4279,144539,144540],{},[1455,144541,144542,144543,144546,144547,104082,144549,144551],{},"3 号盒子 ",[71,144544,144545],{},"sk_bd"," ，里面包含很多的 ",[71,144548,4279],{},[71,144550,1455],{},[4279,144552,144553,144562],{},[1455,144554,144555,144556,144558,144559,144561],{},"当鼠标移入到 ",[71,144557,1455],{}," 上面的时候显示红色的边框，在这里先给 ",[71,144560,1455],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[1455,144563,144564,144565,144567,144568,144570,144571,144574,144575,144577],{},"由于给每个 ",[71,144566,1455],{}," 都设置了外边距，导致一行的最后一个 ",[71,144569,1455],{}," 掉了下来，在这里我们利用 ",[71,144572,144573],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[71,144576,1455],{},"，去掉外边距就好了",[19,144579,142980],{},[153,144581,144582],{"className":129610,"code":141799,"language":129612,"meta":158,"style":158},[71,144583,144584,144590,144602],{"__ignoreMap":158},[162,144585,144586,144588],{"class":164,"line":165},[162,144587,54683],{"class":54373},[162,144589,1722],{"class":168},[162,144591,144592,144594,144596,144598,144600],{"class":164,"line":197},[162,144593,73535],{"class":207},[162,144595,1730],{"class":168},[162,144597,312],{"class":207},[162,144599,54628],{"class":207},[162,144601,4433],{"class":168},[162,144603,144604],{"class":164,"line":228},[162,144605,1498],{"class":168},[19,144607,143069],{},[153,144609,144610],{"className":129610,"code":141799,"language":129612,"meta":158,"style":158},[71,144611,144612,144618,144630],{"__ignoreMap":158},[162,144613,144614,144616],{"class":164,"line":165},[162,144615,54683],{"class":54373},[162,144617,1722],{"class":168},[162,144619,144620,144622,144624,144626,144628],{"class":164,"line":197},[162,144621,73535],{"class":207},[162,144623,1730],{"class":168},[162,144625,312],{"class":207},[162,144627,54628],{"class":207},[162,144629,4433],{"class":168},[162,144631,144632],{"class":164,"line":228},[162,144633,1498],{"class":168},[14,144635,144637],{"id":144636},"_163-注册页面制作","16.3 注册页面制作",[4602,144639],{"style":129466,"src":144640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,144642,144643,144645],{},[3453,144644,1529],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[4602,144647],{"style":129466,"src":144648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[3284,144650,144652],{"id":144651},"_1631-准备工作","16.3.1 准备工作",[4279,144654,144655,144658],{},[1455,144656,144657],{},"创建register.html，引入 base.css，引入favicon图标",[1455,144659,144660],{},"创建register.css ，在html页面进行引入",[3284,144662,144664,144665,144667],{"id":144663},"_1632-header-头部实现","16.3.2 ",[71,144666,134615],{}," 头部实现",[4279,144669,144670,144673],{},[1455,144671,144672],{},"整个内容用 版心 进行包裹",[1455,144674,144675],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,144677,142980],{},[153,144679,144680],{"className":130357,"code":137112,"language":130359,"meta":158,"style":158},[71,144681,144682],{"__ignoreMap":158},[162,144683,144684,144686,144688,144690,144692,144694,144696,144698,144700,144702,144704,144706],{"class":164,"line":165},[162,144685,4187],{"class":168},[162,144687,4602],{"class":54373},[162,144689,58309],{"class":5082},[162,144691,173],{"class":168},[162,144693,137127],{"class":179},[162,144695,58317],{"class":5082},[162,144697,173],{"class":168},[162,144699,137134],{"class":179},[162,144701,137137],{"class":5082},[162,144703,173],{"class":168},[162,144705,137142],{"class":179},[162,144707,54380],{"class":168},[19,144709,143069],{},[153,144711,144712],{"className":130357,"code":137112,"language":130359,"meta":158,"style":158},[71,144713,144714],{"__ignoreMap":158},[162,144715,144716,144718,144720,144722,144724,144726,144728,144730,144732,144734,144736,144738],{"class":164,"line":165},[162,144717,4187],{"class":168},[162,144719,4602],{"class":54373},[162,144721,58309],{"class":5082},[162,144723,173],{"class":168},[162,144725,137127],{"class":179},[162,144727,58317],{"class":5082},[162,144729,173],{"class":168},[162,144731,137134],{"class":179},[162,144733,137137],{"class":5082},[162,144735,173],{"class":168},[162,144737,137142],{"class":179},[162,144739,54380],{"class":168},[3284,144741,144743,144744,144747],{"id":144742},"_1633-registerarea-主体模块实现","16.3.3 ",[71,144745,144746],{},"registerarea"," 主体模块实现",[4602,144749],{"style":129466,"src":144750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,144752,144753],{},"整个大盒子 高度为 522px，设置4个边框",[19,144755,142980],{},[153,144757,144758],{"className":129610,"code":133767,"language":129612,"meta":158,"style":158},[71,144759,144760,144766,144782],{"__ignoreMap":158},[162,144761,144762,144764],{"class":164,"line":165},[162,144763,54683],{"class":54373},[162,144765,1722],{"class":168},[162,144767,144768,144770,144772,144774,144776,144778,144780],{"class":164,"line":197},[162,144769,73961],{"class":207},[162,144771,1730],{"class":168},[162,144773,208],{"class":207},[162,144775,54564],{"class":172},[162,144777,54593],{"class":207},[162,144779,133002],{"class":207},[162,144781,4433],{"class":168},[162,144783,144784],{"class":164,"line":228},[162,144785,1498],{"class":168},[19,144787,143069],{},[153,144789,144790],{"className":129610,"code":133767,"language":129612,"meta":158,"style":158},[71,144791,144792,144798,144814],{"__ignoreMap":158},[162,144793,144794,144796],{"class":164,"line":165},[162,144795,54683],{"class":54373},[162,144797,1722],{"class":168},[162,144799,144800,144802,144804,144806,144808,144810,144812],{"class":164,"line":197},[162,144801,73961],{"class":207},[162,144803,1730],{"class":168},[162,144805,208],{"class":207},[162,144807,54564],{"class":172},[162,144809,54593],{"class":207},[162,144811,133002],{"class":207},[162,144813,4433],{"class":168},[162,144815,144816],{"class":164,"line":228},[162,144817,1498],{"class":168},[19,144819,144820],{},"1号盒子 是一个 h3 标签，放标题",[4279,144822,144823],{},[1455,144824,144825],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,144827,142980],{},[153,144829,144830],{"className":129610,"code":142280,"language":129612,"meta":158,"style":158},[71,144831,144832,144838,144848],{"__ignoreMap":158},[162,144833,144834,144836],{"class":164,"line":165},[162,144835,133458],{"class":5082},[162,144837,1722],{"class":168},[162,144839,144840,144842,144844,144846],{"class":164,"line":197},[162,144841,134090],{"class":207},[162,144843,1730],{"class":168},[162,144845,26827],{"class":207},[162,144847,4433],{"class":168},[162,144849,144850],{"class":164,"line":228},[162,144851,1498],{"class":168},[19,144853,143069],{},[153,144855,144856],{"className":129610,"code":142280,"language":129612,"meta":158,"style":158},[71,144857,144858,144864,144874],{"__ignoreMap":158},[162,144859,144860,144862],{"class":164,"line":165},[162,144861,133458],{"class":5082},[162,144863,1722],{"class":168},[162,144865,144866,144868,144870,144872],{"class":164,"line":197},[162,144867,134090],{"class":207},[162,144869,1730],{"class":168},[162,144871,26827],{"class":207},[162,144873,4433],{"class":168},[162,144875,144876],{"class":164,"line":228},[162,144877,1498],{"class":168},[19,144879,144880],{},"2号盒子 里面放注册的内容",[4279,144882,144883,144886,144895,144909,144922,144925,144928,144946,144960],{},[1455,144884,144885],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[1455,144887,144888,144889,144891,144892,144894],{},"里面的内容利用 ",[71,144890,4279],{}," 包含 ",[71,144893,1455],{}," 来实现的（不需要用表格）",[1455,144896,142124,144897,144899,144900,144902,144903,144905,144906,144908],{},[71,144898,1455],{}," 里面，左侧放 ",[71,144901,36683],{}," 标签， 中间放",[71,144904,56891],{}," 标签， 右侧放 ",[71,144907,162],{}," 提示信息",[1455,144910,144911,144912,144914,144915,144917,144918,144921],{},"左侧 ",[71,144913,36683],{},"里面的文字都是右对齐，我们可以给",[71,144916,36683],{},"设置一个宽度（88px），然后利用",[71,144919,144920],{},"text-align"," 来设置右对齐",[1455,144923,144924],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[1455,144926,144927],{},"右侧 span修饰一下文字颜色",[1455,144929,144930,144931],{},"提示信息的样式优化",[4279,144932,144933,144936,144939],{},[1455,144934,144935],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[1455,144937,144938],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[1455,144940,144941,144942,144945],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[71,144943,144944],{},"vertical-algin"," 来设置 图片与文字对齐方式",[1455,144947,144948,144949],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[4279,144950,144951,144957],{},[1455,144952,144953,144954,144956],{},"设置 ",[71,144955,26644],{}," 的 左右 12px 的内边距，设置一下文字颜色",[1455,144958,144959],{},"分别设置 背景颜色",[1455,144961,144962,144963,144965],{},"同意协议 和 完成注册 都是用 ",[71,144964,1455],{}," 进行包裹",[19,144967,142980],{},[153,144969,144970],{"className":129610,"code":143553,"language":129612,"meta":158,"style":158},[71,144971,144972,144978,144988],{"__ignoreMap":158},[162,144973,144974,144976],{"class":164,"line":165},[162,144975,54683],{"class":54373},[162,144977,1722],{"class":168},[162,144979,144980,144982,144984,144986],{"class":164,"line":197},[162,144981,73943],{"class":207},[162,144983,1730],{"class":168},[162,144985,143570],{"class":207},[162,144987,4433],{"class":168},[162,144989,144990],{"class":164,"line":228},[162,144991,1498],{"class":168},[19,144993,143069],{},[153,144995,144996],{"className":129610,"code":143553,"language":129612,"meta":158,"style":158},[71,144997,144998,145004,145014],{"__ignoreMap":158},[162,144999,145000,145002],{"class":164,"line":165},[162,145001,54683],{"class":54373},[162,145003,1722],{"class":168},[162,145005,145006,145008,145010,145012],{"class":164,"line":197},[162,145007,73943],{"class":207},[162,145009,1730],{"class":168},[162,145011,143570],{"class":207},[162,145013,4433],{"class":168},[162,145015,145016],{"class":164,"line":228},[162,145017,1498],{"class":168},[3284,145019,145021],{"id":145020},"_1634-底部实现","16.3.4 底部实现",[19,145023,142980],{},[153,145025,145026],{"className":129610,"code":143553,"language":129612,"meta":158,"style":158},[71,145027,145028,145034,145044],{"__ignoreMap":158},[162,145029,145030,145032],{"class":164,"line":165},[162,145031,54683],{"class":54373},[162,145033,1722],{"class":168},[162,145035,145036,145038,145040,145042],{"class":164,"line":197},[162,145037,73943],{"class":207},[162,145039,1730],{"class":168},[162,145041,143570],{"class":207},[162,145043,4433],{"class":168},[162,145045,145046],{"class":164,"line":228},[162,145047,1498],{"class":168},[19,145049,143069],{},[153,145051,145052],{"className":130357,"code":133714,"language":130359,"meta":158,"style":158},[71,145053,145054,145058,145072,145076],{"__ignoreMap":158},[162,145055,145056],{"class":164,"line":165},[162,145057,133721],{"class":361},[162,145059,145060,145062,145064,145066,145068,145070],{"class":164,"line":197},[162,145061,4187],{"class":168},[162,145063,54683],{"class":54373},[162,145065,56556],{"class":5082},[162,145067,173],{"class":168},[162,145069,133734],{"class":179},[162,145071,54380],{"class":168},[162,145073,145074],{"class":164,"line":228},[162,145075,133741],{"class":168},[162,145077,145078,145080,145082],{"class":164,"line":252},[162,145079,54857],{"class":168},[162,145081,54683],{"class":54373},[162,145083,54380],{"class":168},[14,145085,145087],{"id":145086},"_164-项目总结","16.4 项目总结",[1452,145089,145090,145093,145096,145099],{},[1455,145091,145092],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[1455,145094,145095],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[1455,145097,145098],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[1455,145100,145101],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[4602,145103],{"style":129466,"src":145104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[1452,145106,145107],{"start":328},[1455,145108,145109],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[4602,145111],{"style":129466,"src":145112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[1452,145114,145115],{"start":466},[1455,145116,145117],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[4602,145119],{"style":129466,"src":145120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[153,145122,145123],{"className":130357,"code":139767,"language":130359,"meta":158,"style":158},[71,145124,145125],{"__ignoreMap":158},[162,145126,145127,145129,145131,145133,145135,145137,145139,145141,145143,145145,145147,145149],{"class":164,"line":165},[162,145128,4187],{"class":168},[162,145130,56891],{"class":54373},[162,145132,56894],{"class":5082},[162,145134,173],{"class":168},[162,145136,65766],{"class":179},[162,145138,18013],{"class":5082},[162,145140,173],{"class":168},[162,145142,139788],{"class":179},[162,145144,64088],{"class":5082},[162,145146,173],{"class":168},[162,145148,139795],{"class":179},[162,145150,54380],{"class":168},[1452,145152,145153,145156],{"start":471},[1455,145154,145155],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[1455,145157,145158],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[3219,145160,145161],{},"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":158,"searchDepth":197,"depth":197,"links":145163},[145164,145169,145176,145184],{"id":142790,"depth":197,"text":142791,"children":145165},[145166,145167,145168],{"id":142794,"depth":228,"text":142795},{"id":143525,"depth":228,"text":143526},{"id":143838,"depth":228,"text":143839},{"id":144138,"depth":197,"text":144139,"children":145170},[145171,145172,145174],{"id":144142,"depth":228,"text":144143},{"id":144160,"depth":228,"text":145173},"16.2.2 列表页 header 和 nav 修改",{"id":144444,"depth":228,"text":145175},"16.2.3 列表页主体 sk_container",{"id":144636,"depth":197,"text":144637,"children":145177},[145178,145179,145181,145183],{"id":144651,"depth":228,"text":144652},{"id":144663,"depth":228,"text":145180},"16.3.2 header 头部实现",{"id":144742,"depth":228,"text":145182},"16.3.3 registerarea 主体模块实现",{"id":145020,"depth":228,"text":145021},{"id":145086,"depth":197,"text":145087},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":142782,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":145191,"title":145192,"body":145193,"description":3241,"extension":3242,"meta":145301,"navigation":300,"path":145302,"seo":145303,"stem":145304,"__hash__":145305},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":145194,"toc":145296},[145195,145198,145202,145205,145208,145217,145226,145230,145235,145242,145260,145263,145266,145269,145272,145275,145278,145281,145284,145287,145290,145293],[10,145196,145192],{"id":145197},"_17-web服务器与网站发布",[14,145199,145201],{"id":145200},"_171-web服务器","17.1 Web服务器",[19,145203,145204],{},"把自己网站上传到服务器上，可以让其他人访问",[4602,145206],{"style":129466,"src":145207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,145209,145210,145213,145214],{},[3453,145211,145212],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[3453,145215,145216],{},"Web 服务器等",[19,145218,145219,145220,104082,145223,28832],{},"根据服务器在网络中所在的位置不同，又可分为 ",[3453,145221,145222],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[3453,145224,145225],{},"远程服务器",[3284,145227,145229],{"id":145228},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,145231,145232],{},[3453,145233,145234],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,145236,145237,145238],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[3538,145239,145240],{"href":145240,"rel":145241},"http:\u002F\u002Ffree.3v.do\u002F",[26956],[4279,145243,145244,145247,145250,145257],{},[1455,145245,145246],{},"去免费空间网站注册账号。",[1455,145248,145249],{},"记录下主机名、用户名、密码、域名。",[1455,145251,145252,145253,145256],{},"利用 ",[71,145254,145255],{},"utftp"," 软件 上传网站到远程服务器",[1455,145258,145259],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,145261,145262],{},"使用软件上传，对上传软件文件进行解压",[4602,145264],{"style":129466,"src":145265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[4602,145267],{"style":129466,"src":145268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,145270,145271],{},"输入刚刚申请的服务器账号信息：",[4602,145273],{"style":129466,"src":145274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[4602,145276],{"style":129466,"src":145277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[4602,145279],{"style":129466,"src":145280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[4602,145282],{"style":129466,"src":145283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,145285,145286],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[4602,145288],{"style":129466,"src":145289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,145291,145292],{},"浏览器输入域名即可访问",[19,145294,145295],{},"首页一定必须是index",{"title":158,"searchDepth":197,"depth":197,"links":145297},[145298],{"id":145200,"depth":197,"text":145201,"children":145299},[145300],{"id":145228,"depth":228,"text":145229},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":145192,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":145307,"title":145308,"body":145309,"description":3241,"extension":3242,"meta":146236,"navigation":300,"path":146237,"seo":146238,"stem":146239,"__hash__":146240},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":145310,"toc":146219},[145311,145314,145318,145321,145324,145335,145338,145342,145346,145351,145354,145357,145360,145363,145367,145393,145397,145401,145404,145407,145411,145444,145448,145451,145454,145518,145522,145526,145529,145532,145535,145539,145584,145588,145591,145621,145625,145629,145632,145635,145639,145642,145711,145714,145822,145824,145830,145834,145837,145840,145936,145939,145943,145967,145971,145974,145978,145981,145985,145988,145991,145994,145997,146001,146004,146007,146011,146015,146018,146021,146024,146027,146031,146034,146038,146041,146044,146089,146093,146097,146100,146103,146106,146138,146142,146145,146179,146183,146186,146216],[10,145312,145308],{"id":145313},"_18-2d动画与3d转换",[14,145315,145317],{"id":145316},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,145319,145320],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,145322,145323],{},"转换（transform）你可以简单理解为变形",[4279,145325,145326,145329,145332],{},[1455,145327,145328],{},"移动：translate",[1455,145330,145331],{},"旋转：rotate",[1455,145333,145334],{},"缩放：scale",[4602,145336],{"style":129466,"src":145337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[3284,145339,145341],{"id":145340},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[25089,145343,145345],{"id":145344},"_18111-translate介绍","18.1.1.1 translate介绍",[19,145347,145348,145349],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[3453,145350,136269],{},[4602,145352],{"style":129466,"src":145353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,145355,145356],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,145358,145359],{},"对于行内元素无效",[19,145361,145362],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[25089,145364,145366],{"id":145365},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[153,145368,145369],{"className":129610,"code":141799,"language":129612,"meta":158,"style":158},[71,145370,145371,145377,145389],{"__ignoreMap":158},[162,145372,145373,145375],{"class":164,"line":165},[162,145374,54683],{"class":54373},[162,145376,1722],{"class":168},[162,145378,145379,145381,145383,145385,145387],{"class":164,"line":197},[162,145380,73535],{"class":207},[162,145382,1730],{"class":168},[162,145384,312],{"class":207},[162,145386,54628],{"class":207},[162,145388,4433],{"class":168},[162,145390,145391],{"class":164,"line":228},[162,145392,1498],{"class":168},[3284,145394,145396],{"id":145395},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[25089,145398,145400],{"id":145399},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,145402,145403],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[4602,145405],{"style":129466,"src":145406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[25089,145408,145410],{"id":145409},"_18122-旋转效果","18.1.2.2 旋转效果",[153,145412,145414],{"className":129610,"code":145413,"language":129612,"meta":158,"style":158},"div {\n  transform: rotate(45deg);\n}\n",[71,145415,145416,145422,145440],{"__ignoreMap":158},[162,145417,145418,145420],{"class":164,"line":165},[162,145419,54683],{"class":54373},[162,145421,1722],{"class":168},[162,145423,145424,145426,145428,145431,145433,145435,145438],{"class":164,"line":197},[162,145425,139594],{"class":207},[162,145427,1730],{"class":168},[162,145429,145430],{"class":207},"rotate",[162,145432,604],{"class":168},[162,145434,3819],{"class":207},[162,145436,145437],{"class":172},"deg",[162,145439,5836],{"class":168},[162,145441,145442],{"class":164,"line":228},[162,145443,1498],{"class":168},[25089,145445,145447],{"id":145446},"_18123-三角做法","18.1.2.3 三角做法",[19,145449,145450],{},"该下标当经过最外层大盒子时会实现向上反转",[4602,145452],{"style":129466,"src":145453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[153,145455,145456],{"className":129610,"code":138130,"language":129612,"meta":158,"style":158},[71,145457,145458,145462,145468,145478,145488,145504,145514],{"__ignoreMap":158},[162,145459,145460],{"class":164,"line":165},[162,145461,138137],{"class":361},[162,145463,145464,145466],{"class":164,"line":197},[162,145465,138142],{"class":5082},[162,145467,1722],{"class":168},[162,145469,145470,145472,145474,145476],{"class":164,"line":228},[162,145471,73633],{"class":207},[162,145473,1730],{"class":168},[162,145475,312],{"class":207},[162,145477,4433],{"class":168},[162,145479,145480,145482,145484,145486],{"class":164,"line":252},[162,145481,73853],{"class":207},[162,145483,1730],{"class":168},[162,145485,312],{"class":207},[162,145487,4433],{"class":168},[162,145489,145490,145492,145494,145496,145498,145500,145502],{"class":164,"line":328},[162,145491,73961],{"class":207},[162,145493,1730],{"class":168},[162,145495,1006],{"class":207},[162,145497,54564],{"class":172},[162,145499,54593],{"class":207},[162,145501,67058],{"class":207},[162,145503,4433],{"class":168},[162,145505,145506,145508,145510,145512],{"class":164,"line":466},[162,145507,138185],{"class":207},[162,145509,1730],{"class":168},[162,145511,65437],{"class":207},[162,145513,4433],{"class":168},[162,145515,145516],{"class":164,"line":471},[162,145517,1498],{"class":168},[3284,145519,145521],{"id":145520},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[25089,145523,145525],{"id":145524},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,145527,145528],{},"设置中心点",[4602,145530],{"style":129466,"src":145531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,145533,145534],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[25089,145536,145538],{"id":145537},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[153,145540,145542],{"className":129610,"code":145541,"language":129612,"meta":158,"style":158},"\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",[71,145543,145544,145549,145555,145570,145575,145580],{"__ignoreMap":158},[162,145545,145546],{"class":164,"line":165},[162,145547,145548],{"class":361},"\u002F* 转换中心点 *\u002F\n",[162,145550,145551,145553],{"class":164,"line":197},[162,145552,54683],{"class":54373},[162,145554,1722],{"class":168},[162,145556,145557,145560,145562,145564,145566,145568],{"class":164,"line":228},[162,145558,145559],{"class":207},"  transform-origin",[162,145561,1730],{"class":168},[162,145563,54664],{"class":207},[162,145565,20235],{"class":207},[162,145567,133473],{"class":168},[162,145569,138283],{"class":361},[162,145571,145572],{"class":164,"line":252},[162,145573,145574],{"class":361},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[162,145576,145577],{"class":164,"line":328},[162,145578,145579],{"class":361},"  \u002F* transform-origin: left top; *\u002F\n",[162,145581,145582],{"class":164,"line":466},[162,145583,1498],{"class":168},[25089,145585,145587],{"id":145586},"_18133-旋转案例","18.1.3.3 旋转案例",[4602,145589],{"style":129466,"src":145590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[153,145592,145593],{"className":129610,"code":145413,"language":129612,"meta":158,"style":158},[71,145594,145595,145601,145617],{"__ignoreMap":158},[162,145596,145597,145599],{"class":164,"line":165},[162,145598,54683],{"class":54373},[162,145600,1722],{"class":168},[162,145602,145603,145605,145607,145609,145611,145613,145615],{"class":164,"line":197},[162,145604,139594],{"class":207},[162,145606,1730],{"class":168},[162,145608,145430],{"class":207},[162,145610,604],{"class":168},[162,145612,3819],{"class":207},[162,145614,145437],{"class":172},[162,145616,5836],{"class":168},[162,145618,145619],{"class":164,"line":228},[162,145620,1498],{"class":168},[3284,145622,145624],{"id":145623},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[25089,145626,145628],{"id":145627},"_18141-scale介绍","18.1.4.1 scale介绍",[19,145630,145631],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[4602,145633],{"style":129466,"src":145634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[25089,145636,145638],{"id":145637},"_18142-分页按钮","18.1.4.2 分页按钮",[4602,145640],{"style":129466,"src":145641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[153,145643,145645],{"className":129610,"code":145644,"language":129612,"meta":158,"style":158},"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",[71,145646,145647,145653,145669,145673,145677,145682,145688,145702,145707],{"__ignoreMap":158},[162,145648,145649,145651],{"class":164,"line":165},[162,145650,54683],{"class":54373},[162,145652,1722],{"class":168},[162,145654,145655,145657,145659,145662,145664,145667],{"class":164,"line":197},[162,145656,139594],{"class":207},[162,145658,1730],{"class":168},[162,145660,145661],{"class":207},"scale",[162,145663,604],{"class":168},[162,145665,145666],{"class":207},"1.2",[162,145668,5836],{"class":168},[162,145670,145671],{"class":164,"line":228},[162,145672,1498],{"class":168},[162,145674,145675],{"class":164,"line":252},[162,145676,139071],{"class":168},[162,145678,145679],{"class":164,"line":328},[162,145680,145681],{"class":361},"\u002F* 2D 缩放 *\u002F\n",[162,145683,145684,145686],{"class":164,"line":466},[162,145685,54683],{"class":54373},[162,145687,1722],{"class":168},[162,145689,145690,145692,145694,145696,145698,145700],{"class":164,"line":471},[162,145691,139594],{"class":207},[162,145693,1730],{"class":168},[162,145695,145661],{"class":207},[162,145697,604],{"class":168},[162,145699,145666],{"class":207},[162,145701,5836],{"class":168},[162,145703,145704],{"class":164,"line":687},[162,145705,145706],{"class":361},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[162,145708,145709],{"class":164,"line":692},[162,145710,1498],{"class":168},[19,145712,145713],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[153,145715,145717],{"className":129610,"code":145716,"language":129612,"meta":158,"style":158},"\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",[71,145718,145719,145724,145734,145755,145776,145780,145785,145791,145818],{"__ignoreMap":158},[162,145720,145721],{"class":164,"line":165},[162,145722,145723],{"class":361},"\u002F* 定义动画 *\u002F\n",[162,145725,145726,145729,145732],{"class":164,"line":197},[162,145727,145728],{"class":172},"@keyframes",[162,145730,145731],{"class":671}," move",[162,145733,1722],{"class":168},[162,145735,145736,145739,145741,145743,145745,145748,145750,145752],{"class":164,"line":228},[162,145737,145738],{"class":5082},"  0%",[162,145740,82872],{"class":168},[162,145742,51207],{"class":207},[162,145744,1730],{"class":168},[162,145746,145747],{"class":207},"translateX",[162,145749,604],{"class":168},[162,145751,312],{"class":207},[162,145753,145754],{"class":168},"); }\n",[162,145756,145757,145760,145762,145764,145766,145768,145770,145772,145774],{"class":164,"line":252},[162,145758,145759],{"class":5082},"  100%",[162,145761,82872],{"class":168},[162,145763,51207],{"class":207},[162,145765,1730],{"class":168},[162,145767,145747],{"class":207},[162,145769,604],{"class":168},[162,145771,3608],{"class":207},[162,145773,54564],{"class":172},[162,145775,145754],{"class":168},[162,145777,145778],{"class":164,"line":328},[162,145779,1498],{"class":168},[162,145781,145782],{"class":164,"line":466},[162,145783,145784],{"class":361},"\u002F* 调用动画 *\u002F\n",[162,145786,145787,145789],{"class":164,"line":471},[162,145788,54683],{"class":54373},[162,145790,1722],{"class":168},[162,145792,145793,145796,145798,145800,145802,145804,145806,145808,145810,145813,145816],{"class":164,"line":687},[162,145794,145795],{"class":207},"  animation",[162,145797,1730],{"class":168},[162,145799,138296],{"class":207},[162,145801,28210],{"class":207},[162,145803,3979],{"class":172},[162,145805,81745],{"class":207},[162,145807,2717],{"class":207},[162,145809,3979],{"class":172},[162,145811,145812],{"class":207}," infinite",[162,145814,145815],{"class":207}," alternate",[162,145817,4433],{"class":168},[162,145819,145820],{"class":164,"line":692},[162,145821,1498],{"class":168},[19,145823,145713],{},[153,145825,145828],{"className":145826,"code":145827,"language":8295},[8293],"\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",[71,145829,145827],{"__ignoreMap":158},[25089,145831,145833],{"id":145832},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,145835,145836],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[4602,145838],{"style":129466,"src":145839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[153,145841,145842],{"className":129610,"code":145716,"language":129612,"meta":158,"style":158},[71,145843,145844,145848,145856,145874,145894,145898,145902,145908,145932],{"__ignoreMap":158},[162,145845,145846],{"class":164,"line":165},[162,145847,145723],{"class":361},[162,145849,145850,145852,145854],{"class":164,"line":197},[162,145851,145728],{"class":172},[162,145853,145731],{"class":671},[162,145855,1722],{"class":168},[162,145857,145858,145860,145862,145864,145866,145868,145870,145872],{"class":164,"line":228},[162,145859,145738],{"class":5082},[162,145861,82872],{"class":168},[162,145863,51207],{"class":207},[162,145865,1730],{"class":168},[162,145867,145747],{"class":207},[162,145869,604],{"class":168},[162,145871,312],{"class":207},[162,145873,145754],{"class":168},[162,145875,145876,145878,145880,145882,145884,145886,145888,145890,145892],{"class":164,"line":252},[162,145877,145759],{"class":5082},[162,145879,82872],{"class":168},[162,145881,51207],{"class":207},[162,145883,1730],{"class":168},[162,145885,145747],{"class":207},[162,145887,604],{"class":168},[162,145889,3608],{"class":207},[162,145891,54564],{"class":172},[162,145893,145754],{"class":168},[162,145895,145896],{"class":164,"line":328},[162,145897,1498],{"class":168},[162,145899,145900],{"class":164,"line":466},[162,145901,145784],{"class":361},[162,145903,145904,145906],{"class":164,"line":471},[162,145905,54683],{"class":54373},[162,145907,1722],{"class":168},[162,145909,145910,145912,145914,145916,145918,145920,145922,145924,145926,145928,145930],{"class":164,"line":687},[162,145911,145795],{"class":207},[162,145913,1730],{"class":168},[162,145915,138296],{"class":207},[162,145917,28210],{"class":207},[162,145919,3979],{"class":172},[162,145921,81745],{"class":207},[162,145923,2717],{"class":207},[162,145925,3979],{"class":172},[162,145927,145812],{"class":207},[162,145929,145815],{"class":207},[162,145931,4433],{"class":168},[162,145933,145934],{"class":164,"line":692},[162,145935,1498],{"class":168},[19,145937,145938],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[3284,145940,145942],{"id":145941},"_1823-知识点回顾","18.2.3 知识点回顾",[153,145944,145945],{"className":129610,"code":131779,"language":129612,"meta":158,"style":158},[71,145946,145947,145953,145963],{"__ignoreMap":158},[162,145948,145949,145951],{"class":164,"line":165},[162,145950,54683],{"class":54373},[162,145952,1722],{"class":168},[162,145954,145955,145957,145959,145961],{"class":164,"line":197},[162,145956,131792],{"class":207},[162,145958,1730],{"class":168},[162,145960,64804],{"class":207},[162,145962,4433],{"class":168},[162,145964,145965],{"class":164,"line":228},[162,145966,1498],{"class":168},[14,145968,145970],{"id":145969},"_183-3d-转换","18.3 3D 转换",[19,145972,145973],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[3284,145975,145977],{"id":145976},"_1831-坐标轴认识","18.3.1 坐标轴认识",[4602,145979],{"style":129466,"src":145980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[3284,145982,145984],{"id":145983},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[4602,145986],{"style":129466,"src":145987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,145989,145990],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,145992,145993],{},"translate3d的效果需要搭配透视perspective来使用",[4602,145995],{"style":129466,"src":145996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[3284,145998,146000],{"id":145999},"_1833-透视-perspective","18.3.3 透视 perspective",[4602,146002],{"style":129466,"src":146003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,146005,146006],{},"透视写在父盒子上，单位为像素",[3284,146008,146010],{"id":146009},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[25089,146012,146014],{"id":146013},"_18341-分开解释","18.3.4.1 分开解释",[4602,146016],{"style":129466,"src":146017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[4602,146019],{"style":129466,"src":146020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[4602,146022],{"style":129466,"src":146023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,146025,146026],{},"总结来说就是左手原则",[25089,146028,146030],{"id":146029},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[4602,146032],{"style":129466,"src":146033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[3284,146035,146037],{"id":146036},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[4602,146039],{"style":129466,"src":146040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[4602,146042],{"style":129466,"src":146043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[153,146045,146047],{"className":129610,"code":146046,"language":129612,"meta":158,"style":158},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[71,146048,146049,146055,146068,146085],{"__ignoreMap":158},[162,146050,146051,146053],{"class":164,"line":165},[162,146052,54683],{"class":54373},[162,146054,1722],{"class":168},[162,146056,146057,146060,146062,146064,146066],{"class":164,"line":197},[162,146058,146059],{"class":207},"  perspective",[162,146061,1730],{"class":168},[162,146063,68141],{"class":207},[162,146065,54564],{"class":172},[162,146067,4433],{"class":168},[162,146069,146070,146072,146074,146077,146079,146081,146083],{"class":164,"line":228},[162,146071,139594],{"class":207},[162,146073,1730],{"class":168},[162,146075,146076],{"class":207},"rotateX",[162,146078,604],{"class":168},[162,146080,3819],{"class":207},[162,146082,145437],{"class":172},[162,146084,5836],{"class":168},[162,146086,146087],{"class":164,"line":252},[162,146088,1498],{"class":168},[3284,146090,146092],{"id":146091},"_1836-案例","18.3.6 案例",[25089,146094,146096],{"id":146095},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[4602,146098],{"style":129466,"src":146099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[4602,146101],{"style":129466,"src":146102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[4602,146104],{"style":129466,"src":146105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[153,146107,146109],{"className":129610,"code":146108,"language":129612,"meta":158,"style":158},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[71,146110,146111,146116,146122,146134],{"__ignoreMap":158},[162,146112,146113],{"class":164,"line":165},[162,146114,146115],{"class":361},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[162,146117,146118,146120],{"class":164,"line":197},[162,146119,136607],{"class":5082},[162,146121,1722],{"class":168},[162,146123,146124,146126,146128,146130,146132],{"class":164,"line":228},[162,146125,146059],{"class":207},[162,146127,1730],{"class":168},[162,146129,68141],{"class":207},[162,146131,54564],{"class":172},[162,146133,4433],{"class":168},[162,146135,146136],{"class":164,"line":252},[162,146137,1498],{"class":168},[25089,146139,146141],{"id":146140},"_18362-3d导航栏","18.3.6.2 3D导航栏",[4602,146143],{"style":129466,"src":146144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[153,146146,146147],{"className":130357,"code":133714,"language":130359,"meta":158,"style":158},[71,146148,146149,146153,146167,146171],{"__ignoreMap":158},[162,146150,146151],{"class":164,"line":165},[162,146152,133721],{"class":361},[162,146154,146155,146157,146159,146161,146163,146165],{"class":164,"line":197},[162,146156,4187],{"class":168},[162,146158,54683],{"class":54373},[162,146160,56556],{"class":5082},[162,146162,173],{"class":168},[162,146164,133734],{"class":179},[162,146166,54380],{"class":168},[162,146168,146169],{"class":164,"line":228},[162,146170,133741],{"class":168},[162,146172,146173,146175,146177],{"class":164,"line":252},[162,146174,54857],{"class":168},[162,146176,54683],{"class":54373},[162,146178,54380],{"class":168},[25089,146180,146182],{"id":146181},"_18363-旋转木马","18.3.6.3 旋转木马",[4602,146184],{"style":129466,"src":146185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[153,146187,146188],{"className":129610,"code":145413,"language":129612,"meta":158,"style":158},[71,146189,146190,146196,146212],{"__ignoreMap":158},[162,146191,146192,146194],{"class":164,"line":165},[162,146193,54683],{"class":54373},[162,146195,1722],{"class":168},[162,146197,146198,146200,146202,146204,146206,146208,146210],{"class":164,"line":197},[162,146199,139594],{"class":207},[162,146201,1730],{"class":168},[162,146203,145430],{"class":207},[162,146205,604],{"class":168},[162,146207,3819],{"class":207},[162,146209,145437],{"class":172},[162,146211,5836],{"class":168},[162,146213,146214],{"class":164,"line":228},[162,146215,1498],{"class":168},[3219,146217,146218],{},"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":158,"searchDepth":197,"depth":197,"links":146220},[146221,146228],{"id":145316,"depth":197,"text":145317,"children":146222},[146223,146224,146225,146226,146227],{"id":145340,"depth":228,"text":145341},{"id":145395,"depth":228,"text":145396},{"id":145520,"depth":228,"text":145521},{"id":145623,"depth":228,"text":145624},{"id":145941,"depth":228,"text":145942},{"id":145969,"depth":197,"text":145970,"children":146229},[146230,146231,146232,146233,146234,146235],{"id":145976,"depth":228,"text":145977},{"id":145983,"depth":228,"text":145984},{"id":145999,"depth":228,"text":146000},{"id":146009,"depth":228,"text":146010},{"id":146036,"depth":228,"text":146037},{"id":146091,"depth":228,"text":146092},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":145308,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":146242,"title":146243,"body":146244,"description":3241,"extension":3242,"meta":146447,"navigation":300,"path":146448,"seo":146449,"stem":146450,"__hash__":146451},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":146245,"toc":146436},[146246,146249,146253,146256,146259,146263,146266,146269,146272,146276,146279,146283,146286,146290,146293,146297,146311,146315,146340,146343,146346,146363,146367,146371,146374,146377,146381,146384,146387,146405,146409,146412,146426,146430,146433],[10,146247,146243],{"id":146248},"_19-移动端基础-前缀现状与视口",[14,146250,146252],{"id":146251},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[4602,146254],{"style":129466,"src":146255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,146257,146258],{},"意思就是加个前缀，增加兼容性",[14,146260,146262],{"id":146261},"_192-移动端现状认识","19.2 移动端现状认识",[4602,146264],{"style":129466,"src":146265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,146267,146268],{},"调试方法：",[4602,146270],{"style":129466,"src":146271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,146273,146275],{"id":146274},"_193-视口","19.3 视口",[19,146277,146278],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[3284,146280,146282],{"id":146281},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[4602,146284],{"style":129466,"src":146285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[3284,146287,146289],{"id":146288},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[4602,146291],{"style":129466,"src":146292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[3284,146294,146296],{"id":146295},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[4279,146298,146299,146302,146305,146308],{},[1455,146300,146301],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[1455,146303,146304],{},"理想视口，对设备来讲，是最理想的视口尺寸",[1455,146306,146307],{},"需要手动添写meta视口标签通知浏览器操作",[1455,146309,146310],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[3284,146312,146314],{"id":146313},"_1934-meta视口标签","19.3.4 meta视口标签",[153,146316,146318],{"className":130357,"code":146317,"language":130359,"meta":158,"style":158},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[71,146319,146320],{"__ignoreMap":158},[162,146321,146322,146324,146326,146328,146330,146332,146334,146336,146338],{"class":164,"line":165},[162,146323,4187],{"class":168},[162,146325,54417],{"class":54373},[162,146327,18013],{"class":5082},[162,146329,173],{"class":168},[162,146331,54464],{"class":179},[162,146333,54444],{"class":5082},[162,146335,173],{"class":168},[162,146337,54471],{"class":179},[162,146339,54380],{"class":168},[4602,146341],{"style":129466,"src":146342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,146344,146345],{},"标准视口设置：",[1452,146347,146348,146351,146354,146357,146360],{},[1455,146349,146350],{},"视口宽度和设备保持一致",[1455,146352,146353],{},"视口的默认缩放比例1.0",[1455,146355,146356],{},"不允许用户自行缩放",[1455,146358,146359],{},"最大允许的缩放比例1.0",[1455,146361,146362],{},"最小允许的缩放比例1.0",[3284,146364,146366],{"id":146365},"_1935-二倍图","19.3.5 二倍图",[25089,146368,146370],{"id":146369},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[4602,146372],{"style":129466,"src":146373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[4602,146375],{"style":129466,"src":146376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[25089,146378,146380],{"id":146379},"_19352-多倍图","19.3.5.2 多倍图",[4602,146382],{"style":129466,"src":146383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,146385,146386],{},"二倍图法，代码如下：",[153,146388,146390],{"className":129610,"code":146389,"language":129612,"meta":158,"style":158},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[71,146391,146392,146397],{"__ignoreMap":158},[162,146393,146394],{"class":164,"line":165},[162,146395,146396],{"class":361},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[162,146398,146399,146402],{"class":164,"line":197},[162,146400,146401],{"class":54373},"background-size",[162,146403,146404],{"class":168},": 50% 50%;\n",[25089,146406,146408],{"id":146407},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[4602,146410],{"style":129466,"src":146411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[1452,146413,146414,146417,146420,146423],{},[1455,146415,146416],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[1455,146418,146419],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[1455,146421,146422],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[1455,146424,146425],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[25089,146427,146429],{"id":146428},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[4602,146431],{"style":129466,"src":146432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[3219,146434,146435],{},"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":158,"searchDepth":197,"depth":197,"links":146437},[146438,146439,146440],{"id":146251,"depth":197,"text":146252},{"id":146261,"depth":197,"text":146262},{"id":146274,"depth":197,"text":146275,"children":146441},[146442,146443,146444,146445,146446],{"id":146281,"depth":228,"text":146282},{"id":146288,"depth":228,"text":146289},{"id":146295,"depth":228,"text":146296},{"id":146313,"depth":228,"text":146314},{"id":146365,"depth":228,"text":146366},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":146243,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":146453,"title":146454,"body":146455,"description":3241,"extension":3242,"meta":147332,"navigation":300,"path":147333,"seo":147334,"stem":147335,"__hash__":147336},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":146456,"toc":147316},[146457,146460,146464,146471,146474,146481,146484,146489,146492,146496,146500,146507,146510,146513,146517,146520,146523,146526,146529,146532,146536,146539,146543,146545,146548,146551,146554,146557,146559,146562,146564,146594,146596,146626,146630,146633,146637,146640,146657,146660,146663,146739,146741,146744,146747,146750,146753,146755,146758,146761,146765,146787,146790,146793,146797,146800,146806,146809,146813,146816,146819,146823,146826,146829,146832,146836,146839,146842,146845,146848,146852,146855,146859,146866,146869,146872,146875,146878,146888,146891,146894,146901,146904,146908,146911,146914,146918,146921,146924,146927,146972,146975,146978,146981,146983,147112,147114,147152,147155,147158,147160,147278,147280,147314],[10,146458,146454],{"id":146459},"_20-移动端布局实战上篇",[14,146461,146463],{"id":146462},"_201-移动端主流方案","20.1 移动端主流方案",[1452,146465,146466],{},[1455,146467,146468],{},[3453,146469,146470],{},"单独移动端页面（主流）",[4602,146472],{"style":129466,"src":146473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[1452,146475,146476],{"start":197},[1455,146477,146478],{},[3453,146479,146480],{},"响应式兼容PC移动端",[4602,146482],{"style":129466,"src":146483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[1452,146485,146486],{"start":228},[1455,146487,146488],{},"两种页面选型布局方式",[4602,146490],{"style":129466,"src":146491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,146493,146495],{"id":146494},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[3284,146497,146499],{"id":146498},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,146501,146502,146503],{},"官网地址： ",[3538,146504,146505],{"href":146505,"rel":146506},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[26956],[4602,146508],{"style":129466,"src":146509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[4602,146511],{"style":129466,"src":146512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[3284,146514,146516],{"id":146515},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[4602,146518],{"style":129466,"src":146519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[4602,146521],{"style":129466,"src":146522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,146524,146525],{},"去除高亮：",[19,146527,146528],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,146530,146531],{},"-webkit- tap-highlight-color: transparent;",[14,146533,146535],{"id":146534},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[4602,146537],{"style":129466,"src":146538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,146540,146542],{"id":146541},"_204-流式布局案例","20.4 流式布局案例",[19,146544,3344],{},[19,146546,146547],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,146549,146550],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,146552,146553],{},"图片格式：",[4602,146555],{"style":129466,"src":146556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,146558,138653],{},[4602,146560],{"style":129466,"src":146561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,146563,142980],{},[153,146565,146566],{"className":130357,"code":137112,"language":130359,"meta":158,"style":158},[71,146567,146568],{"__ignoreMap":158},[162,146569,146570,146572,146574,146576,146578,146580,146582,146584,146586,146588,146590,146592],{"class":164,"line":165},[162,146571,4187],{"class":168},[162,146573,4602],{"class":54373},[162,146575,58309],{"class":5082},[162,146577,173],{"class":168},[162,146579,137127],{"class":179},[162,146581,58317],{"class":5082},[162,146583,173],{"class":168},[162,146585,137134],{"class":179},[162,146587,137137],{"class":5082},[162,146589,173],{"class":168},[162,146591,137142],{"class":179},[162,146593,54380],{"class":168},[19,146595,143069],{},[153,146597,146598],{"className":130357,"code":137112,"language":130359,"meta":158,"style":158},[71,146599,146600],{"__ignoreMap":158},[162,146601,146602,146604,146606,146608,146610,146612,146614,146616,146618,146620,146622,146624],{"class":164,"line":165},[162,146603,4187],{"class":168},[162,146605,4602],{"class":54373},[162,146607,58309],{"class":5082},[162,146609,173],{"class":168},[162,146611,137127],{"class":179},[162,146613,58317],{"class":5082},[162,146615,173],{"class":168},[162,146617,137134],{"class":179},[162,146619,137137],{"class":5082},[162,146621,173],{"class":168},[162,146623,137142],{"class":179},[162,146625,54380],{"class":168},[14,146627,146629],{"id":146628},"_205-flex布局","20.5 flex布局",[4602,146631],{"style":129466,"src":146632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[3284,146634,146636],{"id":146635},"_2051-布局原理","20.5.1 布局原理",[19,146638,146639],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[4279,146641,146642,146645,146648,146651,146654],{},[1455,146643,146644],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[1455,146646,146647],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[1455,146649,146650],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[1455,146652,146653],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[1455,146655,146656],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,146658,146659],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,146661,146662],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[153,146664,146666],{"className":129610,"code":146665,"language":129612,"meta":158,"style":158},"\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",[71,146667,146668,146673,146680,146690,146702,146713,146724,146735],{"__ignoreMap":158},[162,146669,146670],{"class":164,"line":165},[162,146671,146672],{"class":361},"\u002F* Flex 弹性布局 *\u002F\n",[162,146674,146675,146678],{"class":164,"line":197},[162,146676,146677],{"class":5082},".container",[162,146679,1722],{"class":168},[162,146681,146682,146684,146686,146688],{"class":164,"line":228},[162,146683,131226],{"class":207},[162,146685,1730],{"class":168},[162,146687,54549],{"class":207},[162,146689,4433],{"class":168},[162,146691,146692,146695,146697,146700],{"class":164,"line":252},[162,146693,146694],{"class":207},"  flex-direction",[162,146696,1730],{"class":168},[162,146698,146699],{"class":207},"row",[162,146701,4433],{"class":168},[162,146703,146704,146707,146709,146711],{"class":164,"line":328},[162,146705,146706],{"class":207},"  justify-content",[162,146708,1730],{"class":168},[162,146710,54740],{"class":207},[162,146712,4433],{"class":168},[162,146714,146715,146718,146720,146722],{"class":164,"line":466},[162,146716,146717],{"class":207},"  align-items",[162,146719,1730],{"class":168},[162,146721,54664],{"class":207},[162,146723,4433],{"class":168},[162,146725,146726,146729,146731,146733],{"class":164,"line":471},[162,146727,146728],{"class":207},"  flex-wrap",[162,146730,1730],{"class":168},[162,146732,81675],{"class":207},[162,146734,4433],{"class":168},[162,146736,146737],{"class":164,"line":687},[162,146738,1498],{"class":168},[19,146740,73518],{},[19,146742,146743],{},".form-item .male-label {",[19,146745,146746],{},"   margin-right: 20px;",[19,146748,146749],{},"   display: inline-flex;",[19,146751,146752],{},"   align-items: center;",[19,146754,976],{},[4602,146756],{"style":129466,"src":146757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[4602,146759],{"style":129466,"src":146760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[3284,146762,146764],{"id":146763},"_2052-常见父项属性","20.5.2 常见父项属性",[1452,146766,146767,146770,146773,146776,146779,146782,146785],{},[1455,146768,146769],{},"flex-direction：设置主轴的方向",[1455,146771,146772],{},"justify-content：设置主轴上的子元素排列方式",[1455,146774,146775],{},"flex-wrap：设置子元素是否换行",[1455,146777,146778],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[1455,146780,146781],{},"align-items：设置侧轴上的子元素排列方式（单行）",[1455,146783,146784],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[1455,146786,146769],{},[4602,146788],{"style":129466,"src":146789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[4602,146791],{"style":129466,"src":146792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[1452,146794,146795],{"start":197},[1455,146796,146772],{},[4602,146798],{"style":129466,"src":146799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,146801,146802,146805],{},[71,146803,146804],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,146807,146808],{},"跟着主轴走",[1452,146810,146811],{"start":228},[1455,146812,146775],{},[4602,146814],{"style":129466,"src":146815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,146817,146818],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[1452,146820,146821],{"start":252},[1455,146822,146778],{},[4602,146824],{"style":129466,"src":146825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,146827,146828],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,146830,146831],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[1452,146833,146834],{"start":328},[1455,146835,146781],{},[4602,146837],{"style":129466,"src":146838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,146840,146841],{},"align-items与align-content之间的区别：",[19,146843,146844],{},"单找items，多找content",[4602,146846],{"style":129466,"src":146847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[1452,146849,146850],{"start":466},[1455,146851,146784],{},[4602,146853],{"style":129466,"src":146854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[3284,146856,146858],{"id":146857},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[1452,146860,146861],{},[1455,146862,146863],{},[3453,146864,146865],{},"flex 属性",[19,146867,146868],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[4602,146870],{"style":129466,"src":146871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,146873,146874],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,146876,146877],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[1452,146879,146880],{"start":197},[1455,146881,146882,16889,146885],{},[3453,146883,146884],{},"align-self",[3453,146886,146887],{},"控制子项自己在侧轴上的排列方式",[4602,146889],{"style":129466,"src":146890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,146892,146893],{},"单个子盒子在父盒子侧轴上的排列方式",[1452,146895,146896],{"start":228},[1455,146897,146898,146900],{},[3453,146899,98362],{}," 属性定义项目的排列顺序",[4602,146902],{"style":129466,"src":146903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[3284,146905,146907],{"id":146906},"_2054-背景线性渐变","20.5.4 背景线性渐变",[4602,146909],{"style":129466,"src":146910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,146912,146913],{},"必须要添加浏览器的私有前缀",[3284,146915,146917],{"id":146916},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,146919,146920],{},"学到最重要的知识：",[19,146922,146923],{},"flex处理这样的布局思路",[4602,146925],{"style":129466,"src":146926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[153,146928,146930],{"className":129610,"code":146929,"language":129612,"meta":158,"style":158},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[71,146931,146932,146938,146948,146958,146968],{"__ignoreMap":158},[162,146933,146934,146936],{"class":164,"line":165},[162,146935,146677],{"class":5082},[162,146937,1722],{"class":168},[162,146939,146940,146942,146944,146946],{"class":164,"line":197},[162,146941,131226],{"class":207},[162,146943,1730],{"class":168},[162,146945,54549],{"class":207},[162,146947,4433],{"class":168},[162,146949,146950,146952,146954,146956],{"class":164,"line":228},[162,146951,146706],{"class":207},[162,146953,1730],{"class":168},[162,146955,54664],{"class":207},[162,146957,4433],{"class":168},[162,146959,146960,146962,146964,146966],{"class":164,"line":252},[162,146961,146717],{"class":207},[162,146963,1730],{"class":168},[162,146965,54664],{"class":207},[162,146967,4433],{"class":168},[162,146969,146970],{"class":164,"line":328},[162,146971,1498],{"class":168},[19,146973,146974],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,146976,146977],{},"使用属性选择器",[4602,146979],{"style":129466,"src":146980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,146982,71956],{},[153,146984,146986],{"className":130357,"code":146985,"language":130359,"meta":158,"style":158},"\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",[71,146987,146988,146993,147007,147012,147032,147037,147056,147061,147080,147085,147104],{"__ignoreMap":158},[162,146989,146990],{"class":164,"line":165},[162,146991,146992],{"class":361},"\u003C!-- 携程网移动端案例结构 -->\n",[162,146994,146995,146997,146999,147001,147003,147005],{"class":164,"line":197},[162,146996,4187],{"class":168},[162,146998,54683],{"class":54373},[162,147000,56556],{"class":5082},[162,147002,173],{"class":168},[162,147004,95388],{"class":179},[162,147006,54380],{"class":168},[162,147008,147009],{"class":164,"line":228},[162,147010,147011],{"class":361},"  \u003C!-- 搜索栏 -->\n",[162,147013,147014,147016,147018,147020,147022,147025,147028,147030],{"class":164,"line":252},[162,147015,55215],{"class":168},[162,147017,54683],{"class":54373},[162,147019,56556],{"class":5082},[162,147021,173],{"class":168},[162,147023,147024],{"class":179},"\"search-index\"",[162,147026,147027],{"class":168},">...\u003C\u002F",[162,147029,54683],{"class":54373},[162,147031,54380],{"class":168},[162,147033,147034],{"class":164,"line":328},[162,147035,147036],{"class":361},"  \u003C!-- 焦点图 -->\n",[162,147038,147039,147041,147043,147045,147047,147050,147052,147054],{"class":164,"line":466},[162,147040,55215],{"class":168},[162,147042,54683],{"class":54373},[162,147044,56556],{"class":5082},[162,147046,173],{"class":168},[162,147048,147049],{"class":179},"\"focus\"",[162,147051,147027],{"class":168},[162,147053,54683],{"class":54373},[162,147055,54380],{"class":168},[162,147057,147058],{"class":164,"line":471},[162,147059,147060],{"class":361},"  \u003C!-- 主导航 -->\n",[162,147062,147063,147065,147067,147069,147071,147074,147076,147078],{"class":164,"line":687},[162,147064,55215],{"class":168},[162,147066,54683],{"class":54373},[162,147068,56556],{"class":5082},[162,147070,173],{"class":168},[162,147072,147073],{"class":179},"\"local-nav\"",[162,147075,147027],{"class":168},[162,147077,54683],{"class":54373},[162,147079,54380],{"class":168},[162,147081,147082],{"class":164,"line":692},[162,147083,147084],{"class":361},"  \u003C!-- 子导航 -->\n",[162,147086,147087,147089,147091,147093,147095,147098,147100,147102],{"class":164,"line":698},[162,147088,55215],{"class":168},[162,147090,54683],{"class":54373},[162,147092,56556],{"class":5082},[162,147094,173],{"class":168},[162,147096,147097],{"class":179},"\"nav-common\"",[162,147099,147027],{"class":168},[162,147101,54683],{"class":54373},[162,147103,54380],{"class":168},[162,147105,147106,147108,147110],{"class":164,"line":2955},[162,147107,54857],{"class":168},[162,147109,54683],{"class":54373},[162,147111,54380],{"class":168},[19,147113,73518],{},[153,147115,147116],{"className":129610,"code":140062,"language":129612,"meta":158,"style":158},[71,147117,147118,147132,147148],{"__ignoreMap":158},[162,147119,147120,147122,147124,147126,147128,147130],{"class":164,"line":165},[162,147121,56891],{"class":54373},[162,147123,4168],{"class":168},[162,147125,1083],{"class":5082},[162,147127,173],{"class":172},[162,147129,65766],{"class":179},[162,147131,140079],{"class":168},[162,147133,147134,147136,147138,147140,147142,147144,147146],{"class":164,"line":197},[162,147135,73961],{"class":207},[162,147137,1730],{"class":168},[162,147139,208],{"class":207},[162,147141,54564],{"class":172},[162,147143,54593],{"class":207},[162,147145,133190],{"class":207},[162,147147,4433],{"class":168},[162,147149,147150],{"class":164,"line":228},[162,147151,1498],{"class":168},[19,147153,147154],{},"总代码和效果展示：",[4602,147156],{"style":129466,"src":147157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,147159,71956],{},[153,147161,147162],{"className":130357,"code":146985,"language":130359,"meta":158,"style":158},[71,147163,147164,147168,147182,147186,147204,147208,147226,147230,147248,147252,147270],{"__ignoreMap":158},[162,147165,147166],{"class":164,"line":165},[162,147167,146992],{"class":361},[162,147169,147170,147172,147174,147176,147178,147180],{"class":164,"line":197},[162,147171,4187],{"class":168},[162,147173,54683],{"class":54373},[162,147175,56556],{"class":5082},[162,147177,173],{"class":168},[162,147179,95388],{"class":179},[162,147181,54380],{"class":168},[162,147183,147184],{"class":164,"line":228},[162,147185,147011],{"class":361},[162,147187,147188,147190,147192,147194,147196,147198,147200,147202],{"class":164,"line":252},[162,147189,55215],{"class":168},[162,147191,54683],{"class":54373},[162,147193,56556],{"class":5082},[162,147195,173],{"class":168},[162,147197,147024],{"class":179},[162,147199,147027],{"class":168},[162,147201,54683],{"class":54373},[162,147203,54380],{"class":168},[162,147205,147206],{"class":164,"line":328},[162,147207,147036],{"class":361},[162,147209,147210,147212,147214,147216,147218,147220,147222,147224],{"class":164,"line":466},[162,147211,55215],{"class":168},[162,147213,54683],{"class":54373},[162,147215,56556],{"class":5082},[162,147217,173],{"class":168},[162,147219,147049],{"class":179},[162,147221,147027],{"class":168},[162,147223,54683],{"class":54373},[162,147225,54380],{"class":168},[162,147227,147228],{"class":164,"line":471},[162,147229,147060],{"class":361},[162,147231,147232,147234,147236,147238,147240,147242,147244,147246],{"class":164,"line":687},[162,147233,55215],{"class":168},[162,147235,54683],{"class":54373},[162,147237,56556],{"class":5082},[162,147239,173],{"class":168},[162,147241,147073],{"class":179},[162,147243,147027],{"class":168},[162,147245,54683],{"class":54373},[162,147247,54380],{"class":168},[162,147249,147250],{"class":164,"line":692},[162,147251,147084],{"class":361},[162,147253,147254,147256,147258,147260,147262,147264,147266,147268],{"class":164,"line":698},[162,147255,55215],{"class":168},[162,147257,54683],{"class":54373},[162,147259,56556],{"class":5082},[162,147261,173],{"class":168},[162,147263,147097],{"class":179},[162,147265,147027],{"class":168},[162,147267,54683],{"class":54373},[162,147269,54380],{"class":168},[162,147271,147272,147274,147276],{"class":164,"line":2955},[162,147273,54857],{"class":168},[162,147275,54683],{"class":54373},[162,147277,54380],{"class":168},[19,147279,73518],{},[153,147281,147282],{"className":130357,"code":133714,"language":130359,"meta":158,"style":158},[71,147283,147284,147288,147302,147306],{"__ignoreMap":158},[162,147285,147286],{"class":164,"line":165},[162,147287,133721],{"class":361},[162,147289,147290,147292,147294,147296,147298,147300],{"class":164,"line":197},[162,147291,4187],{"class":168},[162,147293,54683],{"class":54373},[162,147295,56556],{"class":5082},[162,147297,173],{"class":168},[162,147299,133734],{"class":179},[162,147301,54380],{"class":168},[162,147303,147304],{"class":164,"line":228},[162,147305,133741],{"class":168},[162,147307,147308,147310,147312],{"class":164,"line":252},[162,147309,54857],{"class":168},[162,147311,54683],{"class":54373},[162,147313,54380],{"class":168},[3219,147315,141011],{},{"title":158,"searchDepth":197,"depth":197,"links":147317},[147318,147319,147323,147324,147325],{"id":146462,"depth":197,"text":146463},{"id":146494,"depth":197,"text":146495,"children":147320},[147321,147322],{"id":146498,"depth":228,"text":146499},{"id":146515,"depth":228,"text":146516},{"id":146534,"depth":197,"text":146535},{"id":146541,"depth":197,"text":146542},{"id":146628,"depth":197,"text":146629,"children":147326},[147327,147328,147329,147330,147331],{"id":146635,"depth":228,"text":146636},{"id":146763,"depth":228,"text":146764},{"id":146857,"depth":228,"text":146858},{"id":146906,"depth":228,"text":146907},{"id":146916,"depth":228,"text":146917},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":146454,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":147338,"title":147339,"body":147340,"description":3241,"extension":3242,"meta":148567,"navigation":300,"path":148568,"seo":148569,"stem":148570,"__hash__":148571},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":147341,"toc":148545},[147342,147345,147349,147353,147356,147359,147363,147368,147371,147374,147377,147380,147383,147440,147443,147448,147451,147454,147458,147469,147473,147476,147479,147486,147491,147495,147498,147504,147507,147511,147514,147521,147524,147527,147534,147537,147544,147547,147550,147557,147560,147563,147565,147582,147586,147589,147592,147595,147599,147602,147605,147608,147611,147614,147617,147619,147622,147625,147687,147690,147800,147807,147813,147816,147819,147823,147826,147830,147835,147838,147845,147848,147854,147859,147862,147865,147868,147871,147874,147877,147880,147883,147939,147941,147967,147971,147974,147977,147980,147988,147991,147994,147998,148054,148057,148061,148067,148078,148081,148086,148089,148092,148098,148101,148104,148107,148110,148113,148116,148119,148122,148147,148153,148156,148159,148162,148165,148168,148171,148176,148179,148182,148185,148193,148196,148203,148206,148209,148211,148235,148237,148240,148243,148246,148249,148252,148255,148258,148292,148295,148298,148332,148339,148342,148345,148348,148351,148354,148357,148364,148367,148370,148373,148376,148383,148386,148389,148396,148399,148402,148406,148409,148412,148415,148418,148421,148424,148427,148430,148432,148456,148458,148482,148486,148497,148500,148503,148506,148509,148512,148515,148518,148521,148524,148527,148530,148533,148536,148539,148542],[10,147343,147339],{"id":147344},"_21-移动端布局实战下篇",[14,147346,147348],{"id":147347},"_211-rem适配布局","21.1 rem适配布局",[3284,147350,147352],{"id":147351},"_2111-rem单位","21.1.1 rem单位",[4602,147354],{"style":129466,"src":147355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,147357,147358],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[3284,147360,147362],{"id":147361},"_2112-媒体查询","21.1.2 媒体查询",[1452,147364,147365],{},[1455,147366,147367],{},"参数介绍",[4602,147369],{"style":129466,"src":147370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[4602,147372],{"style":129466,"src":147373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[4602,147375],{"style":129466,"src":147376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[4602,147378],{"style":129466,"src":147379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[4602,147381],{"style":129466,"src":147382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[153,147384,147386],{"className":129610,"code":147385,"language":129612,"meta":158,"style":158},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[71,147387,147388,147393,147412,147419,147432,147436],{"__ignoreMap":158},[162,147389,147390],{"class":164,"line":165},[162,147391,147392],{"class":361},"\u002F* 媒体查询 *\u002F\n",[162,147394,147395,147398,147400,147403,147405,147408,147410],{"class":164,"line":197},[162,147396,147397],{"class":172},"@media",[162,147399,1003],{"class":168},[162,147401,147402],{"class":207},"max-width",[162,147404,1730],{"class":168},[162,147406,147407],{"class":207},"768",[162,147409,54564],{"class":172},[162,147411,15537],{"class":168},[162,147413,147414,147417],{"class":164,"line":228},[162,147415,147416],{"class":5082},"  .container",[162,147418,1722],{"class":168},[162,147420,147421,147424,147426,147428,147430],{"class":164,"line":252},[162,147422,147423],{"class":207},"    width",[162,147425,1730],{"class":168},[162,147427,3608],{"class":207},[162,147429,2708],{"class":172},[162,147431,4433],{"class":168},[162,147433,147434],{"class":164,"line":328},[162,147435,130406],{"class":168},[162,147437,147438],{"class":164,"line":466},[162,147439,1498],{"class":168},[19,147441,147442],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[1452,147444,147445],{"start":197},[1455,147446,147447],{},"引入资源",[4602,147449],{"style":129466,"src":147450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,147452,147453],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[3284,147455,147457],{"id":147456},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[4279,147459,147460,147463,147466],{},[1455,147461,147462],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[1455,147464,147465],{},"媒体查询可以根据不同设备宽度来修改样式",[1455,147467,147468],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,147470,147472],{"id":147471},"_212-less基础","21.2 Less基础",[19,147474,147475],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,147477,147478],{},"Less可以解决该问题，它是css的扩展语言",[19,147480,147481,147482],{},"Less中文网址： ",[3538,147483,147484],{"href":147484,"rel":147485},"http:\u002F\u002Flesscss.cn\u002F",[26956],[19,147487,147488],{},[3453,147489,147490],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[3284,147492,147494],{"id":147493},"_2121-less安装","21.2.1 less安装",[19,147496,147497],{},"如果使用vscode，则无需进行下方安装步骤",[19,147499,147500],{},[3538,147501,147502],{"href":147502,"rel":147503},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[26956],[4602,147505],{"style":129466,"src":147506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[3284,147508,147510],{"id":147509},"_2122-less使用","21.2.2 less使用",[19,147512,147513],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[1452,147515,147516],{},[1455,147517,147518],{},[3453,147519,147520],{},"Less 变量",[4602,147522],{"style":129466,"src":147523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[4602,147525],{"style":129466,"src":147526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[1452,147528,147529],{"start":197},[1455,147530,147531],{},[3453,147532,147533],{},"Less 编译",[4602,147535],{"style":129466,"src":147536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[1452,147538,147539],{"start":228},[1455,147540,147541],{},[3453,147542,147543],{},"Less 嵌套",[4602,147545],{"style":129466,"src":147546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[4602,147548],{"style":129466,"src":147549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[1452,147551,147552],{"start":252},[1455,147553,147554],{},[3453,147555,147556],{},"Less 运算",[4602,147558],{"style":129466,"src":147559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,147561,147562],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,147564,3344],{},[4279,147566,147567,147570,147573,147576,147579],{},[1455,147568,147569],{},"乘号（*）和除号（\u002F）的写法",[1455,147571,147572],{},"运算符中间左右有个空格隔开 1px + 5",[1455,147574,147575],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[1455,147577,147578],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[1455,147580,147581],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,147583,147585],{"id":147584},"_213-rem-适配方案","21.3 rem 适配方案",[19,147587,147588],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,147590,147591],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[4602,147593],{"style":129466,"src":147594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[3284,147596,147598],{"id":147597},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,147600,147601],{},"rem + 媒体查询 + less 技术",[4602,147603],{"style":129466,"src":147604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,147606,147607],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,147609,147610],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[4602,147612],{"style":129466,"src":147613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,147615,147616],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,147618,17727],{},[4602,147620],{"style":129466,"src":147621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,147623,147624],{},"index.html:",[153,147626,147628],{"className":129610,"code":147627,"language":129612,"meta":158,"style":158},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[71,147629,147630,147635,147641,147657,147661,147667,147683],{"__ignoreMap":158},[162,147631,147632],{"class":164,"line":165},[162,147633,147634],{"class":361},"\u002F* rem 适配方案 *\u002F\n",[162,147636,147637,147639],{"class":164,"line":197},[162,147638,53708],{"class":54373},[162,147640,1722],{"class":168},[162,147642,147643,147645,147647,147650,147652,147654],{"class":164,"line":228},[162,147644,73691],{"class":207},[162,147646,1730],{"class":168},[162,147648,147649],{"class":207},"62.5",[162,147651,2708],{"class":172},[162,147653,133473],{"class":168},[162,147655,147656],{"class":361},"\u002F* 1rem = 10px *\u002F\n",[162,147658,147659],{"class":164,"line":252},[162,147660,1498],{"class":168},[162,147662,147663,147665],{"class":164,"line":328},[162,147664,133458],{"class":5082},[162,147666,1722],{"class":168},[162,147668,147669,147671,147673,147675,147678,147680],{"class":164,"line":466},[162,147670,73633],{"class":207},[162,147672,1730],{"class":168},[162,147674,1006],{"class":207},[162,147676,147677],{"class":172},"rem",[162,147679,133473],{"class":168},[162,147681,147682],{"class":361},"\u002F* 100px *\u002F\n",[162,147684,147685],{"class":164,"line":471},[162,147686,1498],{"class":168},[19,147688,147689],{},"common.less",[153,147691,147693],{"className":129610,"code":147692,"language":129612,"meta":158,"style":158},"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",[71,147694,147695,147701,147716,147720,147726,147740,147744,147748,147752,147758,147772,147776,147782,147796],{"__ignoreMap":158},[162,147696,147697,147699],{"class":164,"line":165},[162,147698,53708],{"class":54373},[162,147700,1722],{"class":168},[162,147702,147703,147705,147707,147709,147711,147713],{"class":164,"line":197},[162,147704,73691],{"class":207},[162,147706,1730],{"class":168},[162,147708,147649],{"class":207},[162,147710,2708],{"class":172},[162,147712,29157],{"class":168},[162,147714,147715],{"class":361},"\u002F* 10px *\u002F\n",[162,147717,147718],{"class":164,"line":228},[162,147719,1498],{"class":168},[162,147721,147722,147724],{"class":164,"line":252},[162,147723,54683],{"class":54373},[162,147725,1722],{"class":168},[162,147727,147728,147730,147732,147734,147736,147738],{"class":164,"line":328},[162,147729,73633],{"class":207},[162,147731,1730],{"class":168},[162,147733,1006],{"class":207},[162,147735,147677],{"class":172},[162,147737,29157],{"class":168},[162,147739,147682],{"class":361},[162,147741,147742],{"class":164,"line":466},[162,147743,1498],{"class":168},[162,147745,147746],{"class":164,"line":471},[162,147747,139071],{"class":168},[162,147749,147750],{"class":164,"line":687},[162,147751,147634],{"class":361},[162,147753,147754,147756],{"class":164,"line":692},[162,147755,53708],{"class":54373},[162,147757,1722],{"class":168},[162,147759,147760,147762,147764,147766,147768,147770],{"class":164,"line":698},[162,147761,73691],{"class":207},[162,147763,1730],{"class":168},[162,147765,147649],{"class":207},[162,147767,2708],{"class":172},[162,147769,133473],{"class":168},[162,147771,147656],{"class":361},[162,147773,147774],{"class":164,"line":2955},[162,147775,1498],{"class":168},[162,147777,147778,147780],{"class":164,"line":2960},[162,147779,133458],{"class":5082},[162,147781,1722],{"class":168},[162,147783,147784,147786,147788,147790,147792,147794],{"class":164,"line":2971},[162,147785,73633],{"class":207},[162,147787,1730],{"class":168},[162,147789,1006],{"class":207},[162,147791,147677],{"class":172},[162,147793,133473],{"class":168},[162,147795,147682],{"class":361},[162,147797,147798],{"class":164,"line":2984},[162,147799,1498],{"class":168},[19,147801,147802,147803,147806],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[26644,147804,147805],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[153,147808,147811],{"className":147809,"code":147810,"language":8295},[8293],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[71,147812,147810],{"__ignoreMap":158},[19,147814,147815],{},"less保存时会自动变成.css文件",[19,147817,147818],{},"好好搞懂上述代码写法",[3284,147820,147822],{"id":147821},"_2132-样式导入样式","21.3.2 样式导入样式",[4602,147824],{"style":129466,"src":147825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[3284,147827,147829],{"id":147828},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[1452,147831,147832],{},[1455,147833,147834],{},"准备工作",[4602,147836],{"style":129466,"src":147837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,147839,147840,147841],{},"github地址：",[3538,147842,147843],{"href":147843,"rel":147844},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[26956],[19,147846,147847],{},"下载之后，将index.js文件拖到项目中就可以了",[19,147849,147850,147851],{},"js文件引入到index.html中使用的是",[71,147852,147853],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[1452,147855,147856],{"start":197},[1455,147857,147858],{},"vscode插件",[4602,147860],{"style":129466,"src":147861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,147863,147864],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,147866,147867],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[4602,147869],{"style":129466,"src":147870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,147872,147873],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[4602,147875],{"style":129466,"src":147876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,147878,147879],{},"修改成75就可以，alt+z为快捷键",[19,147881,147882],{},"index.css：",[153,147884,147885],{"className":129610,"code":147627,"language":129612,"meta":158,"style":158},[71,147886,147887,147891,147897,147911,147915,147921,147935],{"__ignoreMap":158},[162,147888,147889],{"class":164,"line":165},[162,147890,147634],{"class":361},[162,147892,147893,147895],{"class":164,"line":197},[162,147894,53708],{"class":54373},[162,147896,1722],{"class":168},[162,147898,147899,147901,147903,147905,147907,147909],{"class":164,"line":228},[162,147900,73691],{"class":207},[162,147902,1730],{"class":168},[162,147904,147649],{"class":207},[162,147906,2708],{"class":172},[162,147908,133473],{"class":168},[162,147910,147656],{"class":361},[162,147912,147913],{"class":164,"line":252},[162,147914,1498],{"class":168},[162,147916,147917,147919],{"class":164,"line":328},[162,147918,133458],{"class":5082},[162,147920,1722],{"class":168},[162,147922,147923,147925,147927,147929,147931,147933],{"class":164,"line":466},[162,147924,73633],{"class":207},[162,147926,1730],{"class":168},[162,147928,1006],{"class":207},[162,147930,147677],{"class":172},[162,147932,133473],{"class":168},[162,147934,147682],{"class":361},[162,147936,147937],{"class":164,"line":471},[162,147938,1498],{"class":168},[19,147940,147624],{},[153,147942,147943],{"className":129610,"code":130014,"language":129612,"meta":158,"style":158},[71,147944,147945,147951,147963],{"__ignoreMap":158},[162,147946,147947,147949],{"class":164,"line":165},[162,147948,54872],{"class":54373},[162,147950,1722],{"class":168},[162,147952,147953,147955,147957,147959,147961],{"class":164,"line":197},[162,147954,73691],{"class":207},[162,147956,1730],{"class":168},[162,147958,3888],{"class":207},[162,147960,54564],{"class":172},[162,147962,4433],{"class":168},[162,147964,147965],{"class":164,"line":228},[162,147966,1498],{"class":168},[14,147968,147970],{"id":147969},"_214-响应式开发","21.4 响应式开发",[19,147972,147973],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[4602,147975],{"style":129466,"src":147976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,147978,147979],{},"做法：",[4279,147981,147982,147985],{},[1455,147983,147984],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[1455,147986,147987],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[4602,147989],{"style":129466,"src":147990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,147992,147993],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[3284,147995,147997],{"id":147996},"_2141-简单代码示范","21.4.1 简单代码示范",[153,147999,148000],{"className":129610,"code":147627,"language":129612,"meta":158,"style":158},[71,148001,148002,148006,148012,148026,148030,148036,148050],{"__ignoreMap":158},[162,148003,148004],{"class":164,"line":165},[162,148005,147634],{"class":361},[162,148007,148008,148010],{"class":164,"line":197},[162,148009,53708],{"class":54373},[162,148011,1722],{"class":168},[162,148013,148014,148016,148018,148020,148022,148024],{"class":164,"line":228},[162,148015,73691],{"class":207},[162,148017,1730],{"class":168},[162,148019,147649],{"class":207},[162,148021,2708],{"class":172},[162,148023,133473],{"class":168},[162,148025,147656],{"class":361},[162,148027,148028],{"class":164,"line":252},[162,148029,1498],{"class":168},[162,148031,148032,148034],{"class":164,"line":328},[162,148033,133458],{"class":5082},[162,148035,1722],{"class":168},[162,148037,148038,148040,148042,148044,148046,148048],{"class":164,"line":466},[162,148039,73633],{"class":207},[162,148041,1730],{"class":168},[162,148043,1006],{"class":207},[162,148045,147677],{"class":172},[162,148047,133473],{"class":168},[162,148049,147682],{"class":361},[162,148051,148052],{"class":164,"line":471},[162,148053,1498],{"class":168},[19,148055,148056],{},"父盒子一般命名为container",[3284,148058,148060],{"id":148059},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,148062,148063,148064],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[3453,148065,148066],{},"使得 Web 开发更加快捷",[4279,148068,148069],{},[1455,148070,148071,148072],{},"官网：",[3453,148073,148074],{},[3538,148075,148076],{"href":148076,"rel":148077},"http:\u002F\u002Fgetbootstrap.com\u002F",[26956],[19,148079,148080],{},"可以直接去官网拿现成的东西",[1452,148082,148083],{},[1455,148084,148085],{},"Bootstrap的使用",[19,148087,148088],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,148090,148091],{},"Bootstrap 使用四步曲：",[19,148093,148094,148097],{},[3453,148095,148096],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[4602,148099],{"style":129466,"src":148100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,148102,148103],{},"打开Bootstrap官网，然后下载",[4602,148105],{"style":129466,"src":148106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[4602,148108],{"style":129466,"src":148109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,148111,148112],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,148114,148115],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,148117,148118],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[4602,148120],{"style":129466,"src":148121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[153,148123,148125],{"className":129610,"code":148124,"language":129612,"meta":158,"style":158},".center {\n  color: red;\n}\n",[71,148126,148127,148133,148143],{"__ignoreMap":158},[162,148128,148129,148131],{"class":164,"line":165},[162,148130,129901],{"class":5082},[162,148132,1722],{"class":168},[162,148134,148135,148137,148139,148141],{"class":164,"line":197},[162,148136,73970],{"class":207},[162,148138,1730],{"class":168},[162,148140,60490],{"class":207},[162,148142,4433],{"class":168},[162,148144,148145],{"class":164,"line":228},[162,148146,1498],{"class":168},[19,148148,148149,148152],{},[71,148150,148151],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[4602,148154],{"style":129466,"src":148155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[4602,148157],{"style":129466,"src":148158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[4602,148160],{"style":129466,"src":148161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,148163,148164],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[4602,148166],{"style":129466,"src":148167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,148169,148170],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[1452,148172,148173],{"start":197},[1455,148174,148175],{},"布局容器",[4602,148177],{"style":129466,"src":148178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,148180,148181],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,148183,148184],{},"container-fluid用于移动式布局比较方便",[1452,148186,148187],{"start":228},[1455,148188,148189,148190],{},"bootstrap ",[3453,148191,148192],{},"栅格系统原理",[4602,148194],{"style":129466,"src":148195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[1452,148197,148198],{"start":252},[1455,148199,148200],{},[3453,148201,148202],{},"栅格选项参数",[4602,148204],{"style":129466,"src":148205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,148207,148208],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,148210,17727],{},[153,148212,148213],{"className":129610,"code":148124,"language":129612,"meta":158,"style":158},[71,148214,148215,148221,148231],{"__ignoreMap":158},[162,148216,148217,148219],{"class":164,"line":165},[162,148218,129901],{"class":5082},[162,148220,1722],{"class":168},[162,148222,148223,148225,148227,148229],{"class":164,"line":197},[162,148224,73970],{"class":207},[162,148226,1730],{"class":168},[162,148228,60490],{"class":207},[162,148230,4433],{"class":168},[162,148232,148233],{"class":164,"line":228},[162,148234,1498],{"class":168},[19,148236,138653],{},[4602,148238],{"style":129466,"src":148239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,148241,148242],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,148244,148245],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,148247,148248],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,148250,148251],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,148253,148254],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,148256,148257],{},"汇总展示说明：",[153,148259,148260],{"className":130357,"code":133714,"language":130359,"meta":158,"style":158},[71,148261,148262,148266,148280,148284],{"__ignoreMap":158},[162,148263,148264],{"class":164,"line":165},[162,148265,133721],{"class":361},[162,148267,148268,148270,148272,148274,148276,148278],{"class":164,"line":197},[162,148269,4187],{"class":168},[162,148271,54683],{"class":54373},[162,148273,56556],{"class":5082},[162,148275,173],{"class":168},[162,148277,133734],{"class":179},[162,148279,54380],{"class":168},[162,148281,148282],{"class":164,"line":228},[162,148283,133741],{"class":168},[162,148285,148286,148288,148290],{"class":164,"line":252},[162,148287,54857],{"class":168},[162,148289,54683],{"class":54373},[162,148291,54380],{"class":168},[4602,148293],{"style":129466,"src":148294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,148296,148297],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[153,148299,148300],{"className":130357,"code":133714,"language":130359,"meta":158,"style":158},[71,148301,148302,148306,148320,148324],{"__ignoreMap":158},[162,148303,148304],{"class":164,"line":165},[162,148305,133721],{"class":361},[162,148307,148308,148310,148312,148314,148316,148318],{"class":164,"line":197},[162,148309,4187],{"class":168},[162,148311,54683],{"class":54373},[162,148313,56556],{"class":5082},[162,148315,173],{"class":168},[162,148317,133734],{"class":179},[162,148319,54380],{"class":168},[162,148321,148322],{"class":164,"line":228},[162,148323,133741],{"class":168},[162,148325,148326,148328,148330],{"class":164,"line":252},[162,148327,54857],{"class":168},[162,148329,54683],{"class":54373},[162,148331,54380],{"class":168},[1452,148333,148334],{"start":328},[1455,148335,148336],{},[3453,148337,148338],{},"列嵌套",[4602,148340],{"style":129466,"src":148341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,148343,148344],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,148346,148347],{},"没加row内部这样：",[4602,148349],{"style":129466,"src":148350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,148352,148353],{},"加上row之后内部为：",[4602,148355],{"style":129466,"src":148356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[1452,148358,148359],{"start":466},[1455,148360,148361],{},[3453,148362,148363],{},"列偏移",[4602,148365],{"style":129466,"src":148366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,148368,148369],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,148371,148372],{},"要加偏移量，即偏移份数",[19,148374,148375],{},"偏移的份数=12-两个盒子的份数",[1452,148377,148378],{"start":471},[1455,148379,148380],{},[3453,148381,148382],{},"列排序",[4602,148384],{"style":129466,"src":148385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,148387,148388],{},"pull拉左；push推右",[1452,148390,148391],{"start":687},[1455,148392,148393],{},[3453,148394,148395],{},"响应式工具",[4602,148397],{"style":129466,"src":148398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,148400,148401],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[3284,148403,148405],{"id":148404},"_2143-响应式小项目","21.4.3 响应式小项目",[19,148407,148408],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,148410,148411],{},"ul {",[19,148413,148414],{},"list-style: none;",[19,148416,148417],{},"margin:0;",[19,148419,148420],{},"padding:0; }",[4602,148422],{"style":129466,"src":148423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[4602,148425],{"style":129466,"src":148426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,148428,148429],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,148431,71956],{},[153,148433,148434],{"className":129610,"code":142280,"language":129612,"meta":158,"style":158},[71,148435,148436,148442,148452],{"__ignoreMap":158},[162,148437,148438,148440],{"class":164,"line":165},[162,148439,133458],{"class":5082},[162,148441,1722],{"class":168},[162,148443,148444,148446,148448,148450],{"class":164,"line":197},[162,148445,134090],{"class":207},[162,148447,1730],{"class":168},[162,148449,26827],{"class":207},[162,148451,4433],{"class":168},[162,148453,148454],{"class":164,"line":228},[162,148455,1498],{"class":168},[19,148457,73518],{},[153,148459,148460],{"className":129610,"code":142280,"language":129612,"meta":158,"style":158},[71,148461,148462,148468,148478],{"__ignoreMap":158},[162,148463,148464,148466],{"class":164,"line":165},[162,148465,133458],{"class":5082},[162,148467,1722],{"class":168},[162,148469,148470,148472,148474,148476],{"class":164,"line":197},[162,148471,134090],{"class":207},[162,148473,1730],{"class":168},[162,148475,26827],{"class":207},[162,148477,4433],{"class":168},[162,148479,148480],{"class":164,"line":228},[162,148481,1498],{"class":168},[14,148483,148485],{"id":148484},"_215-swiper-插件使用","21.5 swiper 插件使用",[4279,148487,148488,148491,148494],{},[1455,148489,148490],{},"下载需要的css和js文件html页面中 引入相关文件",[1455,148492,148493],{},"官网找到类似案例，复制html结构，css样式 js 语法",[1455,148495,148496],{},"根据需求定制修改模块",[4602,148498],{"style":129466,"src":148499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,148501,148502],{},"解压后将这两部分放到项目中",[4602,148504],{"style":129466,"src":148505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,148507,148508],{},"这个插件可以帮助我们实现轮播图效果",[19,148510,148511],{},"用法：",[4602,148513],{"style":129466,"src":148514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,148516,148517],{},"找到自己喜欢的",[4602,148519],{"style":129466,"src":148520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,148522,148523],{},"右键，查看网页源代码",[4602,148525],{"style":129466,"src":148526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,148528,148529],{},"复制人家的结构内容",[19,148531,148532],{},"然后去看API文档：",[4602,148534],{"style":129466,"src":148535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,148537,148538],{},"可以看看如何修改样式",[19,148540,148541],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[3219,148543,148544],{},"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":158,"searchDepth":197,"depth":197,"links":148546},[148547,148552,148556,148561,148566],{"id":147347,"depth":197,"text":147348,"children":148548},[148549,148550,148551],{"id":147351,"depth":228,"text":147352},{"id":147361,"depth":228,"text":147362},{"id":147456,"depth":228,"text":147457},{"id":147471,"depth":197,"text":147472,"children":148553},[148554,148555],{"id":147493,"depth":228,"text":147494},{"id":147509,"depth":228,"text":147510},{"id":147584,"depth":197,"text":147585,"children":148557},[148558,148559,148560],{"id":147597,"depth":228,"text":147598},{"id":147821,"depth":228,"text":147822},{"id":147828,"depth":228,"text":147829},{"id":147969,"depth":197,"text":147970,"children":148562},[148563,148564,148565],{"id":147996,"depth":228,"text":147997},{"id":148059,"depth":228,"text":148060},{"id":148404,"depth":228,"text":148405},{"id":148484,"depth":197,"text":148485},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":147339,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":148573,"title":148574,"body":148575,"description":3241,"extension":3242,"meta":148795,"navigation":300,"path":148796,"seo":148797,"stem":148798,"__hash__":148799},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":148576,"toc":148791},[148577,148580,148584,148587,148602,148607,148610,148615,148650,148655,148667,148672,148685,148690,148707,148712,148732,148737,148755,148758,148761,148764,148767,148771,148774,148777,148780,148783,148786,148789],[10,148578,148574],{"id":148579},"_22-代码提交与新型相对单位",[14,148581,148583],{"id":148582},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,148585,148586],{},"法1：",[1452,148588,148589,148596,148599],{},[1455,148590,148591,148592],{},"登录网站注册：",[3538,148593,148594],{"href":148594,"rel":148595},"https:\u002F\u002Fgitee.com\u002F",[26956],[1455,148597,148598],{},"码云创建新的仓库",[1455,148600,148601],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[4279,148603,148604],{},[1455,148605,148606],{},"在网站根目录右键-- Git Bash Here",[4602,148608],{"style":129466,"src":148609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[4279,148611,148612],{},[1455,148613,148614],{},"如果是第一次利用git提交，请配置好全局选项",[153,148616,148618],{"className":120355,"code":148617,"language":120357,"meta":158,"style":158},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[71,148619,148620,148636],{"__ignoreMap":158},[162,148621,148622,148625,148627,148630,148633],{"class":164,"line":165},[162,148623,148624],{"class":5082},"git",[162,148626,122778],{"class":179},[162,148628,148629],{"class":207}," --global",[162,148631,148632],{"class":179}," user.name",[162,148634,148635],{"class":179}," \"你的名字\"\n",[162,148637,148638,148640,148642,148644,148647],{"class":164,"line":197},[162,148639,148624],{"class":5082},[162,148641,122778],{"class":179},[162,148643,148629],{"class":207},[162,148645,148646],{"class":179}," user.email",[162,148648,148649],{"class":179}," \"你的邮箱\"\n",[4279,148651,148652],{},[1455,148653,148654],{},"初始化仓库",[153,148656,148658],{"className":120355,"code":148657,"language":120357,"meta":158,"style":158},"git init\n",[71,148659,148660],{"__ignoreMap":158},[162,148661,148662,148664],{"class":164,"line":165},[162,148663,148624],{"class":5082},[162,148665,148666],{"class":179}," init\n",[4279,148668,148669],{},[1455,148670,148671],{},"把本地文件放到暂存区",[153,148673,148675],{"className":120355,"code":148674,"language":120357,"meta":158,"style":158},"git add .\n",[71,148676,148677],{"__ignoreMap":158},[162,148678,148679,148681,148683],{"class":164,"line":165},[162,148680,148624],{"class":5082},[162,148682,8317],{"class":179},[162,148684,31829],{"class":179},[4279,148686,148687],{},[1455,148688,148689],{},"把本地文件放到本地仓库里面",[153,148691,148693],{"className":120355,"code":148692,"language":120357,"meta":158,"style":158},"git commit -m \"first commit\"\n",[71,148694,148695],{"__ignoreMap":158},[162,148696,148697,148699,148702,148704],{"class":164,"line":165},[162,148698,148624],{"class":5082},[162,148700,148701],{"class":179}," commit",[162,148703,103946],{"class":207},[162,148705,148706],{"class":179}," \"first commit\"\n",[4279,148708,148709],{},[1455,148710,148711],{},"链接远程仓库",[153,148713,148715],{"className":120355,"code":148714,"language":120357,"meta":158,"style":158},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[71,148716,148717],{"__ignoreMap":158},[162,148718,148719,148721,148724,148726,148729],{"class":164,"line":165},[162,148720,148624],{"class":5082},[162,148722,148723],{"class":179}," remote",[162,148725,8317],{"class":179},[162,148727,148728],{"class":179}," origin",[162,148730,148731],{"class":179}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[4279,148733,148734],{},[1455,148735,148736],{},"把本地仓库的文件推送到远程仓库 push",[153,148738,148740],{"className":120355,"code":148739,"language":120357,"meta":158,"style":158},"git push -u origin master\n",[71,148741,148742],{"__ignoreMap":158},[162,148743,148744,148746,148748,148750,148752],{"class":164,"line":165},[162,148745,148624],{"class":5082},[162,148747,32104],{"class":179},[162,148749,31379],{"class":207},[162,148751,148728],{"class":179},[162,148753,148754],{"class":179}," master\n",[4602,148756],{"style":129466,"src":148757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,148759,148760],{},"上方方法暂未实现，后边学完git后在整",[19,148762,148763],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[4602,148765],{"style":129466,"src":148766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,148768,148770],{"id":148769},"_222-新型相对单位","22.2 新型相对单位",[4602,148772],{"style":129466,"src":148773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[4602,148775],{"style":129466,"src":148776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,148778,148779],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,148781,148782],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[4602,148784],{"style":129466,"src":148785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,148787,148788],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[3219,148790,27049],{},{"title":158,"searchDepth":197,"depth":197,"links":148792},[148793,148794],{"id":148582,"depth":197,"text":148583},{"id":148769,"depth":197,"text":148770},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":148574,"description":3241},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":148801,"title":148802,"body":148803,"description":148807,"extension":3242,"meta":148808,"navigation":300,"path":148809,"seo":148810,"stem":148811,"__hash__":148812},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":148804,"toc":148805},[],{"title":158,"searchDepth":197,"depth":197,"links":148806},[],"自己正经开始学编程的第一门语言！",{"category":95904},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":148802,"description":148807},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":148814,"title":148815,"body":148816,"description":3241,"extension":3242,"meta":149963,"navigation":300,"path":149964,"seo":149965,"stem":149966,"__hash__":149967},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":148817,"toc":149939},[148818,148821,148825,148828,148831,148856,148859,148865,148869,148872,148899,148902,148942,148945,148957,148960,148966,148970,148974,149001,149018,149025,149029,149032,149058,149061,149065,149068,149108,149111,149128,149134,149138,149143,149187,149190,149208,149211,149279,149283,149290,149293,149308,149311,149320,149323,149334,149337,149346,149349,149366,149369,149384,149388,149392,149395,149397,149417,149421,149424,149427,149438,149441,149447,149451,149457,149484,149487,149499,149502,149513,149516,149522,149526,149532,149582,149585,149627,149630,149663,149666,149700,149704,149707,149727,149730,149766,149769,149782,149786,149790,149796,149799,149812,149816,149819,149825,149828,149832,149835,149838,149887,149891,149907,149913,149920,149926,149936],[10,148819,148815],{"id":148820},"_1-python环境与第一个程序",[14,148822,148824],{"id":148823},"_11-什么是python","1.1 什么是Python",[19,148826,148827],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,148829,148830],{},"理解 Python 时抓住三个关键词：",[1452,148832,148833,148836,148839],{},[1455,148834,148835],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[1455,148837,148838],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[1455,148840,148841,148842,3513,148845,3513,148848,3513,148851,3513,148853,3183],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[71,148843,148844],{},"os",[71,148846,148847],{},"sys",[71,148849,148850],{},"json",[71,148852,60929],{},[71,148854,148855],{},"datetime",[19,148857,148858],{},"Python 程序的运行链路：",[153,148860,148863],{"className":148861,"code":148862,"language":8295,"meta":158},[8293],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[71,148864,148862],{"__ignoreMap":158},[14,148866,148868],{"id":148867},"_12-python解释器","1.2 Python解释器",[19,148870,148871],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[153,148873,148875],{"className":26913,"code":148874,"language":26915,"meta":158,"style":158},"python --version\npython3 --version\npython\npython3\n",[71,148876,148877,148883,148889,148894],{"__ignoreMap":158},[162,148878,148879,148881],{"class":164,"line":165},[162,148880,157],{"class":5082},[162,148882,29383],{"class":207},[162,148884,148885,148887],{"class":164,"line":197},[162,148886,103943],{"class":5082},[162,148888,29383],{"class":207},[162,148890,148891],{"class":164,"line":228},[162,148892,148893],{"class":5082},"python\n",[162,148895,148896],{"class":164,"line":252},[162,148897,148898],{"class":5082},"python3\n",[19,148900,148901],{},"进入交互模式后，可以直接输入表达式：",[153,148903,148905],{"className":155,"code":148904,"language":157,"meta":158,"style":158},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[71,148906,148907,148918,148923,148937],{"__ignoreMap":158},[162,148908,148909,148912,148914,148916],{"class":164,"line":165},[162,148910,148911],{"class":172},">>>",[162,148913,28210],{"class":207},[162,148915,1239],{"class":172},[162,148917,50796],{"class":207},[162,148919,148920],{"class":164,"line":197},[162,148921,148922],{"class":207},"3\n",[162,148924,148925,148927,148930,148932,148935],{"class":164,"line":228},[162,148926,148911],{"class":172},[162,148928,148929],{"class":207}," print",[162,148931,604],{"class":168},[162,148933,148934],{"class":179},"\"hello python\"",[162,148936,434],{"class":168},[162,148938,148939],{"class":164,"line":252},[162,148940,148941],{"class":168},"hello python\n",[19,148943,148944],{},"退出交互模式：",[153,148946,148948],{"className":155,"code":148947,"language":157,"meta":158,"style":158},"exit()\n",[71,148949,148950],{"__ignoreMap":158},[162,148951,148952,148955],{"class":164,"line":165},[162,148953,148954],{"class":207},"exit",[162,148956,1526],{"class":168},[19,148958,148959],{},"或使用快捷键：",[153,148961,148964],{"className":148962,"code":148963,"language":8295,"meta":158},[8293],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[71,148965,148963],{"__ignoreMap":158},[14,148967,148969],{"id":148968},"_13-安装python","1.3 安装Python",[3284,148971,148973],{"id":148972},"_131-windows安装","1.3.1 Windows安装",[1452,148975,148976,148983,148986,148992,148998],{},[1455,148977,148978,148979],{},"打开 Python 官网：",[3538,148980,148981],{"href":148981,"rel":148982},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[26956],[1455,148984,148985],{},"下载 Windows Installer。",[1455,148987,148988,148989,3183],{},"安装时勾选 ",[71,148990,148991],{},"Add Python to PATH",[1455,148993,148994,148995,3183],{},"点击 ",[71,148996,148997],{},"Install Now",[1455,148999,149000],{},"安装完成后打开命令提示符验证：",[153,149002,149004],{"className":26913,"code":149003,"language":26915,"meta":158,"style":158},"python --version\npip --version\n",[71,149005,149006,149012],{"__ignoreMap":158},[162,149007,149008,149010],{"class":164,"line":165},[162,149009,157],{"class":5082},[162,149011,29383],{"class":207},[162,149013,149014,149016],{"class":164,"line":197},[162,149015,26922],{"class":5082},[162,149017,29383],{"class":207},[19,149019,149020,149021,149024],{},"如果提示 ",[71,149022,149023],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[3284,149026,149028],{"id":149027},"_132-macos安装","1.3.2 macOS安装",[19,149030,149031],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[153,149033,149035],{"className":26913,"code":149034,"language":26915,"meta":158,"style":158},"brew install python\npython3 --version\npip3 --version\n",[71,149036,149037,149046,149052],{"__ignoreMap":158},[162,149038,149039,149042,149044],{"class":164,"line":165},[162,149040,149041],{"class":5082},"brew",[162,149043,26925],{"class":179},[162,149045,127376],{"class":179},[162,149047,149048,149050],{"class":164,"line":197},[162,149049,103943],{"class":5082},[162,149051,29383],{"class":207},[162,149053,149054,149056],{"class":164,"line":228},[162,149055,122759],{"class":5082},[162,149057,29383],{"class":207},[19,149059,149060],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[3284,149062,149064],{"id":149063},"_133-linux安装","1.3.3 Linux安装",[19,149066,149067],{},"Ubuntu\u002FDebian：",[153,149069,149071],{"className":26913,"code":149070,"language":26915,"meta":158,"style":158},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[71,149072,149073,149081,149096,149102],{"__ignoreMap":158},[162,149074,149075,149077,149079],{"class":164,"line":165},[162,149076,27668],{"class":5082},[162,149078,120376],{"class":179},[162,149080,29332],{"class":179},[162,149082,149083,149085,149087,149089,149091,149093],{"class":164,"line":197},[162,149084,27668],{"class":5082},[162,149086,120376],{"class":179},[162,149088,26925],{"class":179},[162,149090,107464],{"class":179},[162,149092,103862],{"class":179},[162,149094,149095],{"class":179}," python3-venv\n",[162,149097,149098,149100],{"class":164,"line":228},[162,149099,103943],{"class":5082},[162,149101,29383],{"class":207},[162,149103,149104,149106],{"class":164,"line":252},[162,149105,122759],{"class":5082},[162,149107,29383],{"class":207},[19,149109,149110],{},"Fedora：",[153,149112,149114],{"className":26913,"code":149113,"language":26915,"meta":158,"style":158},"sudo dnf install python3 python3-pip\n",[71,149115,149116],{"__ignoreMap":158},[162,149117,149118,149120,149122,149124,149126],{"class":164,"line":165},[162,149119,27668],{"class":5082},[162,149121,29405],{"class":179},[162,149123,26925],{"class":179},[162,149125,107464],{"class":179},[162,149127,122823],{"class":179},[19,149129,149130,149131,149133],{},"Linux 上通常使用 ",[71,149132,103943],{}," 命令，避免和系统旧版本 Python 冲突。",[14,149135,149137],{"id":149136},"_14-pip包管理器","1.4 pip包管理器",[19,149139,149140,149142],{},[71,149141,26922],{}," 用来安装第三方库。",[153,149144,149146],{"className":26913,"code":149145,"language":26915,"meta":158,"style":158},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[71,149147,149148,149157,149166,149174,149180],{"__ignoreMap":158},[162,149149,149150,149152,149154],{"class":164,"line":165},[162,149151,26922],{"class":5082},[162,149153,26925],{"class":179},[162,149155,149156],{"class":179}," requests\n",[162,149158,149159,149161,149164],{"class":164,"line":197},[162,149160,26922],{"class":5082},[162,149162,149163],{"class":179}," uninstall",[162,149165,149156],{"class":179},[162,149167,149168,149170,149172],{"class":164,"line":228},[162,149169,26922],{"class":5082},[162,149171,120633],{"class":179},[162,149173,149156],{"class":179},[162,149175,149176,149178],{"class":164,"line":252},[162,149177,26922],{"class":5082},[162,149179,122014],{"class":179},[162,149181,149182,149184],{"class":164,"line":328},[162,149183,26922],{"class":5082},[162,149185,149186],{"class":179}," freeze\n",[19,149188,149189],{},"国内网络较慢时可以临时使用镜像：",[153,149191,149193],{"className":26913,"code":149192,"language":26915,"meta":158,"style":158},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[71,149194,149195],{"__ignoreMap":158},[162,149196,149197,149199,149201,149204,149206],{"class":164,"line":165},[162,149198,26922],{"class":5082},[162,149200,26925],{"class":179},[162,149202,149203],{"class":179}," requests",[162,149205,29520],{"class":207},[162,149207,122786],{"class":179},[19,149209,149210],{},"常见第三方库：",[26,149212,149213,149222],{},[29,149214,149215],{},[32,149216,149217,149220],{},[35,149218,149219],{},"库",[35,149221,105759],{},[51,149223,149224,149232,149239,149247,149255,149263,149271],{},[32,149225,149226,149229],{},[56,149227,149228],{},"requests",[56,149230,149231],{},"网络请求",[32,149233,149234,149236],{},[56,149235,103690],{},[56,149237,149238],{},"数值计算",[32,149240,149241,149244],{},[56,149242,149243],{},"pandas",[56,149245,149246],{},"表格数据处理",[32,149248,149249,149252],{},[56,149250,149251],{},"matplotlib",[56,149253,149254],{},"绘图",[32,149256,149257,149260],{},[56,149258,149259],{},"pyecharts",[56,149261,149262],{},"ECharts 图表",[32,149264,149265,149268],{},[56,149266,149267],{},"flask",[56,149269,149270],{},"Web 后端",[32,149272,149273,149276],{},[56,149274,149275],{},"pytest",[56,149277,149278],{},"自动化测试",[14,149280,149282],{"id":149281},"_15-虚拟环境","1.5 虚拟环境",[19,149284,149285,149286,149289],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[71,149287,149288],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,149291,149292],{},"创建虚拟环境：",[153,149294,149296],{"className":26913,"code":149295,"language":26915,"meta":158,"style":158},"python -m venv .venv\n",[71,149297,149298],{"__ignoreMap":158},[162,149299,149300,149302,149304,149306],{"class":164,"line":165},[162,149301,157],{"class":5082},[162,149303,103946],{"class":207},[162,149305,103949],{"class":179},[162,149307,103952],{"class":179},[19,149309,149310],{},"Windows 激活：",[153,149312,149314],{"className":26913,"code":149313,"language":26915,"meta":158,"style":158},".venv\\Scripts\\activate\n",[71,149315,149316],{"__ignoreMap":158},[162,149317,149318],{"class":164,"line":165},[162,149319,149313],{"class":5082},[19,149321,149322],{},"macOS\u002FLinux 激活：",[153,149324,149326],{"className":26913,"code":149325,"language":26915,"meta":158,"style":158},"source .venv\u002Fbin\u002Factivate\n",[71,149327,149328],{"__ignoreMap":158},[162,149329,149330,149332],{"class":164,"line":165},[162,149331,103957],{"class":207},[162,149333,103960],{"class":179},[19,149335,149336],{},"退出虚拟环境：",[153,149338,149340],{"className":26913,"code":149339,"language":26915,"meta":158,"style":158},"deactivate\n",[71,149341,149342],{"__ignoreMap":158},[162,149343,149344],{"class":164,"line":165},[162,149345,149339],{"class":5082},[19,149347,149348],{},"保存依赖：",[153,149350,149352],{"className":26913,"code":149351,"language":26915,"meta":158,"style":158},"pip freeze > requirements.txt\n",[71,149353,149354],{"__ignoreMap":158},[162,149355,149356,149358,149361,149363],{"class":164,"line":165},[162,149357,26922],{"class":5082},[162,149359,149360],{"class":179}," freeze",[162,149362,29312],{"class":172},[162,149364,149365],{"class":179}," requirements.txt\n",[19,149367,149368],{},"安装依赖：",[153,149370,149372],{"className":26913,"code":149371,"language":26915,"meta":158,"style":158},"pip install -r requirements.txt\n",[71,149373,149374],{"__ignoreMap":158},[162,149375,149376,149378,149380,149382],{"class":164,"line":165},[162,149377,26922],{"class":5082},[162,149379,26925],{"class":179},[162,149381,122698],{"class":207},[162,149383,149365],{"class":179},[14,149385,149387],{"id":149386},"_16-开发工具","1.6 开发工具",[3284,149389,149391],{"id":149390},"_161-pycharm","1.6.1 PyCharm",[19,149393,149394],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,149396,125120],{},[1452,149398,149399,149402,149405,149411,149414],{},[1455,149400,149401],{},"New Project：创建项目。",[1455,149403,149404],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[1455,149406,149407,149408,129041],{},"New Python File：创建 ",[71,149409,149410],{},".py",[1455,149412,149413],{},"Run：运行当前文件。",[1455,149415,149416],{},"Debug：断点调试。",[3284,149418,149420],{"id":149419},"_162-vs-code","1.6.2 VS Code",[19,149422,149423],{},"VS Code 轻量，适合后续多语言开发。",[19,149425,149426],{},"建议安装插件：",[1452,149428,149429,149432,149435],{},[1455,149430,149431],{},"Python。",[1455,149433,149434],{},"Pylance。",[1455,149436,149437],{},"Jupyter。",[19,149439,149440],{},"选择解释器：",[153,149442,149445],{"className":149443,"code":149444,"language":8295,"meta":158},[8293],"Ctrl + Shift + P -> Python: Select Interpreter\n",[71,149446,149444],{"__ignoreMap":158},[14,149448,149450],{"id":149449},"_17-第一个python程序","1.7 第一个Python程序",[19,149452,149453,149454,27710],{},"创建文件 ",[71,149455,149456],{},"hello.py",[153,149458,149460],{"className":155,"code":149459,"language":157,"meta":158,"style":158},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[71,149461,149462,149473],{"__ignoreMap":158},[162,149463,149464,149466,149468,149471],{"class":164,"line":165},[162,149465,306],{"class":207},[162,149467,604],{"class":168},[162,149469,149470],{"class":179},"\"Hello World\"",[162,149472,434],{"class":168},[162,149474,149475,149477,149479,149482],{"class":164,"line":197},[162,149476,306],{"class":207},[162,149478,604],{"class":168},[162,149480,149481],{"class":179},"\"你好，Python\"",[162,149483,434],{"class":168},[19,149485,149486],{},"在终端运行：",[153,149488,149490],{"className":26913,"code":149489,"language":26915,"meta":158,"style":158},"python hello.py\n",[71,149491,149492],{"__ignoreMap":158},[162,149493,149494,149496],{"class":164,"line":165},[162,149495,157],{"class":5082},[162,149497,149498],{"class":179}," hello.py\n",[19,149500,149501],{},"或：",[153,149503,149505],{"className":26913,"code":149504,"language":26915,"meta":158,"style":158},"python3 hello.py\n",[71,149506,149507],{"__ignoreMap":158},[162,149508,149509,149511],{"class":164,"line":165},[162,149510,103943],{"class":5082},[162,149512,149498],{"class":179},[19,149514,149515],{},"输出：",[153,149517,149520],{"className":149518,"code":149519,"language":8295,"meta":158},[8293],"Hello World\n你好，Python\n",[71,149521,149519],{"__ignoreMap":158},[14,149523,149525],{"id":149524},"_18-print函数","1.8 print函数",[19,149527,149528,149531],{},[71,149529,149530],{},"print()"," 用来输出内容。",[153,149533,149535],{"className":155,"code":149534,"language":157,"meta":158,"style":158},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[71,149536,149537,149547,149557,149567],{"__ignoreMap":158},[162,149538,149539,149541,149543,149545],{"class":164,"line":165},[162,149540,306],{"class":207},[162,149542,604],{"class":168},[162,149544,8951],{"class":179},[162,149546,434],{"class":168},[162,149548,149549,149551,149553,149555],{"class":164,"line":197},[162,149550,306],{"class":207},[162,149552,604],{"class":168},[162,149554,3608],{"class":207},[162,149556,434],{"class":168},[162,149558,149559,149561,149563,149565],{"class":164,"line":228},[162,149560,306],{"class":207},[162,149562,604],{"class":168},[162,149564,3362],{"class":207},[162,149566,434],{"class":168},[162,149568,149569,149571,149573,149576,149578,149580],{"class":164,"line":252},[162,149570,306],{"class":207},[162,149572,604],{"class":168},[162,149574,149575],{"class":179},"\"年龄:\"",[162,149577,183],{"class":168},[162,149579,242],{"class":207},[162,149581,434],{"class":168},[19,149583,149584],{},"多个内容用逗号隔开，默认中间加空格：",[153,149586,149588],{"className":155,"code":149587,"language":157,"meta":158,"style":158},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[71,149589,149590,149600,149610],{"__ignoreMap":158},[162,149591,149592,149595,149597],{"class":164,"line":165},[162,149593,149594],{"class":168},"name ",[162,149596,173],{"class":172},[162,149598,149599],{"class":179}," \"张三\"\n",[162,149601,149602,149605,149607],{"class":164,"line":197},[162,149603,149604],{"class":168},"age ",[162,149606,173],{"class":172},[162,149608,149609],{"class":207}," 18\n",[162,149611,149612,149614,149616,149619,149622,149624],{"class":164,"line":228},[162,149613,306],{"class":207},[162,149615,604],{"class":168},[162,149617,149618],{"class":179},"\"姓名:\"",[162,149620,149621],{"class":168},", name, ",[162,149623,149575],{"class":179},[162,149625,149626],{"class":168},", age)\n",[19,149628,149629],{},"修改分隔符：",[153,149631,149633],{"className":155,"code":149632,"language":157,"meta":158,"style":158},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[71,149634,149635],{"__ignoreMap":158},[162,149636,149637,149639,149641,149644,149646,149648,149650,149652,149654,149657,149659,149661],{"class":164,"line":165},[162,149638,306],{"class":207},[162,149640,604],{"class":168},[162,149642,149643],{"class":179},"\"2024\"",[162,149645,183],{"class":168},[162,149647,57386],{"class":179},[162,149649,183],{"class":168},[162,149651,57386],{"class":179},[162,149653,183],{"class":168},[162,149655,149656],{"class":671},"sep",[162,149658,173],{"class":172},[162,149660,35559],{"class":179},[162,149662,434],{"class":168},[19,149664,149665],{},"修改结尾符：",[153,149667,149669],{"className":155,"code":149668,"language":157,"meta":158,"style":158},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[71,149670,149671,149689],{"__ignoreMap":158},[162,149672,149673,149675,149677,149679,149681,149683,149685,149687],{"class":164,"line":165},[162,149674,306],{"class":207},[162,149676,604],{"class":168},[162,149678,8951],{"class":179},[162,149680,183],{"class":168},[162,149682,48875],{"class":671},[162,149684,173],{"class":172},[162,149686,7471],{"class":179},[162,149688,434],{"class":168},[162,149690,149691,149693,149695,149698],{"class":164,"line":197},[162,149692,306],{"class":207},[162,149694,604],{"class":168},[162,149696,149697],{"class":179},"\"python\"",[162,149699,434],{"class":168},[14,149701,149703],{"id":149702},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,149705,149706],{},"交互运行适合临时验证：",[153,149708,149710],{"className":155,"code":149709,"language":157,"meta":158,"style":158},">>> 10 * 3\n30\n",[71,149711,149712,149722],{"__ignoreMap":158},[162,149713,149714,149716,149718,149720],{"class":164,"line":165},[162,149715,148911],{"class":172},[162,149717,5156],{"class":207},[162,149719,9624],{"class":172},[162,149721,123094],{"class":207},[162,149723,149724],{"class":164,"line":197},[162,149725,149726],{"class":207},"30\n",[19,149728,149729],{},"脚本运行适合保存程序：",[153,149731,149733],{"className":155,"code":149732,"language":157,"meta":158,"style":158},"price = 8\ncount = 5\nprint(price * count)\n",[71,149734,149735,149745,149754],{"__ignoreMap":158},[162,149736,149737,149740,149742],{"class":164,"line":165},[162,149738,149739],{"class":168},"price ",[162,149741,173],{"class":172},[162,149743,149744],{"class":207}," 8\n",[162,149746,149747,149750,149752],{"class":164,"line":197},[162,149748,149749],{"class":168},"count ",[162,149751,173],{"class":172},[162,149753,57497],{"class":207},[162,149755,149756,149758,149761,149763],{"class":164,"line":228},[162,149757,306],{"class":207},[162,149759,149760],{"class":168},"(price ",[162,149762,3745],{"class":172},[162,149764,149765],{"class":168}," count)\n",[19,149767,149768],{},"实际学习中推荐：",[1452,149770,149771,149774,149779],{},[1455,149772,149773],{},"临时试一个语法，用交互模式。",[1455,149775,149776,149777,129041],{},"写完整练习，用 ",[71,149778,149410],{},[1455,149780,149781],{},"写项目，用独立目录和虚拟环境。",[14,149783,149785],{"id":149784},"_110-常见错误","1.10 常见错误",[3284,149787,149789],{"id":149788},"_1101-命令找不到","1.10.1 命令找不到",[153,149791,149794],{"className":149792,"code":149793,"language":8295,"meta":158},[8293],"python: command not found\n",[71,149795,149793],{"__ignoreMap":158},[19,149797,149798],{},"原因：",[1452,149800,149801,149804,149807],{},[1455,149802,149803],{},"没安装 Python。",[1455,149805,149806],{},"PATH 没配置。",[1455,149808,149809,149810,3183],{},"Linux\u002FmacOS 应该使用 ",[71,149811,103943],{},[3284,149813,149815],{"id":149814},"_1102-文件名冲突","1.10.2 文件名冲突",[19,149817,149818],{},"不要把文件命名为：",[153,149820,149823],{"className":149821,"code":149822,"language":8295,"meta":158},[8293],"random.py\njson.py\ntime.py\nrequests.py\n",[71,149824,149822],{"__ignoreMap":158},[19,149826,149827],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[3284,149829,149831],{"id":149830},"_1103-中文乱码","1.10.3 中文乱码",[19,149833,149834],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,149836,149837],{},"如果读写文件出现乱码，要明确指定编码：",[153,149839,149841],{"className":155,"code":149840,"language":157,"meta":158,"style":158},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[71,149842,149843,149877],{"__ignoreMap":158},[162,149844,149845,149847,149850,149852,149855,149857,149860,149862,149865,149867,149870,149872,149874],{"class":164,"line":165},[162,149846,110894],{"class":172},[162,149848,149849],{"class":207}," open",[162,149851,604],{"class":168},[162,149853,149854],{"class":179},"\"data.txt\"",[162,149856,183],{"class":168},[162,149858,149859],{"class":179},"\"r\"",[162,149861,183],{"class":168},[162,149863,149864],{"class":671},"encoding",[162,149866,173],{"class":172},[162,149868,149869],{"class":179},"\"utf-8\"",[162,149871,1823],{"class":168},[162,149873,34466],{"class":172},[162,149875,149876],{"class":168}," f:\n",[162,149878,149879,149882,149884],{"class":164,"line":197},[162,149880,149881],{"class":168},"    content ",[162,149883,173],{"class":172},[162,149885,149886],{"class":168}," f.read()\n",[14,149888,149890],{"id":149889},"_111-本章练习","1.11 本章练习",[1452,149892,149893,149896,149902],{},[1455,149894,149895],{},"安装 Python，并在终端输出版本号。",[1455,149897,149898,149899,149901],{},"新建 ",[71,149900,149456],{},"，输出自己的姓名、年龄、学习目标。",[1455,149903,3186,149904,149906],{},[71,149905,149530],{}," 输出下面格式：",[153,149908,149911],{"className":149909,"code":149910,"language":8295,"meta":158},[8293],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[71,149912,149910],{"__ignoreMap":158},[1452,149914,149915],{"start":252},[1455,149916,3186,149917,149919],{},[71,149918,149656],{}," 输出日期：",[153,149921,149924],{"className":149922,"code":149923,"language":8295,"meta":158},[8293],"2024-10-10\n",[71,149925,149923],{"__ignoreMap":158},[1452,149927,149928],{"start":328},[1455,149929,3186,149930,149932,149933,149935],{},[71,149931,48875],{}," 让两次 ",[71,149934,149530],{}," 输出在同一行。",[3219,149937,149938],{},"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":158,"searchDepth":197,"depth":197,"links":149940},[149941,149942,149943,149948,149949,149950,149954,149955,149956,149957,149962],{"id":148823,"depth":197,"text":148824},{"id":148867,"depth":197,"text":148868},{"id":148968,"depth":197,"text":148969,"children":149944},[149945,149946,149947],{"id":148972,"depth":228,"text":148973},{"id":149027,"depth":228,"text":149028},{"id":149063,"depth":228,"text":149064},{"id":149136,"depth":197,"text":149137},{"id":149281,"depth":197,"text":149282},{"id":149386,"depth":197,"text":149387,"children":149951},[149952,149953],{"id":149390,"depth":228,"text":149391},{"id":149419,"depth":228,"text":149420},{"id":149449,"depth":197,"text":149450},{"id":149524,"depth":197,"text":149525},{"id":149702,"depth":197,"text":149703},{"id":149784,"depth":197,"text":149785,"children":149958},[149959,149960,149961],{"id":149788,"depth":228,"text":149789},{"id":149814,"depth":228,"text":149815},{"id":149830,"depth":228,"text":149831},{"id":149889,"depth":197,"text":149890},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":148815,"description":3241},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":149969,"title":149970,"body":149971,"description":3241,"extension":3242,"meta":152373,"navigation":300,"path":152374,"seo":152375,"stem":152376,"__hash__":152377},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":149972,"toc":152358},[149973,149976,149980,149983,149986,150003,150006,150048,150051,150055,150058,150061,150097,150100,150134,150137,150229,150233,150247,150250,150277,150280,150284,150387,150394,150397,150414,150418,150425,150614,150617,150690,150694,150697,150781,150784,150816,150820,151024,151027,151031,151037,151139,151142,151398,151402,151405,151408,151422,151424,151609,151613,151975,151981,151985,151988,152112,152115,152294,152297,152301,152334,152338,152355],[10,149974,149970],{"id":149975},"_10-json与pyecharts折线图",[14,149977,149979],{"id":149978},"_101-数据可视化","10.1 数据可视化",[19,149981,149982],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,149984,149985],{},"常见图表：",[1452,149987,149988,149991,149994,149997,150000],{},[1455,149989,149990],{},"折线图：看趋势。",[1455,149992,149993],{},"柱状图：看分类对比。",[1455,149995,149996],{},"饼图：看占比。",[1455,149998,149999],{},"地图：看地域分布。",[1455,150001,150002],{},"散点图：看两个变量之间的关系。",[19,150004,150005],{},"Python 可视化常用库：",[26,150007,150008,150016],{},[29,150009,150010],{},[32,150011,150012,150014],{},[35,150013,149219],{},[35,150015,26831],{},[51,150017,150018,150025,150033,150040],{},[32,150019,150020,150022],{},[56,150021,149251],{},[56,150023,150024],{},"基础、经典、可定制",[32,150026,150027,150030],{},[56,150028,150029],{},"seaborn",[56,150031,150032],{},"统计图表更美观",[32,150034,150035,150037],{},[56,150036,149259],{},[56,150038,150039],{},"生成交互式网页图表",[32,150041,150042,150045],{},[56,150043,150044],{},"plotly",[56,150046,150047],{},"交互图表能力强",[19,150049,150050],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,150052,150054],{"id":150053},"_102-json回顾","10.2 JSON回顾",[19,150056,150057],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,150059,150060],{},"Python 字典：",[153,150062,150064],{"className":155,"code":150063,"language":157,"meta":158,"style":158},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[71,150065,150066,150074,150084,150093],{"__ignoreMap":158},[162,150067,150068,150070,150072],{"class":164,"line":165},[162,150069,104721],{"class":168},[162,150071,173],{"class":172},[162,150073,1722],{"class":168},[162,150075,150076,150078,150080,150082],{"class":164,"line":197},[162,150077,1727],{"class":179},[162,150079,1730],{"class":168},[162,150081,1033],{"class":179},[162,150083,1735],{"class":168},[162,150085,150086,150089,150091],{"class":164,"line":228},[162,150087,150088],{"class":179},"    \"value\"",[162,150090,1730],{"class":168},[162,150092,100522],{"class":207},[162,150094,150095],{"class":164,"line":252},[162,150096,1498],{"class":168},[19,150098,150099],{},"JSON 字符串：",[153,150101,150104],{"className":150102,"code":150103,"language":148850,"meta":158,"style":158},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[71,150105,150106,150110,150121,150130],{"__ignoreMap":158},[162,150107,150108],{"class":164,"line":165},[162,150109,4685],{"class":168},[162,150111,150112,150115,150117,150119],{"class":164,"line":197},[162,150113,150114],{"class":207},"  \"name\"",[162,150116,1730],{"class":168},[162,150118,1033],{"class":179},[162,150120,1735],{"class":168},[162,150122,150123,150126,150128],{"class":164,"line":228},[162,150124,150125],{"class":207},"  \"value\"",[162,150127,1730],{"class":168},[162,150129,100522],{"class":207},[162,150131,150132],{"class":164,"line":252},[162,150133,1498],{"class":168},[19,150135,150136],{},"Python 与 JSON 的转换：",[153,150138,150140],{"className":155,"code":150139,"language":157,"meta":158,"style":158},"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",[71,150141,150142,150149,150153,150178,150182,150201,150208,150212,150222],{"__ignoreMap":158},[162,150143,150144,150146],{"class":164,"line":165},[162,150145,33478],{"class":172},[162,150147,150148],{"class":168}," json\n",[162,150150,150151],{"class":164,"line":197},[162,150152,301],{"emptyLinePlaceholder":300},[162,150154,150155,150157,150159,150161,150163,150165,150167,150169,150172,150174,150176],{"class":164,"line":228},[162,150156,104721],{"class":168},[162,150158,173],{"class":172},[162,150160,1477],{"class":168},[162,150162,1778],{"class":179},[162,150164,1730],{"class":168},[162,150166,1033],{"class":179},[162,150168,183],{"class":168},[162,150170,150171],{"class":179},"\"value\"",[162,150173,1730],{"class":168},[162,150175,3608],{"class":207},[162,150177,1498],{"class":168},[162,150179,150180],{"class":164,"line":252},[162,150181,301],{"emptyLinePlaceholder":300},[162,150183,150184,150187,150189,150192,150195,150197,150199],{"class":164,"line":328},[162,150185,150186],{"class":168},"json_text ",[162,150188,173],{"class":172},[162,150190,150191],{"class":168}," json.dumps(data, ",[162,150193,150194],{"class":671},"ensure_ascii",[162,150196,173],{"class":172},[162,150198,37062],{"class":207},[162,150200,434],{"class":168},[162,150202,150203,150205],{"class":164,"line":466},[162,150204,306],{"class":207},[162,150206,150207],{"class":168},"(json_text)\n",[162,150209,150210],{"class":164,"line":471},[162,150211,301],{"emptyLinePlaceholder":300},[162,150213,150214,150217,150219],{"class":164,"line":687},[162,150215,150216],{"class":168},"new_data ",[162,150218,173],{"class":172},[162,150220,150221],{"class":168}," json.loads(json_text)\n",[162,150223,150224,150226],{"class":164,"line":692},[162,150225,306],{"class":207},[162,150227,150228],{"class":168},"(new_data)\n",[14,150230,150232],{"id":150231},"_103-安装pyecharts","10.3 安装pyecharts",[153,150234,150236],{"className":26913,"code":150235,"language":26915,"meta":158,"style":158},"pip install pyecharts\n",[71,150237,150238],{"__ignoreMap":158},[162,150239,150240,150242,150244],{"class":164,"line":165},[162,150241,26922],{"class":5082},[162,150243,26925],{"class":179},[162,150245,150246],{"class":179}," pyecharts\n",[19,150248,150249],{},"验证：",[153,150251,150253],{"className":155,"code":150252,"language":157,"meta":158,"style":158},"import pyecharts\n\nprint(pyecharts.__version__)\n",[71,150254,150255,150261,150265],{"__ignoreMap":158},[162,150256,150257,150259],{"class":164,"line":165},[162,150258,33478],{"class":172},[162,150260,150246],{"class":168},[162,150262,150263],{"class":164,"line":197},[162,150264,301],{"emptyLinePlaceholder":300},[162,150266,150267,150269,150272,150275],{"class":164,"line":228},[162,150268,306],{"class":207},[162,150270,150271],{"class":168},"(pyecharts.",[162,150273,150274],{"class":207},"__version__",[162,150276,434],{"class":168},[19,150278,150279],{},"如果使用虚拟环境，要先激活环境再安装。",[14,150281,150283],{"id":150282},"_104-第一个折线图","10.4 第一个折线图",[153,150285,150287],{"className":155,"code":150286,"language":157,"meta":158,"style":158},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[71,150288,150289,150301,150305,150315,150345,150377],{"__ignoreMap":158},[162,150290,150291,150293,150296,150298],{"class":164,"line":165},[162,150292,33821],{"class":172},[162,150294,150295],{"class":168}," pyecharts.charts ",[162,150297,33478],{"class":172},[162,150299,150300],{"class":168}," Line\n",[162,150302,150303],{"class":164,"line":197},[162,150304,301],{"emptyLinePlaceholder":300},[162,150306,150307,150310,150312],{"class":164,"line":228},[162,150308,150309],{"class":168},"line ",[162,150311,173],{"class":172},[162,150313,150314],{"class":168}," Line()\n",[162,150316,150317,150320,150323,150325,150328,150330,150333,150335,150338,150340,150343],{"class":164,"line":252},[162,150318,150319],{"class":168},"line.add_xaxis([",[162,150321,150322],{"class":179},"\"周一\"",[162,150324,183],{"class":168},[162,150326,150327],{"class":179},"\"周二\"",[162,150329,183],{"class":168},[162,150331,150332],{"class":179},"\"周三\"",[162,150334,183],{"class":168},[162,150336,150337],{"class":179},"\"周四\"",[162,150339,183],{"class":168},[162,150341,150342],{"class":179},"\"周五\"",[162,150344,315],{"class":168},[162,150346,150347,150350,150353,150355,150357,150359,150361,150363,150365,150367,150370,150372,150375],{"class":164,"line":328},[162,150348,150349],{"class":168},"line.add_yaxis(",[162,150351,150352],{"class":179},"\"销售额\"",[162,150354,80583],{"class":168},[162,150356,3608],{"class":207},[162,150358,183],{"class":168},[162,150360,4098],{"class":207},[162,150362,183],{"class":168},[162,150364,875],{"class":207},[162,150366,183],{"class":168},[162,150368,150369],{"class":207},"150",[162,150371,183],{"class":168},[162,150373,150374],{"class":207},"180",[162,150376,315],{"class":168},[162,150378,150379,150382,150385],{"class":164,"line":466},[162,150380,150381],{"class":168},"line.render(",[162,150383,150384],{"class":179},"\"line.html\"",[162,150386,434],{"class":168},[19,150388,150389,150390,150393],{},"运行后会生成 ",[71,150391,150392],{},"line.html","，用浏览器打开即可看到图表。",[19,150395,150396],{},"核心步骤：",[1452,150398,150399,150402,150405,150408,150411],{},[1455,150400,150401],{},"导入图表类。",[1455,150403,150404],{},"创建图表对象。",[1455,150406,150407],{},"添加 x 轴数据。",[1455,150409,150410],{},"添加 y 轴数据。",[1455,150412,150413],{},"渲染为 HTML。",[14,150415,150417],{"id":150416},"_105-全局配置","10.5 全局配置",[19,150419,150420,150421,150424],{},"常用配置在 ",[71,150422,150423],{},"pyecharts.options"," 中。",[153,150426,150428],{"className":155,"code":150427,"language":157,"meta":158,"style":158},"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",[71,150429,150430,150447,150457,150461,150469,150493,150521,150526,150545,150564,150582,150602,150606],{"__ignoreMap":158},[162,150431,150432,150434,150437,150439,150442,150444],{"class":164,"line":165},[162,150433,33821],{"class":172},[162,150435,150436],{"class":168}," pyecharts ",[162,150438,33478],{"class":172},[162,150440,150441],{"class":168}," options ",[162,150443,34466],{"class":172},[162,150445,150446],{"class":168}," opts\n",[162,150448,150449,150451,150453,150455],{"class":164,"line":197},[162,150450,33821],{"class":172},[162,150452,150295],{"class":168},[162,150454,33478],{"class":172},[162,150456,150300],{"class":168},[162,150458,150459],{"class":164,"line":228},[162,150460,301],{"emptyLinePlaceholder":300},[162,150462,150463,150465,150467],{"class":164,"line":252},[162,150464,150309],{"class":168},[162,150466,173],{"class":172},[162,150468,150314],{"class":168},[162,150470,150471,150473,150475,150477,150479,150481,150483,150485,150487,150489,150491],{"class":164,"line":328},[162,150472,150319],{"class":168},[162,150474,150322],{"class":179},[162,150476,183],{"class":168},[162,150478,150327],{"class":179},[162,150480,183],{"class":168},[162,150482,150332],{"class":179},[162,150484,183],{"class":168},[162,150486,150337],{"class":179},[162,150488,183],{"class":168},[162,150490,150342],{"class":179},[162,150492,315],{"class":168},[162,150494,150495,150497,150499,150501,150503,150505,150507,150509,150511,150513,150515,150517,150519],{"class":164,"line":466},[162,150496,150349],{"class":168},[162,150498,150352],{"class":179},[162,150500,80583],{"class":168},[162,150502,3608],{"class":207},[162,150504,183],{"class":168},[162,150506,4098],{"class":207},[162,150508,183],{"class":168},[162,150510,875],{"class":207},[162,150512,183],{"class":168},[162,150514,150369],{"class":207},[162,150516,183],{"class":168},[162,150518,150374],{"class":207},[162,150520,315],{"class":168},[162,150522,150523],{"class":164,"line":471},[162,150524,150525],{"class":168},"line.set_global_opts(\n",[162,150527,150528,150531,150533,150536,150538,150540,150543],{"class":164,"line":687},[162,150529,150530],{"class":671},"    title_opts",[162,150532,173],{"class":172},[162,150534,150535],{"class":168},"opts.TitleOpts(",[162,150537,54480],{"class":671},[162,150539,173],{"class":172},[162,150541,150542],{"class":179},"\"一周销售额\"",[162,150544,41122],{"class":168},[162,150546,150547,150550,150552,150555,150557,150559,150562],{"class":164,"line":692},[162,150548,150549],{"class":671},"    xaxis_opts",[162,150551,173],{"class":172},[162,150553,150554],{"class":168},"opts.AxisOpts(",[162,150556,82875],{"class":671},[162,150558,173],{"class":172},[162,150560,150561],{"class":179},"\"日期\"",[162,150563,41122],{"class":168},[162,150565,150566,150569,150571,150573,150575,150577,150580],{"class":164,"line":698},[162,150567,150568],{"class":671},"    yaxis_opts",[162,150570,173],{"class":172},[162,150572,150554],{"class":168},[162,150574,82875],{"class":671},[162,150576,173],{"class":172},[162,150578,150579],{"class":179},"\"金额\"",[162,150581,41122],{"class":168},[162,150583,150584,150587,150589,150592,150595,150597,150600],{"class":164,"line":2955},[162,150585,150586],{"class":671},"    tooltip_opts",[162,150588,173],{"class":172},[162,150590,150591],{"class":168},"opts.TooltipOpts(",[162,150593,150594],{"class":671},"trigger",[162,150596,173],{"class":172},[162,150598,150599],{"class":179},"\"axis\"",[162,150601,41122],{"class":168},[162,150603,150604],{"class":164,"line":2960},[162,150605,434],{"class":168},[162,150607,150608,150610,150612],{"class":164,"line":2971},[162,150609,150381],{"class":168},[162,150611,150384],{"class":179},[162,150613,434],{"class":168},[19,150615,150616],{},"常见全局配置：",[26,150618,150619,150628],{},[29,150620,150621],{},[32,150622,150623,150626],{},[35,150624,150625],{},"配置",[35,150627,105759],{},[51,150629,150630,150640,150650,150660,150670,150680],{},[32,150631,150632,150637],{},[56,150633,150634],{},[71,150635,150636],{},"TitleOpts",[56,150638,150639],{},"标题",[32,150641,150642,150647],{},[56,150643,150644],{},[71,150645,150646],{},"LegendOpts",[56,150648,150649],{},"图例",[32,150651,150652,150657],{},[56,150653,150654],{},[71,150655,150656],{},"TooltipOpts",[56,150658,150659],{},"提示框",[32,150661,150662,150667],{},[56,150663,150664],{},[71,150665,150666],{},"AxisOpts",[56,150668,150669],{},"坐标轴",[32,150671,150672,150677],{},[56,150673,150674],{},[71,150675,150676],{},"VisualMapOpts",[56,150678,150679],{},"视觉映射",[32,150681,150682,150687],{},[56,150683,150684],{},[71,150685,150686],{},"DataZoomOpts",[56,150688,150689],{},"区域缩放",[14,150691,150693],{"id":150692},"_106-系列配置","10.6 系列配置",[19,150695,150696],{},"系列配置作用于某一组数据。",[153,150698,150700],{"className":155,"code":150699,"language":157,"meta":158,"style":158},"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",[71,150701,150702,150707,150718,150747,150758,150777],{"__ignoreMap":158},[162,150703,150704],{"class":164,"line":165},[162,150705,150706],{"class":168},"line.add_yaxis(\n",[162,150708,150709,150712,150714,150716],{"class":164,"line":197},[162,150710,150711],{"class":671},"    series_name",[162,150713,173],{"class":172},[162,150715,150352],{"class":179},[162,150717,1735],{"class":168},[162,150719,150720,150723,150725,150727,150729,150731,150733,150735,150737,150739,150741,150743,150745],{"class":164,"line":228},[162,150721,150722],{"class":671},"    y_axis",[162,150724,173],{"class":172},[162,150726,4168],{"class":168},[162,150728,3608],{"class":207},[162,150730,183],{"class":168},[162,150732,4098],{"class":207},[162,150734,183],{"class":168},[162,150736,875],{"class":207},[162,150738,183],{"class":168},[162,150740,150369],{"class":207},[162,150742,183],{"class":168},[162,150744,150374],{"class":207},[162,150746,90901],{"class":168},[162,150748,150749,150752,150754,150756],{"class":164,"line":252},[162,150750,150751],{"class":671},"    is_smooth",[162,150753,173],{"class":172},[162,150755,247],{"class":207},[162,150757,1735],{"class":168},[162,150759,150760,150763,150765,150768,150771,150773,150775],{"class":164,"line":328},[162,150761,150762],{"class":671},"    label_opts",[162,150764,173],{"class":172},[162,150766,150767],{"class":168},"opts.LabelOpts(",[162,150769,150770],{"class":671},"is_show",[162,150772,173],{"class":172},[162,150774,247],{"class":207},[162,150776,41122],{"class":168},[162,150778,150779],{"class":164,"line":466},[162,150780,434],{"class":168},[19,150782,150783],{},"常用参数：",[1452,150785,150786,150792,150798,150804,150810],{},[1455,150787,150788,150791],{},[71,150789,150790],{},"series_name","：系列名称。",[1455,150793,150794,150797],{},[71,150795,150796],{},"y_axis","：y 轴数据。",[1455,150799,150800,150803],{},[71,150801,150802],{},"is_smooth","：是否平滑曲线。",[1455,150805,150806,150809],{},[71,150807,150808],{},"label_opts","：标签配置。",[1455,150811,150812,150815],{},[71,150813,150814],{},"symbol_size","：标记点大小。",[14,150817,150819],{"id":150818},"_107-多条折线","10.7 多条折线",[153,150821,150823],{"className":155,"code":150822,"language":157,"meta":158,"style":158},"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",[71,150824,150825,150839,150849,150853,150882,150886,150894,150899,150937,150974,150978,150995,151011,151015],{"__ignoreMap":158},[162,150826,150827,150829,150831,150833,150835,150837],{"class":164,"line":165},[162,150828,33821],{"class":172},[162,150830,150436],{"class":168},[162,150832,33478],{"class":172},[162,150834,150441],{"class":168},[162,150836,34466],{"class":172},[162,150838,150446],{"class":168},[162,150840,150841,150843,150845,150847],{"class":164,"line":197},[162,150842,33821],{"class":172},[162,150844,150295],{"class":168},[162,150846,33478],{"class":172},[162,150848,150300],{"class":168},[162,150850,150851],{"class":164,"line":228},[162,150852,301],{"emptyLinePlaceholder":300},[162,150854,150855,150858,150860,150862,150864,150866,150868,150870,150872,150874,150876,150878,150880],{"class":164,"line":252},[162,150856,150857],{"class":168},"dates ",[162,150859,173],{"class":172},[162,150861,176],{"class":168},[162,150863,150322],{"class":179},[162,150865,183],{"class":168},[162,150867,150327],{"class":179},[162,150869,183],{"class":168},[162,150871,150332],{"class":179},[162,150873,183],{"class":168},[162,150875,150337],{"class":179},[162,150877,183],{"class":168},[162,150879,150342],{"class":179},[162,150881,194],{"class":168},[162,150883,150884],{"class":164,"line":328},[162,150885,301],{"emptyLinePlaceholder":300},[162,150887,150888,150890,150892],{"class":164,"line":466},[162,150889,150309],{"class":168},[162,150891,173],{"class":172},[162,150893,150314],{"class":168},[162,150895,150896],{"class":164,"line":471},[162,150897,150898],{"class":168},"line.add_xaxis(dates)\n",[162,150900,150901,150903,150906,150908,150910,150912,150915,150917,150919,150921,150923,150925,150927,150929,150931,150933,150935],{"class":164,"line":687},[162,150902,150349],{"class":168},[162,150904,150905],{"class":179},"\"线上销售\"",[162,150907,80583],{"class":168},[162,150909,3608],{"class":207},[162,150911,183],{"class":168},[162,150913,150914],{"class":207},"130",[162,150916,183],{"class":168},[162,150918,4098],{"class":207},[162,150920,183],{"class":168},[162,150922,24139],{"class":207},[162,150924,183],{"class":168},[162,150926,4845],{"class":207},[162,150928,115262],{"class":168},[162,150930,150802],{"class":671},[162,150932,173],{"class":172},[162,150934,247],{"class":207},[162,150936,434],{"class":168},[162,150938,150939,150941,150944,150946,150948,150950,150952,150954,150956,150958,150960,150962,150964,150966,150968,150970,150972],{"class":164,"line":692},[162,150940,150349],{"class":168},[162,150942,150943],{"class":179},"\"线下销售\"",[162,150945,80583],{"class":168},[162,150947,3899],{"class":207},[162,150949,183],{"class":168},[162,150951,875],{"class":207},[162,150953,183],{"class":168},[162,150955,3608],{"class":207},[162,150957,183],{"class":168},[162,150959,4098],{"class":207},[162,150961,183],{"class":168},[162,150963,150369],{"class":207},[162,150965,115262],{"class":168},[162,150967,150802],{"class":671},[162,150969,173],{"class":172},[162,150971,247],{"class":207},[162,150973,434],{"class":168},[162,150975,150976],{"class":164,"line":698},[162,150977,150525],{"class":168},[162,150979,150980,150982,150984,150986,150988,150990,150993],{"class":164,"line":2955},[162,150981,150530],{"class":671},[162,150983,173],{"class":172},[162,150985,150535],{"class":168},[162,150987,54480],{"class":671},[162,150989,173],{"class":172},[162,150991,150992],{"class":179},"\"线上线下销售趋势\"",[162,150994,41122],{"class":168},[162,150996,150997,150999,151001,151003,151005,151007,151009],{"class":164,"line":2960},[162,150998,150586],{"class":671},[162,151000,173],{"class":172},[162,151002,150591],{"class":168},[162,151004,150594],{"class":671},[162,151006,173],{"class":172},[162,151008,150599],{"class":179},[162,151010,41122],{"class":168},[162,151012,151013],{"class":164,"line":2971},[162,151014,434],{"class":168},[162,151016,151017,151019,151022],{"class":164,"line":2984},[162,151018,150381],{"class":168},[162,151020,151021],{"class":179},"\"sales.html\"",[162,151023,434],{"class":168},[19,151025,151026],{},"多条折线适合比较不同指标或不同地区。",[14,151028,151030],{"id":151029},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,151032,151033,151034,27710],{},"假设 ",[71,151035,151036],{},"sales.json",[153,151038,151040],{"className":150102,"code":151039,"language":148850,"meta":158,"style":158},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[71,151041,151042,151047,151079,151107,151135],{"__ignoreMap":158},[162,151043,151044],{"class":164,"line":165},[162,151045,151046],{"class":168},"[\n",[162,151048,151049,151052,151055,151057,151059,151061,151064,151066,151068,151070,151073,151075,151077],{"class":164,"line":197},[162,151050,151051],{"class":168},"  {",[162,151053,151054],{"class":207},"\"date\"",[162,151056,1730],{"class":168},[162,151058,150322],{"class":179},[162,151060,183],{"class":168},[162,151062,151063],{"class":207},"\"online\"",[162,151065,1730],{"class":168},[162,151067,3608],{"class":207},[162,151069,183],{"class":168},[162,151071,151072],{"class":207},"\"offline\"",[162,151074,1730],{"class":168},[162,151076,3899],{"class":207},[162,151078,2061],{"class":168},[162,151080,151081,151083,151085,151087,151089,151091,151093,151095,151097,151099,151101,151103,151105],{"class":164,"line":228},[162,151082,151051],{"class":168},[162,151084,151054],{"class":207},[162,151086,1730],{"class":168},[162,151088,150327],{"class":179},[162,151090,183],{"class":168},[162,151092,151063],{"class":207},[162,151094,1730],{"class":168},[162,151096,150914],{"class":207},[162,151098,183],{"class":168},[162,151100,151072],{"class":207},[162,151102,1730],{"class":168},[162,151104,875],{"class":207},[162,151106,2061],{"class":168},[162,151108,151109,151111,151113,151115,151117,151119,151121,151123,151125,151127,151129,151131,151133],{"class":164,"line":252},[162,151110,151051],{"class":168},[162,151112,151054],{"class":207},[162,151114,1730],{"class":168},[162,151116,150332],{"class":179},[162,151118,183],{"class":168},[162,151120,151063],{"class":207},[162,151122,1730],{"class":168},[162,151124,4098],{"class":207},[162,151126,183],{"class":168},[162,151128,151072],{"class":207},[162,151130,1730],{"class":168},[162,151132,3608],{"class":207},[162,151134,1498],{"class":168},[162,151136,151137],{"class":164,"line":328},[162,151138,194],{"class":168},[19,151140,151141],{},"读取并绘图：",[153,151143,151145],{"className":155,"code":151144,"language":157,"meta":158,"style":158},"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",[71,151146,151147,151153,151167,151177,151181,151213,151226,151230,151238,151247,151256,151260,151272,151281,151290,151299,151303,151311,151315,151332,151349,151353,151370,151386,151390],{"__ignoreMap":158},[162,151148,151149,151151],{"class":164,"line":165},[162,151150,33478],{"class":172},[162,151152,150148],{"class":168},[162,151154,151155,151157,151159,151161,151163,151165],{"class":164,"line":197},[162,151156,33821],{"class":172},[162,151158,150436],{"class":168},[162,151160,33478],{"class":172},[162,151162,150441],{"class":168},[162,151164,34466],{"class":172},[162,151166,150446],{"class":168},[162,151168,151169,151171,151173,151175],{"class":164,"line":228},[162,151170,33821],{"class":172},[162,151172,150295],{"class":168},[162,151174,33478],{"class":172},[162,151176,150300],{"class":168},[162,151178,151179],{"class":164,"line":252},[162,151180,301],{"emptyLinePlaceholder":300},[162,151182,151183,151185,151187,151189,151192,151194,151196,151198,151200,151202,151204,151206,151208,151211],{"class":164,"line":328},[162,151184,110894],{"class":172},[162,151186,149849],{"class":207},[162,151188,604],{"class":168},[162,151190,151191],{"class":179},"\"sales.json\"",[162,151193,183],{"class":168},[162,151195,149859],{"class":179},[162,151197,183],{"class":168},[162,151199,149864],{"class":671},[162,151201,173],{"class":172},[162,151203,149869],{"class":179},[162,151205,1823],{"class":168},[162,151207,34466],{"class":172},[162,151209,151210],{"class":671}," file",[162,151212,2316],{"class":168},[162,151214,151215,151217,151219,151222,151224],{"class":164,"line":466},[162,151216,104485],{"class":168},[162,151218,173],{"class":172},[162,151220,151221],{"class":168}," json.load(",[162,151223,48429],{"class":671},[162,151225,434],{"class":168},[162,151227,151228],{"class":164,"line":471},[162,151229,301],{"emptyLinePlaceholder":300},[162,151231,151232,151234,151236],{"class":164,"line":687},[162,151233,150857],{"class":168},[162,151235,173],{"class":172},[162,151237,260],{"class":168},[162,151239,151240,151243,151245],{"class":164,"line":692},[162,151241,151242],{"class":168},"online_sales ",[162,151244,173],{"class":172},[162,151246,260],{"class":168},[162,151248,151249,151252,151254],{"class":164,"line":698},[162,151250,151251],{"class":168},"offline_sales ",[162,151253,173],{"class":172},[162,151255,260],{"class":168},[162,151257,151258],{"class":164,"line":2955},[162,151259,301],{"emptyLinePlaceholder":300},[162,151261,151262,151264,151267,151269],{"class":164,"line":2960},[162,151263,808],{"class":172},[162,151265,151266],{"class":168}," item ",[162,151268,814],{"class":172},[162,151270,151271],{"class":168}," data:\n",[162,151273,151274,151277,151279],{"class":164,"line":2971},[162,151275,151276],{"class":168},"    dates.append(item[",[162,151278,151054],{"class":179},[162,151280,315],{"class":168},[162,151282,151283,151286,151288],{"class":164,"line":2984},[162,151284,151285],{"class":168},"    online_sales.append(item[",[162,151287,151063],{"class":179},[162,151289,315],{"class":168},[162,151291,151292,151295,151297],{"class":164,"line":2989},[162,151293,151294],{"class":168},"    offline_sales.append(item[",[162,151296,151072],{"class":179},[162,151298,315],{"class":168},[162,151300,151301],{"class":164,"line":3011},[162,151302,301],{"emptyLinePlaceholder":300},[162,151304,151305,151307,151309],{"class":164,"line":3022},[162,151306,150309],{"class":168},[162,151308,173],{"class":172},[162,151310,150314],{"class":168},[162,151312,151313],{"class":164,"line":3027},[162,151314,150898],{"class":168},[162,151316,151317,151319,151321,151324,151326,151328,151330],{"class":164,"line":3046},[162,151318,150349],{"class":168},[162,151320,150905],{"class":179},[162,151322,151323],{"class":168},", online_sales, ",[162,151325,150802],{"class":671},[162,151327,173],{"class":172},[162,151329,247],{"class":207},[162,151331,434],{"class":168},[162,151333,151334,151336,151338,151341,151343,151345,151347],{"class":164,"line":3052},[162,151335,150349],{"class":168},[162,151337,150943],{"class":179},[162,151339,151340],{"class":168},", offline_sales, ",[162,151342,150802],{"class":671},[162,151344,173],{"class":172},[162,151346,247],{"class":207},[162,151348,434],{"class":168},[162,151350,151351],{"class":164,"line":3057},[162,151352,150525],{"class":168},[162,151354,151355,151357,151359,151361,151363,151365,151368],{"class":164,"line":3072},[162,151356,150530],{"class":671},[162,151358,173],{"class":172},[162,151360,150535],{"class":168},[162,151362,54480],{"class":671},[162,151364,173],{"class":172},[162,151366,151367],{"class":179},"\"销售趋势\"",[162,151369,41122],{"class":168},[162,151371,151372,151374,151376,151378,151380,151382,151384],{"class":164,"line":3077},[162,151373,150586],{"class":671},[162,151375,173],{"class":172},[162,151377,150591],{"class":168},[162,151379,150594],{"class":671},[162,151381,173],{"class":172},[162,151383,150599],{"class":179},[162,151385,41122],{"class":168},[162,151387,151388],{"class":164,"line":3100},[162,151389,434],{"class":168},[162,151391,151392,151394,151396],{"class":164,"line":3140},[162,151393,150381],{"class":168},[162,151395,151021],{"class":179},[162,151397,434],{"class":168},[14,151399,151401],{"id":151400},"_109-数据清洗","10.9 数据清洗",[19,151403,151404],{},"真实数据经常不整齐，需要清洗。",[19,151406,151407],{},"常见问题：",[1452,151409,151410,151413,151416,151419],{},[1455,151411,151412],{},"数字是字符串。",[1455,151414,151415],{},"字段缺失。",[1455,151417,151418],{},"空值。",[1455,151420,151421],{},"日期格式不统一。",[19,151423,18228],{},[153,151425,151427],{"className":155,"code":151426,"language":157,"meta":158,"style":158},"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",[71,151428,151429,151438,151460,151480,151501,151505,151509,151517,151526,151530,151541,151555,151564,151569,151573,151581,151591,151595,151602],{"__ignoreMap":158},[162,151430,151431,151434,151436],{"class":164,"line":165},[162,151432,151433],{"class":168},"raw_data ",[162,151435,173],{"class":172},[162,151437,2030],{"class":168},[162,151439,151440,151442,151444,151446,151448,151450,151453,151455,151458],{"class":164,"line":197},[162,151441,2035],{"class":168},[162,151443,151054],{"class":179},[162,151445,1730],{"class":168},[162,151447,150322],{"class":179},[162,151449,183],{"class":168},[162,151451,151452],{"class":179},"\"sales\"",[162,151454,1730],{"class":168},[162,151456,151457],{"class":179},"\"100\"",[162,151459,2061],{"class":168},[162,151461,151462,151464,151466,151468,151470,151472,151474,151476,151478],{"class":164,"line":228},[162,151463,2035],{"class":168},[162,151465,151054],{"class":179},[162,151467,1730],{"class":168},[162,151469,150327],{"class":179},[162,151471,183],{"class":168},[162,151473,151452],{"class":179},[162,151475,1730],{"class":168},[162,151477,10756],{"class":179},[162,151479,2061],{"class":168},[162,151481,151482,151484,151486,151488,151490,151492,151494,151496,151499],{"class":164,"line":252},[162,151483,2035],{"class":168},[162,151485,151054],{"class":179},[162,151487,1730],{"class":168},[162,151489,150332],{"class":179},[162,151491,183],{"class":168},[162,151493,151452],{"class":179},[162,151495,1730],{"class":168},[162,151497,151498],{"class":179},"\"120\"",[162,151500,2061],{"class":168},[162,151502,151503],{"class":164,"line":328},[162,151504,194],{"class":168},[162,151506,151507],{"class":164,"line":466},[162,151508,301],{"emptyLinePlaceholder":300},[162,151510,151511,151513,151515],{"class":164,"line":471},[162,151512,150857],{"class":168},[162,151514,173],{"class":172},[162,151516,260],{"class":168},[162,151518,151519,151522,151524],{"class":164,"line":687},[162,151520,151521],{"class":168},"sales ",[162,151523,173],{"class":172},[162,151525,260],{"class":168},[162,151527,151528],{"class":164,"line":692},[162,151529,301],{"emptyLinePlaceholder":300},[162,151531,151532,151534,151536,151538],{"class":164,"line":698},[162,151533,808],{"class":172},[162,151535,151266],{"class":168},[162,151537,814],{"class":172},[162,151539,151540],{"class":168}," raw_data:\n",[162,151542,151543,151546,151548,151551,151553],{"class":164,"line":2955},[162,151544,151545],{"class":168},"    value ",[162,151547,173],{"class":172},[162,151549,151550],{"class":168}," item.get(",[162,151552,151452],{"class":179},[162,151554,434],{"class":168},[162,151556,151557,151559,151561],{"class":164,"line":2960},[162,151558,2283],{"class":172},[162,151560,42005],{"class":172},[162,151562,151563],{"class":168}," value:\n",[162,151565,151566],{"class":164,"line":2971},[162,151567,151568],{"class":172},"        continue\n",[162,151570,151571],{"class":164,"line":2984},[162,151572,301],{"emptyLinePlaceholder":300},[162,151574,151575,151577,151579],{"class":164,"line":2989},[162,151576,151276],{"class":168},[162,151578,151054],{"class":179},[162,151580,315],{"class":168},[162,151582,151583,151586,151588],{"class":164,"line":3011},[162,151584,151585],{"class":168},"    sales.append(",[162,151587,3319],{"class":207},[162,151589,151590],{"class":168},"(value))\n",[162,151592,151593],{"class":164,"line":3022},[162,151594,301],{"emptyLinePlaceholder":300},[162,151596,151597,151599],{"class":164,"line":3027},[162,151598,306],{"class":207},[162,151600,151601],{"class":168},"(dates)\n",[162,151603,151604,151606],{"class":164,"line":3046},[162,151605,306],{"class":207},[162,151607,151608],{"class":168},"(sales)\n",[14,151610,151612],{"id":151611},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[153,151614,151616],{"className":155,"code":151615,"language":157,"meta":158,"style":158},"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",[71,151617,151618,151632,151642,151646,151654,151675,151697,151719,151741,151763,151767,151771,151793,151814,151818,151826,151830,151834,151844,151853,151863,151879,151883,151887,151904,151920,151936,151952,151962,151966],{"__ignoreMap":158},[162,151619,151620,151622,151624,151626,151628,151630],{"class":164,"line":165},[162,151621,33821],{"class":172},[162,151623,150436],{"class":168},[162,151625,33478],{"class":172},[162,151627,150441],{"class":168},[162,151629,34466],{"class":172},[162,151631,150446],{"class":168},[162,151633,151634,151636,151638,151640],{"class":164,"line":197},[162,151635,33821],{"class":172},[162,151637,150295],{"class":168},[162,151639,33478],{"class":172},[162,151641,150300],{"class":168},[162,151643,151644],{"class":164,"line":228},[162,151645,301],{"emptyLinePlaceholder":300},[162,151647,151648,151650,151652],{"class":164,"line":252},[162,151649,151521],{"class":168},[162,151651,173],{"class":172},[162,151653,2030],{"class":168},[162,151655,151656,151658,151660,151662,151665,151667,151669,151671,151673],{"class":164,"line":328},[162,151657,2035],{"class":168},[162,151659,151054],{"class":179},[162,151661,1730],{"class":168},[162,151663,151664],{"class":179},"\"2024-10-01\"",[162,151666,183],{"class":168},[162,151668,87149],{"class":179},[162,151670,1730],{"class":168},[162,151672,95088],{"class":207},[162,151674,2061],{"class":168},[162,151676,151677,151679,151681,151683,151686,151688,151690,151692,151695],{"class":164,"line":466},[162,151678,2035],{"class":168},[162,151680,151054],{"class":179},[162,151682,1730],{"class":168},[162,151684,151685],{"class":179},"\"2024-10-02\"",[162,151687,183],{"class":168},[162,151689,87149],{"class":179},[162,151691,1730],{"class":168},[162,151693,151694],{"class":207},"1800",[162,151696,2061],{"class":168},[162,151698,151699,151701,151703,151705,151708,151710,151712,151714,151717],{"class":164,"line":471},[162,151700,2035],{"class":168},[162,151702,151054],{"class":179},[162,151704,1730],{"class":168},[162,151706,151707],{"class":179},"\"2024-10-03\"",[162,151709,183],{"class":168},[162,151711,87149],{"class":179},[162,151713,1730],{"class":168},[162,151715,151716],{"class":207},"1500",[162,151718,2061],{"class":168},[162,151720,151721,151723,151725,151727,151730,151732,151734,151736,151739],{"class":164,"line":687},[162,151722,2035],{"class":168},[162,151724,151054],{"class":179},[162,151726,1730],{"class":168},[162,151728,151729],{"class":179},"\"2024-10-04\"",[162,151731,183],{"class":168},[162,151733,87149],{"class":179},[162,151735,1730],{"class":168},[162,151737,151738],{"class":207},"2100",[162,151740,2061],{"class":168},[162,151742,151743,151745,151747,151749,151752,151754,151756,151758,151761],{"class":164,"line":692},[162,151744,2035],{"class":168},[162,151746,151054],{"class":179},[162,151748,1730],{"class":168},[162,151750,151751],{"class":179},"\"2024-10-05\"",[162,151753,183],{"class":168},[162,151755,87149],{"class":179},[162,151757,1730],{"class":168},[162,151759,151760],{"class":207},"2600",[162,151762,2061],{"class":168},[162,151764,151765],{"class":164,"line":698},[162,151766,194],{"class":168},[162,151768,151769],{"class":164,"line":2955},[162,151770,301],{"emptyLinePlaceholder":300},[162,151772,151773,151775,151777,151780,151782,151784,151786,151788,151790],{"class":164,"line":2960},[162,151774,150857],{"class":168},[162,151776,173],{"class":172},[162,151778,151779],{"class":168}," [item[",[162,151781,151054],{"class":179},[162,151783,1204],{"class":168},[162,151785,808],{"class":172},[162,151787,151266],{"class":168},[162,151789,814],{"class":172},[162,151791,151792],{"class":168}," sales]\n",[162,151794,151795,151798,151800,151802,151804,151806,151808,151810,151812],{"class":164,"line":2971},[162,151796,151797],{"class":168},"amounts ",[162,151799,173],{"class":172},[162,151801,151779],{"class":168},[162,151803,87149],{"class":179},[162,151805,1204],{"class":168},[162,151807,808],{"class":172},[162,151809,151266],{"class":168},[162,151811,814],{"class":172},[162,151813,151792],{"class":168},[162,151815,151816],{"class":164,"line":2984},[162,151817,301],{"emptyLinePlaceholder":300},[162,151819,151820,151822,151824],{"class":164,"line":2989},[162,151821,150309],{"class":168},[162,151823,173],{"class":172},[162,151825,150314],{"class":168},[162,151827,151828],{"class":164,"line":3011},[162,151829,150898],{"class":168},[162,151831,151832],{"class":164,"line":3022},[162,151833,150706],{"class":168},[162,151835,151836,151838,151840,151842],{"class":164,"line":3027},[162,151837,150711],{"class":671},[162,151839,173],{"class":172},[162,151841,150352],{"class":179},[162,151843,1735],{"class":168},[162,151845,151846,151848,151850],{"class":164,"line":3046},[162,151847,150722],{"class":671},[162,151849,173],{"class":172},[162,151851,151852],{"class":168},"amounts,\n",[162,151854,151855,151857,151859,151861],{"class":164,"line":3052},[162,151856,150751],{"class":671},[162,151858,173],{"class":172},[162,151860,247],{"class":207},[162,151862,1735],{"class":168},[162,151864,151865,151867,151869,151871,151873,151875,151877],{"class":164,"line":3057},[162,151866,150762],{"class":671},[162,151868,173],{"class":172},[162,151870,150767],{"class":168},[162,151872,150770],{"class":671},[162,151874,173],{"class":172},[162,151876,247],{"class":207},[162,151878,41122],{"class":168},[162,151880,151881],{"class":164,"line":3072},[162,151882,434],{"class":168},[162,151884,151885],{"class":164,"line":3077},[162,151886,150525],{"class":168},[162,151888,151889,151891,151893,151895,151897,151899,151902],{"class":164,"line":3100},[162,151890,150530],{"class":671},[162,151892,173],{"class":172},[162,151894,150535],{"class":168},[162,151896,54480],{"class":671},[162,151898,173],{"class":172},[162,151900,151901],{"class":179},"\"每日销售额\"",[162,151903,41122],{"class":168},[162,151905,151906,151908,151910,151912,151914,151916,151918],{"class":164,"line":3140},[162,151907,150549],{"class":671},[162,151909,173],{"class":172},[162,151911,150554],{"class":168},[162,151913,82875],{"class":671},[162,151915,173],{"class":172},[162,151917,150561],{"class":179},[162,151919,41122],{"class":168},[162,151921,151922,151924,151926,151928,151930,151932,151934],{"class":164,"line":4878},[162,151923,150568],{"class":671},[162,151925,173],{"class":172},[162,151927,150554],{"class":168},[162,151929,82875],{"class":671},[162,151931,173],{"class":172},[162,151933,150579],{"class":179},[162,151935,41122],{"class":168},[162,151937,151938,151940,151942,151944,151946,151948,151950],{"class":164,"line":4883},[162,151939,150586],{"class":671},[162,151941,173],{"class":172},[162,151943,150591],{"class":168},[162,151945,150594],{"class":671},[162,151947,173],{"class":172},[162,151949,150599],{"class":179},[162,151951,41122],{"class":168},[162,151953,151954,151957,151959],{"class":164,"line":4897},[162,151955,151956],{"class":671},"    datazoom_opts",[162,151958,173],{"class":172},[162,151960,151961],{"class":168},"[opts.DataZoomOpts()],\n",[162,151963,151964],{"class":164,"line":4902},[162,151965,434],{"class":168},[162,151967,151968,151970,151973],{"class":164,"line":5694},[162,151969,150381],{"class":168},[162,151971,151972],{"class":179},"\"daily_sales.html\"",[162,151974,434],{"class":168},[19,151976,151977,151980],{},[71,151978,151979],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,151982,151984],{"id":151983},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,151986,151987],{},"如果数据结构如下：",[153,151989,151991],{"className":155,"code":151990,"language":157,"meta":158,"style":158},"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",[71,151992,151993,152001,152009,152031,152052,152057,152064,152084,152104,152108],{"__ignoreMap":158},[162,151994,151995,151997,151999],{"class":164,"line":165},[162,151996,104721],{"class":168},[162,151998,173],{"class":172},[162,152000,1722],{"class":168},[162,152002,152003,152006],{"class":164,"line":197},[162,152004,152005],{"class":179},"    \"北京\"",[162,152007,152008],{"class":168},": [\n",[162,152010,152011,152013,152015,152017,152020,152022,152025,152027,152029],{"class":164,"line":228},[162,152012,8026],{"class":168},[162,152014,151054],{"class":179},[162,152016,1730],{"class":168},[162,152018,152019],{"class":179},"\"2024-01-01\"",[162,152021,183],{"class":168},[162,152023,152024],{"class":179},"\"confirm\"",[162,152026,1730],{"class":168},[162,152028,1006],{"class":207},[162,152030,2061],{"class":168},[162,152032,152033,152035,152037,152039,152042,152044,152046,152048,152050],{"class":164,"line":252},[162,152034,8026],{"class":168},[162,152036,151054],{"class":179},[162,152038,1730],{"class":168},[162,152040,152041],{"class":179},"\"2024-01-02\"",[162,152043,183],{"class":168},[162,152045,152024],{"class":179},[162,152047,1730],{"class":168},[162,152049,3788],{"class":207},[162,152051,2061],{"class":168},[162,152053,152054],{"class":164,"line":328},[162,152055,152056],{"class":168},"    ],\n",[162,152058,152059,152062],{"class":164,"line":466},[162,152060,152061],{"class":179},"    \"上海\"",[162,152063,152008],{"class":168},[162,152065,152066,152068,152070,152072,152074,152076,152078,152080,152082],{"class":164,"line":471},[162,152067,8026],{"class":168},[162,152069,151054],{"class":179},[162,152071,1730],{"class":168},[162,152073,152019],{"class":179},[162,152075,183],{"class":168},[162,152077,152024],{"class":179},[162,152079,1730],{"class":168},[162,152081,3687],{"class":207},[162,152083,2061],{"class":168},[162,152085,152086,152088,152090,152092,152094,152096,152098,152100,152102],{"class":164,"line":687},[162,152087,8026],{"class":168},[162,152089,151054],{"class":179},[162,152091,1730],{"class":168},[162,152093,152041],{"class":179},[162,152095,183],{"class":168},[162,152097,152024],{"class":179},[162,152099,1730],{"class":168},[162,152101,3813],{"class":207},[162,152103,2061],{"class":168},[162,152105,152106],{"class":164,"line":692},[162,152107,152056],{"class":168},[162,152109,152110],{"class":164,"line":698},[162,152111,1498],{"class":168},[19,152113,152114],{},"绘制多地区趋势：",[153,152116,152118],{"className":155,"code":152117,"language":157,"meta":158,"style":158},"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",[71,152119,152120,152134,152144,152148,152173,152177,152185,152189,152193,152205,152227,152240,152244,152248,152265,152281,152285],{"__ignoreMap":158},[162,152121,152122,152124,152126,152128,152130,152132],{"class":164,"line":165},[162,152123,33821],{"class":172},[162,152125,150436],{"class":168},[162,152127,33478],{"class":172},[162,152129,150441],{"class":168},[162,152131,34466],{"class":172},[162,152133,150446],{"class":168},[162,152135,152136,152138,152140,152142],{"class":164,"line":197},[162,152137,33821],{"class":172},[162,152139,150295],{"class":168},[162,152141,33478],{"class":172},[162,152143,150300],{"class":168},[162,152145,152146],{"class":164,"line":228},[162,152147,301],{"emptyLinePlaceholder":300},[162,152149,152150,152152,152154,152156,152158,152160,152162,152164,152166,152169,152171],{"class":164,"line":252},[162,152151,150857],{"class":168},[162,152153,173],{"class":172},[162,152155,151779],{"class":168},[162,152157,151054],{"class":179},[162,152159,1204],{"class":168},[162,152161,808],{"class":172},[162,152163,151266],{"class":168},[162,152165,814],{"class":172},[162,152167,152168],{"class":168}," data[",[162,152170,1033],{"class":179},[162,152172,80592],{"class":168},[162,152174,152175],{"class":164,"line":328},[162,152176,301],{"emptyLinePlaceholder":300},[162,152178,152179,152181,152183],{"class":164,"line":466},[162,152180,150309],{"class":168},[162,152182,173],{"class":172},[162,152184,150314],{"class":168},[162,152186,152187],{"class":164,"line":471},[162,152188,150898],{"class":168},[162,152190,152191],{"class":164,"line":687},[162,152192,301],{"emptyLinePlaceholder":300},[162,152194,152195,152197,152200,152202],{"class":164,"line":692},[162,152196,808],{"class":172},[162,152198,152199],{"class":168}," city, records ",[162,152201,814],{"class":172},[162,152203,152204],{"class":168}," data.items():\n",[162,152206,152207,152210,152212,152214,152216,152218,152220,152222,152224],{"class":164,"line":698},[162,152208,152209],{"class":168},"    values ",[162,152211,173],{"class":172},[162,152213,151779],{"class":168},[162,152215,152024],{"class":179},[162,152217,1204],{"class":168},[162,152219,808],{"class":172},[162,152221,151266],{"class":168},[162,152223,814],{"class":172},[162,152225,152226],{"class":168}," records]\n",[162,152228,152229,152232,152234,152236,152238],{"class":164,"line":2955},[162,152230,152231],{"class":168},"    line.add_yaxis(city, values, ",[162,152233,150802],{"class":671},[162,152235,173],{"class":172},[162,152237,247],{"class":207},[162,152239,434],{"class":168},[162,152241,152242],{"class":164,"line":2960},[162,152243,301],{"emptyLinePlaceholder":300},[162,152245,152246],{"class":164,"line":2971},[162,152247,150525],{"class":168},[162,152249,152250,152252,152254,152256,152258,152260,152263],{"class":164,"line":2984},[162,152251,150530],{"class":671},[162,152253,173],{"class":172},[162,152255,150535],{"class":168},[162,152257,54480],{"class":671},[162,152259,173],{"class":172},[162,152261,152262],{"class":179},"\"多地区趋势图\"",[162,152264,41122],{"class":168},[162,152266,152267,152269,152271,152273,152275,152277,152279],{"class":164,"line":2989},[162,152268,150586],{"class":671},[162,152270,173],{"class":172},[162,152272,150591],{"class":168},[162,152274,150594],{"class":671},[162,152276,173],{"class":172},[162,152278,150599],{"class":179},[162,152280,41122],{"class":168},[162,152282,152283],{"class":164,"line":3011},[162,152284,434],{"class":168},[162,152286,152287,152289,152292],{"class":164,"line":3022},[162,152288,150381],{"class":168},[162,152290,152291],{"class":179},"\"trend.html\"",[162,152293,434],{"class":168},[19,152295,152296],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,152298,152300],{"id":152299},"_1012-易错点","10.12 易错点",[1452,152302,152303,152309,152315,152325,152331],{},[1455,152304,152305,152308],{},[71,152306,152307],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[1455,152310,152311,152314],{},[71,152312,152313],{},"render()"," 生成的是 HTML，不是图片。",[1455,152316,152317,152318,152321,152322,3183],{},"JSON 字符串用 ",[71,152319,152320],{},"json.loads()","，JSON 文件用 ",[71,152323,152324],{},"json.load()",[1455,152326,152327,152328,3183],{},"中文 JSON 保存时加 ",[71,152329,152330],{},"ensure_ascii=False",[1455,152332,152333],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,152335,152337],{"id":152336},"_1013-本章练习","10.13 本章练习",[1452,152339,152340,152343,152346,152349,152352],{},[1455,152341,152342],{},"安装 pyecharts 并生成第一个折线图。",[1455,152344,152345],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[1455,152347,152348],{},"绘制两条折线，对比线上和线下销售额。",[1455,152350,152351],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[1455,152353,152354],{},"对含有空值的销售数据进行清洗后再绘图。",[3219,152356,152357],{},"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":158,"searchDepth":197,"depth":197,"links":152359},[152360,152361,152362,152363,152364,152365,152366,152367,152368,152369,152370,152371,152372],{"id":149978,"depth":197,"text":149979},{"id":150053,"depth":197,"text":150054},{"id":150231,"depth":197,"text":150232},{"id":150282,"depth":197,"text":150283},{"id":150416,"depth":197,"text":150417},{"id":150692,"depth":197,"text":150693},{"id":150818,"depth":197,"text":150819},{"id":151029,"depth":197,"text":151030},{"id":151400,"depth":197,"text":151401},{"id":151611,"depth":197,"text":151612},{"id":151983,"depth":197,"text":151984},{"id":152299,"depth":197,"text":152300},{"id":152336,"depth":197,"text":152337},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":149970,"description":3241},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":152379,"title":152380,"body":152381,"description":3241,"extension":3242,"meta":154735,"navigation":300,"path":154736,"seo":154737,"stem":154738,"__hash__":154739},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":152382,"toc":154712},[152383,152386,152390,152393,152396,152472,152475,152565,152568,152572,152575,152619,152632,152636,152639,152706,152709,152713,152716,152800,152808,152812,152817,152957,152960,152971,152977,152983,153096,153100,153103,153106,153359,153362,153366,153369,153473,153476,153480,153631,153635,153642,153754,153758,153761,153867,153870,153874,153877,153908,153911,154015,154018,154022,154026,154036,154104,154108,154115,154179,154182,154186,154192,154288,154297,154301,154624,154633,154637,154665,154669,154709],[10,152384,152380],{"id":152385},"_11-面向对象基础",[14,152387,152389],{"id":152388},"_111-什么是面向对象","11.1 什么是面向对象",[19,152391,152392],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,152394,152395],{},"面向过程：",[153,152397,152399],{"className":155,"code":152398,"language":157,"meta":158,"style":158},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[71,152400,152401,152410,152418,152422,152432,152463,152467],{"__ignoreMap":158},[162,152402,152403,152405,152407],{"class":164,"line":165},[162,152404,149594],{"class":168},[162,152406,173],{"class":172},[162,152408,152409],{"class":179}," \"小明\"\n",[162,152411,152412,152414,152416],{"class":164,"line":197},[162,152413,149604],{"class":168},[162,152415,173],{"class":172},[162,152417,149609],{"class":207},[162,152419,152420],{"class":164,"line":228},[162,152421,301],{"emptyLinePlaceholder":300},[162,152423,152424,152426,152429],{"class":164,"line":252},[162,152425,35026],{"class":172},[162,152427,152428],{"class":5082}," introduce",[162,152430,152431],{"class":168},"(name, age):\n",[162,152433,152434,152436,152438,152440,152443,152445,152447,152449,152452,152454,152456,152458,152461],{"class":164,"line":328},[162,152435,822],{"class":207},[162,152437,604],{"class":168},[162,152439,961],{"class":172},[162,152441,152442],{"class":179},"\"我叫",[162,152444,967],{"class":207},[162,152446,82875],{"class":168},[162,152448,976],{"class":207},[162,152450,152451],{"class":179},"，今年",[162,152453,967],{"class":207},[162,152455,73286],{"class":168},[162,152457,976],{"class":207},[162,152459,152460],{"class":179},"岁\"",[162,152462,434],{"class":168},[162,152464,152465],{"class":164,"line":466},[162,152466,301],{"emptyLinePlaceholder":300},[162,152468,152469],{"class":164,"line":471},[162,152470,152471],{"class":168},"introduce(name, age)\n",[19,152473,152474],{},"面向对象：",[153,152476,152478],{"className":155,"code":152477,"language":157,"meta":158,"style":158},"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",[71,152479,152480,152488,152496,152525,152529,152533,152542,152551,152560],{"__ignoreMap":158},[162,152481,152482,152484,152486],{"class":164,"line":165},[162,152483,17788],{"class":172},[162,152485,11002],{"class":5082},[162,152487,2316],{"class":168},[162,152489,152490,152492,152494],{"class":164,"line":197},[162,152491,33885],{"class":172},[162,152493,152428],{"class":5082},[162,152495,33891],{"class":168},[162,152497,152498,152500,152502,152504,152506,152509,152511,152513,152515,152517,152519,152521,152523],{"class":164,"line":228},[162,152499,2300],{"class":207},[162,152501,604],{"class":168},[162,152503,961],{"class":172},[162,152505,152442],{"class":179},[162,152507,152508],{"class":207},"{self",[162,152510,83366],{"class":168},[162,152512,976],{"class":207},[162,152514,152451],{"class":179},[162,152516,152508],{"class":207},[162,152518,83378],{"class":168},[162,152520,976],{"class":207},[162,152522,152460],{"class":179},[162,152524,434],{"class":168},[162,152526,152527],{"class":164,"line":252},[162,152528,301],{"emptyLinePlaceholder":300},[162,152530,152531],{"class":164,"line":328},[162,152532,301],{"emptyLinePlaceholder":300},[162,152534,152535,152537,152539],{"class":164,"line":466},[162,152536,1717],{"class":168},[162,152538,173],{"class":172},[162,152540,152541],{"class":168}," Student()\n",[162,152543,152544,152547,152549],{"class":164,"line":471},[162,152545,152546],{"class":168},"student.name ",[162,152548,173],{"class":172},[162,152550,152409],{"class":179},[162,152552,152553,152556,152558],{"class":164,"line":687},[162,152554,152555],{"class":168},"student.age ",[162,152557,173],{"class":172},[162,152559,149609],{"class":207},[162,152561,152562],{"class":164,"line":692},[162,152563,152564],{"class":168},"student.introduce()\n",[19,152566,152567],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,152569,152571],{"id":152570},"_112-类和对象","11.2 类和对象",[19,152573,152574],{},"类是模板，对象是根据模板创建出来的具体实例。",[153,152576,152578],{"className":155,"code":152577,"language":157,"meta":158,"style":158},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[71,152579,152580,152588,152593,152597,152601,152610],{"__ignoreMap":158},[162,152581,152582,152584,152586],{"class":164,"line":165},[162,152583,17788],{"class":172},[162,152585,11002],{"class":5082},[162,152587,2316],{"class":168},[162,152589,152590],{"class":164,"line":197},[162,152591,152592],{"class":172},"    pass\n",[162,152594,152595],{"class":164,"line":228},[162,152596,301],{"emptyLinePlaceholder":300},[162,152598,152599],{"class":164,"line":252},[162,152600,301],{"emptyLinePlaceholder":300},[162,152602,152603,152606,152608],{"class":164,"line":328},[162,152604,152605],{"class":168},"student1 ",[162,152607,173],{"class":172},[162,152609,152541],{"class":168},[162,152611,152612,152615,152617],{"class":164,"line":466},[162,152613,152614],{"class":168},"student2 ",[162,152616,173],{"class":172},[162,152618,152541],{"class":168},[19,152620,152621,152624,152625,104082,152628,152631],{},[71,152622,152623],{},"Student"," 是类，",[71,152626,152627],{},"student1",[71,152629,152630],{},"student2"," 是对象。",[14,152633,152635],{"id":152634},"_113-属性","11.3 属性",[19,152637,152638],{},"属性是对象保存的数据。",[153,152640,152642],{"className":155,"code":152641,"language":157,"meta":158,"style":158},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[71,152643,152644,152652,152656,152660,152664,152672,152680,152688,152692,152699],{"__ignoreMap":158},[162,152645,152646,152648,152650],{"class":164,"line":165},[162,152647,17788],{"class":172},[162,152649,11002],{"class":5082},[162,152651,2316],{"class":168},[162,152653,152654],{"class":164,"line":197},[162,152655,152592],{"class":172},[162,152657,152658],{"class":164,"line":228},[162,152659,301],{"emptyLinePlaceholder":300},[162,152661,152662],{"class":164,"line":252},[162,152663,301],{"emptyLinePlaceholder":300},[162,152665,152666,152668,152670],{"class":164,"line":328},[162,152667,1717],{"class":168},[162,152669,173],{"class":172},[162,152671,152541],{"class":168},[162,152673,152674,152676,152678],{"class":164,"line":466},[162,152675,152546],{"class":168},[162,152677,173],{"class":172},[162,152679,152409],{"class":179},[162,152681,152682,152684,152686],{"class":164,"line":471},[162,152683,152555],{"class":168},[162,152685,173],{"class":172},[162,152687,149609],{"class":207},[162,152689,152690],{"class":164,"line":687},[162,152691,301],{"emptyLinePlaceholder":300},[162,152693,152694,152696],{"class":164,"line":692},[162,152695,306],{"class":207},[162,152697,152698],{"class":168},"(student.name)\n",[162,152700,152701,152703],{"class":164,"line":698},[162,152702,306],{"class":207},[162,152704,152705],{"class":168},"(student.age)\n",[19,152707,152708],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,152710,152712],{"id":152711},"_114-方法","11.4 方法",[19,152714,152715],{},"类中的函数叫方法。",[153,152717,152718],{"className":155,"code":152477,"language":157,"meta":158,"style":158},[71,152719,152720,152728,152736,152764,152768,152772,152780,152788,152796],{"__ignoreMap":158},[162,152721,152722,152724,152726],{"class":164,"line":165},[162,152723,17788],{"class":172},[162,152725,11002],{"class":5082},[162,152727,2316],{"class":168},[162,152729,152730,152732,152734],{"class":164,"line":197},[162,152731,33885],{"class":172},[162,152733,152428],{"class":5082},[162,152735,33891],{"class":168},[162,152737,152738,152740,152742,152744,152746,152748,152750,152752,152754,152756,152758,152760,152762],{"class":164,"line":228},[162,152739,2300],{"class":207},[162,152741,604],{"class":168},[162,152743,961],{"class":172},[162,152745,152442],{"class":179},[162,152747,152508],{"class":207},[162,152749,83366],{"class":168},[162,152751,976],{"class":207},[162,152753,152451],{"class":179},[162,152755,152508],{"class":207},[162,152757,83378],{"class":168},[162,152759,976],{"class":207},[162,152761,152460],{"class":179},[162,152763,434],{"class":168},[162,152765,152766],{"class":164,"line":252},[162,152767,301],{"emptyLinePlaceholder":300},[162,152769,152770],{"class":164,"line":328},[162,152771,301],{"emptyLinePlaceholder":300},[162,152773,152774,152776,152778],{"class":164,"line":466},[162,152775,1717],{"class":168},[162,152777,173],{"class":172},[162,152779,152541],{"class":168},[162,152781,152782,152784,152786],{"class":164,"line":471},[162,152783,152546],{"class":168},[162,152785,173],{"class":172},[162,152787,152409],{"class":179},[162,152789,152790,152792,152794],{"class":164,"line":687},[162,152791,152555],{"class":168},[162,152793,173],{"class":172},[162,152795,149609],{"class":207},[162,152797,152798],{"class":164,"line":692},[162,152799,152564],{"class":168},[19,152801,152802,152804,152805,152807],{},[71,152803,33907],{}," 表示当前对象。调用方法时不需要手动传入 ",[71,152806,33907],{},"，Python 会自动传。",[14,152809,152811],{"id":152810},"_115-构造方法__init__","11.5 构造方法__init__",[19,152813,152814,152816],{},[71,152815,33913],{}," 在对象创建时自动执行，用于初始化属性。",[153,152818,152820],{"className":155,"code":152819,"language":157,"meta":158,"style":158},"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",[71,152821,152822,152830,152839,152851,152863,152874,152878,152886,152924,152928,152932,152953],{"__ignoreMap":158},[162,152823,152824,152826,152828],{"class":164,"line":165},[162,152825,17788],{"class":172},[162,152827,11002],{"class":5082},[162,152829,2316],{"class":168},[162,152831,152832,152834,152836],{"class":164,"line":197},[162,152833,33885],{"class":172},[162,152835,33888],{"class":207},[162,152837,152838],{"class":168},"(self, name, age, score):\n",[162,152840,152841,152843,152846,152848],{"class":164,"line":228},[162,152842,33929],{"class":207},[162,152844,152845],{"class":168},".name ",[162,152847,173],{"class":172},[162,152849,152850],{"class":168}," name\n",[162,152852,152853,152855,152858,152860],{"class":164,"line":252},[162,152854,33929],{"class":207},[162,152856,152857],{"class":168},".age ",[162,152859,173],{"class":172},[162,152861,152862],{"class":168}," age\n",[162,152864,152865,152867,152870,152872],{"class":164,"line":328},[162,152866,33929],{"class":207},[162,152868,152869],{"class":168},".score ",[162,152871,173],{"class":172},[162,152873,929],{"class":168},[162,152875,152876],{"class":164,"line":466},[162,152877,301],{"emptyLinePlaceholder":300},[162,152879,152880,152882,152884],{"class":164,"line":471},[162,152881,33885],{"class":172},[162,152883,152428],{"class":5082},[162,152885,33891],{"class":168},[162,152887,152888,152890,152892,152894,152896,152898,152900,152902,152904,152906,152908,152910,152913,152915,152918,152920,152922],{"class":164,"line":687},[162,152889,2300],{"class":207},[162,152891,604],{"class":168},[162,152893,961],{"class":172},[162,152895,152442],{"class":179},[162,152897,152508],{"class":207},[162,152899,83366],{"class":168},[162,152901,976],{"class":207},[162,152903,152451],{"class":179},[162,152905,152508],{"class":207},[162,152907,83378],{"class":168},[162,152909,976],{"class":207},[162,152911,152912],{"class":179},"岁，成绩",[162,152914,152508],{"class":207},[162,152916,152917],{"class":168},".score",[162,152919,976],{"class":207},[162,152921,979],{"class":179},[162,152923,434],{"class":168},[162,152925,152926],{"class":164,"line":692},[162,152927,301],{"emptyLinePlaceholder":300},[162,152929,152930],{"class":164,"line":698},[162,152931,301],{"emptyLinePlaceholder":300},[162,152933,152934,152936,152938,152941,152943,152945,152947,152949,152951],{"class":164,"line":2955},[162,152935,1717],{"class":168},[162,152937,173],{"class":172},[162,152939,152940],{"class":168}," Student(",[162,152942,180],{"class":179},[162,152944,183],{"class":168},[162,152946,242],{"class":207},[162,152948,183],{"class":168},[162,152950,2058],{"class":207},[162,152952,434],{"class":168},[162,152954,152955],{"class":164,"line":2960},[162,152956,152564],{"class":168},[19,152958,152959],{},"构造方法的好处：",[1452,152961,152962,152965,152968],{},[1455,152963,152964],{},"创建对象时必须提供必要数据。",[1455,152966,152967],{},"属性初始化集中，不容易漏。",[1455,152969,152970],{},"对象状态更完整。",[14,152972,152974,152975],{"id":152973},"_116-str","11.6 ",[3453,152976,4442],{},[19,152978,152979,152980,3183],{},"直接打印对象时，默认输出不直观。可以定义 ",[71,152981,152982],{},"__str__",[153,152984,152986],{"className":155,"code":152985,"language":157,"meta":158,"style":158},"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",[71,152987,152988,152996,153005,153015,153025,153029,153038,153066,153070,153074,153090],{"__ignoreMap":158},[162,152989,152990,152992,152994],{"class":164,"line":165},[162,152991,17788],{"class":172},[162,152993,11002],{"class":5082},[162,152995,2316],{"class":168},[162,152997,152998,153000,153002],{"class":164,"line":197},[162,152999,33885],{"class":172},[162,153001,33888],{"class":207},[162,153003,153004],{"class":168},"(self, name, age):\n",[162,153006,153007,153009,153011,153013],{"class":164,"line":228},[162,153008,33929],{"class":207},[162,153010,152845],{"class":168},[162,153012,173],{"class":172},[162,153014,152850],{"class":168},[162,153016,153017,153019,153021,153023],{"class":164,"line":252},[162,153018,33929],{"class":207},[162,153020,152857],{"class":168},[162,153022,173],{"class":172},[162,153024,152862],{"class":168},[162,153026,153027],{"class":164,"line":328},[162,153028,301],{"emptyLinePlaceholder":300},[162,153030,153031,153033,153036],{"class":164,"line":466},[162,153032,33885],{"class":172},[162,153034,153035],{"class":207}," __str__",[162,153037,33891],{"class":168},[162,153039,153040,153042,153045,153048,153050,153052,153054,153057,153059,153061,153063],{"class":164,"line":471},[162,153041,17846],{"class":172},[162,153043,153044],{"class":172}," f",[162,153046,153047],{"class":179},"\"Student(name=",[162,153049,152508],{"class":207},[162,153051,83366],{"class":168},[162,153053,976],{"class":207},[162,153055,153056],{"class":179},", age=",[162,153058,152508],{"class":207},[162,153060,83378],{"class":168},[162,153062,976],{"class":207},[162,153064,153065],{"class":179},")\"\n",[162,153067,153068],{"class":164,"line":687},[162,153069,301],{"emptyLinePlaceholder":300},[162,153071,153072],{"class":164,"line":692},[162,153073,301],{"emptyLinePlaceholder":300},[162,153075,153076,153078,153080,153082,153084,153086,153088],{"class":164,"line":698},[162,153077,1717],{"class":168},[162,153079,173],{"class":172},[162,153081,152940],{"class":168},[162,153083,180],{"class":179},[162,153085,183],{"class":168},[162,153087,242],{"class":207},[162,153089,434],{"class":168},[162,153091,153092,153094],{"class":164,"line":2955},[162,153093,306],{"class":207},[162,153095,2303],{"class":168},[14,153097,153099],{"id":153098},"_117-封装","11.7 封装",[19,153101,153102],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,153104,153105],{},"Python 中以双下划线开头的属性通常视为私有属性。",[153,153107,153109],{"className":155,"code":153108,"language":157,"meta":158,"style":158},"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",[71,153110,153111,153120,153129,153141,153153,153157,153166,153175,153179,153189,153202,153213,153218,153229,153233,153242,153254,153265,153269,153282,153293,153297,153308,153312,153316,153334,153343,153352],{"__ignoreMap":158},[162,153112,153113,153115,153118],{"class":164,"line":165},[162,153114,17788],{"class":172},[162,153116,153117],{"class":5082}," Account",[162,153119,2316],{"class":168},[162,153121,153122,153124,153126],{"class":164,"line":197},[162,153123,33885],{"class":172},[162,153125,33888],{"class":207},[162,153127,153128],{"class":168},"(self, owner, balance):\n",[162,153130,153131,153133,153136,153138],{"class":164,"line":228},[162,153132,33929],{"class":207},[162,153134,153135],{"class":168},".owner ",[162,153137,173],{"class":172},[162,153139,153140],{"class":168}," owner\n",[162,153142,153143,153145,153148,153150],{"class":164,"line":252},[162,153144,33929],{"class":207},[162,153146,153147],{"class":168},".__balance ",[162,153149,173],{"class":172},[162,153151,153152],{"class":168}," balance\n",[162,153154,153155],{"class":164,"line":328},[162,153156,301],{"emptyLinePlaceholder":300},[162,153158,153159,153161,153164],{"class":164,"line":466},[162,153160,33885],{"class":172},[162,153162,153163],{"class":5082}," get_balance",[162,153165,33891],{"class":168},[162,153167,153168,153170,153172],{"class":164,"line":471},[162,153169,17846],{"class":172},[162,153171,41948],{"class":207},[162,153173,153174],{"class":168},".__balance\n",[162,153176,153177],{"class":164,"line":687},[162,153178,301],{"emptyLinePlaceholder":300},[162,153180,153181,153183,153186],{"class":164,"line":692},[162,153182,33885],{"class":172},[162,153184,153185],{"class":5082}," deposit",[162,153187,153188],{"class":168},"(self, money):\n",[162,153190,153191,153193,153196,153198,153200],{"class":164,"line":698},[162,153192,5614],{"class":172},[162,153194,153195],{"class":168}," money ",[162,153197,4725],{"class":172},[162,153199,2717],{"class":207},[162,153201,2316],{"class":168},[162,153203,153204,153206,153208,153211],{"class":164,"line":2955},[162,153205,37725],{"class":207},[162,153207,604],{"class":168},[162,153209,153210],{"class":179},"\"存款金额必须大于0\"",[162,153212,434],{"class":168},[162,153214,153215],{"class":164,"line":2960},[162,153216,153217],{"class":172},"            return\n",[162,153219,153220,153222,153224,153226],{"class":164,"line":2971},[162,153221,33929],{"class":207},[162,153223,153147],{"class":168},[162,153225,926],{"class":172},[162,153227,153228],{"class":168}," money\n",[162,153230,153231],{"class":164,"line":2984},[162,153232,301],{"emptyLinePlaceholder":300},[162,153234,153235,153237,153240],{"class":164,"line":2989},[162,153236,33885],{"class":172},[162,153238,153239],{"class":5082}," withdraw",[162,153241,153188],{"class":168},[162,153243,153244,153246,153248,153250,153252],{"class":164,"line":3011},[162,153245,5614],{"class":172},[162,153247,153195],{"class":168},[162,153249,4725],{"class":172},[162,153251,2717],{"class":207},[162,153253,2316],{"class":168},[162,153255,153256,153258,153260,153263],{"class":164,"line":3022},[162,153257,37725],{"class":207},[162,153259,604],{"class":168},[162,153261,153262],{"class":179},"\"取款金额必须大于0\"",[162,153264,434],{"class":168},[162,153266,153267],{"class":164,"line":3027},[162,153268,153217],{"class":172},[162,153270,153271,153273,153275,153277,153279],{"class":164,"line":3046},[162,153272,5614],{"class":172},[162,153274,153195],{"class":168},[162,153276,3000],{"class":172},[162,153278,41948],{"class":207},[162,153280,153281],{"class":168},".__balance:\n",[162,153283,153284,153286,153288,153291],{"class":164,"line":3052},[162,153285,37725],{"class":207},[162,153287,604],{"class":168},[162,153289,153290],{"class":179},"\"余额不足\"",[162,153292,434],{"class":168},[162,153294,153295],{"class":164,"line":3057},[162,153296,153217],{"class":172},[162,153298,153299,153301,153303,153306],{"class":164,"line":3072},[162,153300,33929],{"class":207},[162,153302,153147],{"class":168},[162,153304,153305],{"class":172},"-=",[162,153307,153228],{"class":168},[162,153309,153310],{"class":164,"line":3077},[162,153311,301],{"emptyLinePlaceholder":300},[162,153313,153314],{"class":164,"line":3100},[162,153315,301],{"emptyLinePlaceholder":300},[162,153317,153318,153321,153323,153326,153328,153330,153332],{"class":164,"line":3140},[162,153319,153320],{"class":168},"account ",[162,153322,173],{"class":172},[162,153324,153325],{"class":168}," Account(",[162,153327,180],{"class":179},[162,153329,183],{"class":168},[162,153331,9516],{"class":207},[162,153333,434],{"class":168},[162,153335,153336,153339,153341],{"class":164,"line":4878},[162,153337,153338],{"class":168},"account.deposit(",[162,153340,4845],{"class":207},[162,153342,434],{"class":168},[162,153344,153345,153348,153350],{"class":164,"line":4883},[162,153346,153347],{"class":168},"account.withdraw(",[162,153349,3608],{"class":207},[162,153351,434],{"class":168},[162,153353,153354,153356],{"class":164,"line":4897},[162,153355,306],{"class":207},[162,153357,153358],{"class":168},"(account.get_balance())\n",[19,153360,153361],{},"封装的意义是避免外部随意修改内部状态。",[14,153363,153365],{"id":153364},"_118-继承","11.8 继承",[19,153367,153368],{},"继承可以让子类复用父类的属性和方法。",[153,153370,153372],{"className":155,"code":153371,"language":157,"meta":158,"style":158},"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",[71,153373,153374,153383,153392,153403,153407,153411,153425,153434,153445,153449,153453,153463,153468],{"__ignoreMap":158},[162,153375,153376,153378,153381],{"class":164,"line":165},[162,153377,17788],{"class":172},[162,153379,153380],{"class":5082}," Animal",[162,153382,2316],{"class":168},[162,153384,153385,153387,153390],{"class":164,"line":197},[162,153386,33885],{"class":172},[162,153388,153389],{"class":5082}," eat",[162,153391,33891],{"class":168},[162,153393,153394,153396,153398,153401],{"class":164,"line":228},[162,153395,2300],{"class":207},[162,153397,604],{"class":168},[162,153399,153400],{"class":179},"\"吃东西\"",[162,153402,434],{"class":168},[162,153404,153405],{"class":164,"line":252},[162,153406,301],{"emptyLinePlaceholder":300},[162,153408,153409],{"class":164,"line":328},[162,153410,301],{"emptyLinePlaceholder":300},[162,153412,153413,153415,153418,153420,153423],{"class":164,"line":466},[162,153414,17788],{"class":172},[162,153416,153417],{"class":5082}," Dog",[162,153419,604],{"class":168},[162,153421,153422],{"class":5082},"Animal",[162,153424,33870],{"class":168},[162,153426,153427,153429,153432],{"class":164,"line":471},[162,153428,33885],{"class":172},[162,153430,153431],{"class":5082}," bark",[162,153433,33891],{"class":168},[162,153435,153436,153438,153440,153443],{"class":164,"line":687},[162,153437,2300],{"class":207},[162,153439,604],{"class":168},[162,153441,153442],{"class":179},"\"汪汪\"",[162,153444,434],{"class":168},[162,153446,153447],{"class":164,"line":692},[162,153448,301],{"emptyLinePlaceholder":300},[162,153450,153451],{"class":164,"line":698},[162,153452,301],{"emptyLinePlaceholder":300},[162,153454,153455,153458,153460],{"class":164,"line":2955},[162,153456,153457],{"class":168},"dog ",[162,153459,173],{"class":172},[162,153461,153462],{"class":168}," Dog()\n",[162,153464,153465],{"class":164,"line":2960},[162,153466,153467],{"class":168},"dog.eat()\n",[162,153469,153470],{"class":164,"line":2971},[162,153471,153472],{"class":168},"dog.bark()\n",[19,153474,153475],{},"子类可以扩展新方法，也可以重写父类方法。",[14,153477,153479],{"id":153478},"_119-方法重写","11.9 方法重写",[153,153481,153483],{"className":155,"code":153482,"language":157,"meta":158,"style":158},"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",[71,153484,153485,153493,153502,153513,153517,153521,153533,153541,153551,153555,153559,153572,153580,153591,153595,153599,153607,153617,153621,153626],{"__ignoreMap":158},[162,153486,153487,153489,153491],{"class":164,"line":165},[162,153488,17788],{"class":172},[162,153490,153380],{"class":5082},[162,153492,2316],{"class":168},[162,153494,153495,153497,153500],{"class":164,"line":197},[162,153496,33885],{"class":172},[162,153498,153499],{"class":5082}," speak",[162,153501,33891],{"class":168},[162,153503,153504,153506,153508,153511],{"class":164,"line":228},[162,153505,2300],{"class":207},[162,153507,604],{"class":168},[162,153509,153510],{"class":179},"\"动物叫\"",[162,153512,434],{"class":168},[162,153514,153515],{"class":164,"line":252},[162,153516,301],{"emptyLinePlaceholder":300},[162,153518,153519],{"class":164,"line":328},[162,153520,301],{"emptyLinePlaceholder":300},[162,153522,153523,153525,153527,153529,153531],{"class":164,"line":466},[162,153524,17788],{"class":172},[162,153526,153417],{"class":5082},[162,153528,604],{"class":168},[162,153530,153422],{"class":5082},[162,153532,33870],{"class":168},[162,153534,153535,153537,153539],{"class":164,"line":471},[162,153536,33885],{"class":172},[162,153538,153499],{"class":5082},[162,153540,33891],{"class":168},[162,153542,153543,153545,153547,153549],{"class":164,"line":687},[162,153544,2300],{"class":207},[162,153546,604],{"class":168},[162,153548,153442],{"class":179},[162,153550,434],{"class":168},[162,153552,153553],{"class":164,"line":692},[162,153554,301],{"emptyLinePlaceholder":300},[162,153556,153557],{"class":164,"line":698},[162,153558,301],{"emptyLinePlaceholder":300},[162,153560,153561,153563,153566,153568,153570],{"class":164,"line":2955},[162,153562,17788],{"class":172},[162,153564,153565],{"class":5082}," Cat",[162,153567,604],{"class":168},[162,153569,153422],{"class":5082},[162,153571,33870],{"class":168},[162,153573,153574,153576,153578],{"class":164,"line":2960},[162,153575,33885],{"class":172},[162,153577,153499],{"class":5082},[162,153579,33891],{"class":168},[162,153581,153582,153584,153586,153589],{"class":164,"line":2971},[162,153583,2300],{"class":207},[162,153585,604],{"class":168},[162,153587,153588],{"class":179},"\"喵喵\"",[162,153590,434],{"class":168},[162,153592,153593],{"class":164,"line":2984},[162,153594,301],{"emptyLinePlaceholder":300},[162,153596,153597],{"class":164,"line":2989},[162,153598,301],{"emptyLinePlaceholder":300},[162,153600,153601,153603,153605],{"class":164,"line":3011},[162,153602,153457],{"class":168},[162,153604,173],{"class":172},[162,153606,153462],{"class":168},[162,153608,153609,153612,153614],{"class":164,"line":3022},[162,153610,153611],{"class":168},"cat ",[162,153613,173],{"class":172},[162,153615,153616],{"class":168}," Cat()\n",[162,153618,153619],{"class":164,"line":3027},[162,153620,301],{"emptyLinePlaceholder":300},[162,153622,153623],{"class":164,"line":3046},[162,153624,153625],{"class":168},"dog.speak()\n",[162,153627,153628],{"class":164,"line":3052},[162,153629,153630],{"class":168},"cat.speak()\n",[14,153632,153634],{"id":153633},"_1110-super","11.10 super",[19,153636,153637,153638,153641],{},"子类可以通过 ",[71,153639,153640],{},"super()"," 调用父类方法。",[153,153643,153645],{"className":155,"code":153644,"language":157,"meta":158,"style":158},"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",[71,153646,153647,153655,153664,153674,153678,153682,153694,153703,153713,153723,153727,153731,153747],{"__ignoreMap":158},[162,153648,153649,153651,153653],{"class":164,"line":165},[162,153650,17788],{"class":172},[162,153652,18661],{"class":5082},[162,153654,2316],{"class":168},[162,153656,153657,153659,153661],{"class":164,"line":197},[162,153658,33885],{"class":172},[162,153660,33888],{"class":207},[162,153662,153663],{"class":168},"(self, name):\n",[162,153665,153666,153668,153670,153672],{"class":164,"line":228},[162,153667,33929],{"class":207},[162,153669,152845],{"class":168},[162,153671,173],{"class":172},[162,153673,152850],{"class":168},[162,153675,153676],{"class":164,"line":252},[162,153677,301],{"emptyLinePlaceholder":300},[162,153679,153680],{"class":164,"line":328},[162,153681,301],{"emptyLinePlaceholder":300},[162,153683,153684,153686,153688,153690,153692],{"class":164,"line":466},[162,153685,17788],{"class":172},[162,153687,11002],{"class":5082},[162,153689,604],{"class":168},[162,153691,22137],{"class":5082},[162,153693,33870],{"class":168},[162,153695,153696,153698,153700],{"class":164,"line":471},[162,153697,33885],{"class":172},[162,153699,33888],{"class":207},[162,153701,153702],{"class":168},"(self, name, score):\n",[162,153704,153705,153707,153709,153711],{"class":164,"line":687},[162,153706,33901],{"class":207},[162,153708,20352],{"class":168},[162,153710,33913],{"class":207},[162,153712,825],{"class":168},[162,153714,153715,153717,153719,153721],{"class":164,"line":692},[162,153716,33929],{"class":207},[162,153718,152869],{"class":168},[162,153720,173],{"class":172},[162,153722,929],{"class":168},[162,153724,153725],{"class":164,"line":698},[162,153726,301],{"emptyLinePlaceholder":300},[162,153728,153729],{"class":164,"line":2955},[162,153730,301],{"emptyLinePlaceholder":300},[162,153732,153733,153735,153737,153739,153741,153743,153745],{"class":164,"line":2960},[162,153734,1717],{"class":168},[162,153736,173],{"class":172},[162,153738,152940],{"class":168},[162,153740,180],{"class":179},[162,153742,183],{"class":168},[162,153744,2058],{"class":207},[162,153746,434],{"class":168},[162,153748,153749,153751],{"class":164,"line":2971},[162,153750,306],{"class":207},[162,153752,153753],{"class":168},"(student.name, student.score)\n",[14,153755,153757],{"id":153756},"_1111-多态","11.11 多态",[19,153759,153760],{},"多态指不同对象响应同一个方法，表现出不同结果。",[153,153762,153764],{"className":155,"code":153763,"language":157,"meta":158,"style":158},"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",[71,153765,153766,153774,153782,153792,153796,153800,153808,153816,153826,153830,153834,153844,153849,153853,153857,153862],{"__ignoreMap":158},[162,153767,153768,153770,153772],{"class":164,"line":165},[162,153769,17788],{"class":172},[162,153771,153417],{"class":5082},[162,153773,2316],{"class":168},[162,153775,153776,153778,153780],{"class":164,"line":197},[162,153777,33885],{"class":172},[162,153779,153499],{"class":5082},[162,153781,33891],{"class":168},[162,153783,153784,153786,153788,153790],{"class":164,"line":228},[162,153785,2300],{"class":207},[162,153787,604],{"class":168},[162,153789,153442],{"class":179},[162,153791,434],{"class":168},[162,153793,153794],{"class":164,"line":252},[162,153795,301],{"emptyLinePlaceholder":300},[162,153797,153798],{"class":164,"line":328},[162,153799,301],{"emptyLinePlaceholder":300},[162,153801,153802,153804,153806],{"class":164,"line":466},[162,153803,17788],{"class":172},[162,153805,153565],{"class":5082},[162,153807,2316],{"class":168},[162,153809,153810,153812,153814],{"class":164,"line":471},[162,153811,33885],{"class":172},[162,153813,153499],{"class":5082},[162,153815,33891],{"class":168},[162,153817,153818,153820,153822,153824],{"class":164,"line":687},[162,153819,2300],{"class":207},[162,153821,604],{"class":168},[162,153823,153588],{"class":179},[162,153825,434],{"class":168},[162,153827,153828],{"class":164,"line":692},[162,153829,301],{"emptyLinePlaceholder":300},[162,153831,153832],{"class":164,"line":698},[162,153833,301],{"emptyLinePlaceholder":300},[162,153835,153836,153838,153841],{"class":164,"line":2955},[162,153837,35026],{"class":172},[162,153839,153840],{"class":5082}," make_sound",[162,153842,153843],{"class":168},"(animal):\n",[162,153845,153846],{"class":164,"line":2960},[162,153847,153848],{"class":168},"    animal.speak()\n",[162,153850,153851],{"class":164,"line":2971},[162,153852,301],{"emptyLinePlaceholder":300},[162,153854,153855],{"class":164,"line":2984},[162,153856,301],{"emptyLinePlaceholder":300},[162,153858,153859],{"class":164,"line":2989},[162,153860,153861],{"class":168},"make_sound(Dog())\n",[162,153863,153864],{"class":164,"line":3011},[162,153865,153866],{"class":168},"make_sound(Cat())\n",[19,153868,153869],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,153871,153873],{"id":153872},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,153875,153876],{},"实例属性属于对象：",[153,153878,153880],{"className":155,"code":153879,"language":157,"meta":158,"style":158},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[71,153881,153882,153890,153898],{"__ignoreMap":158},[162,153883,153884,153886,153888],{"class":164,"line":165},[162,153885,17788],{"class":172},[162,153887,11002],{"class":5082},[162,153889,2316],{"class":168},[162,153891,153892,153894,153896],{"class":164,"line":197},[162,153893,33885],{"class":172},[162,153895,33888],{"class":207},[162,153897,153663],{"class":168},[162,153899,153900,153902,153904,153906],{"class":164,"line":228},[162,153901,33929],{"class":207},[162,153903,152845],{"class":168},[162,153905,173],{"class":172},[162,153907,152850],{"class":168},[19,153909,153910],{},"类属性属于类，所有对象共享：",[153,153912,153914],{"className":155,"code":153913,"language":157,"meta":158,"style":158},"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",[71,153915,153916,153924,153934,153938,153946,153956,153960,153964,153977,153990,153994,154001,154008],{"__ignoreMap":158},[162,153917,153918,153920,153922],{"class":164,"line":165},[162,153919,17788],{"class":172},[162,153921,11002],{"class":5082},[162,153923,2316],{"class":168},[162,153925,153926,153929,153931],{"class":164,"line":197},[162,153927,153928],{"class":168},"    school ",[162,153930,173],{"class":172},[162,153932,153933],{"class":179}," \"黑马学校\"\n",[162,153935,153936],{"class":164,"line":228},[162,153937,301],{"emptyLinePlaceholder":300},[162,153939,153940,153942,153944],{"class":164,"line":252},[162,153941,33885],{"class":172},[162,153943,33888],{"class":207},[162,153945,153663],{"class":168},[162,153947,153948,153950,153952,153954],{"class":164,"line":328},[162,153949,33929],{"class":207},[162,153951,152845],{"class":168},[162,153953,173],{"class":172},[162,153955,152850],{"class":168},[162,153957,153958],{"class":164,"line":466},[162,153959,301],{"emptyLinePlaceholder":300},[162,153961,153962],{"class":164,"line":471},[162,153963,301],{"emptyLinePlaceholder":300},[162,153965,153966,153969,153971,153973,153975],{"class":164,"line":687},[162,153967,153968],{"class":168},"s1 ",[162,153970,173],{"class":172},[162,153972,152940],{"class":168},[162,153974,180],{"class":179},[162,153976,434],{"class":168},[162,153978,153979,153982,153984,153986,153988],{"class":164,"line":692},[162,153980,153981],{"class":168},"s2 ",[162,153983,173],{"class":172},[162,153985,152940],{"class":168},[162,153987,186],{"class":179},[162,153989,434],{"class":168},[162,153991,153992],{"class":164,"line":698},[162,153993,301],{"emptyLinePlaceholder":300},[162,153995,153996,153998],{"class":164,"line":2955},[162,153997,306],{"class":207},[162,153999,154000],{"class":168},"(s1.school)\n",[162,154002,154003,154005],{"class":164,"line":2960},[162,154004,306],{"class":207},[162,154006,154007],{"class":168},"(s2.school)\n",[162,154009,154010,154012],{"class":164,"line":2971},[162,154011,306],{"class":207},[162,154013,154014],{"class":168},"(Student.school)\n",[19,154016,154017],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,154019,154021],{"id":154020},"_1113-类方法和静态方法","11.13 类方法和静态方法",[3284,154023,154025],{"id":154024},"_11131-类方法","11.13.1 类方法",[19,154027,154028,154029,154032,154033,3183],{},"类方法使用 ",[71,154030,154031],{},"@classmethod","，第一个参数通常是 ",[71,154034,154035],{},"cls",[153,154037,154039],{"className":155,"code":154038,"language":157,"meta":158,"style":158},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[71,154040,154041,154049,154057,154061,154069,154079,154089,154093,154097],{"__ignoreMap":158},[162,154042,154043,154045,154047],{"class":164,"line":165},[162,154044,17788],{"class":172},[162,154046,11002],{"class":5082},[162,154048,2316],{"class":168},[162,154050,154051,154053,154055],{"class":164,"line":197},[162,154052,153928],{"class":168},[162,154054,173],{"class":172},[162,154056,153933],{"class":179},[162,154058,154059],{"class":164,"line":228},[162,154060,301],{"emptyLinePlaceholder":300},[162,154062,154063,154066],{"class":164,"line":252},[162,154064,154065],{"class":5082},"    @",[162,154067,154068],{"class":207},"classmethod\n",[162,154070,154071,154073,154076],{"class":164,"line":328},[162,154072,33885],{"class":172},[162,154074,154075],{"class":5082}," get_school",[162,154077,154078],{"class":168},"(cls):\n",[162,154080,154081,154083,154086],{"class":164,"line":466},[162,154082,17846],{"class":172},[162,154084,154085],{"class":207}," cls",[162,154087,154088],{"class":168},".school\n",[162,154090,154091],{"class":164,"line":471},[162,154092,301],{"emptyLinePlaceholder":300},[162,154094,154095],{"class":164,"line":687},[162,154096,301],{"emptyLinePlaceholder":300},[162,154098,154099,154101],{"class":164,"line":692},[162,154100,306],{"class":207},[162,154102,154103],{"class":168},"(Student.get_school())\n",[3284,154105,154107],{"id":154106},"_11132-静态方法","11.13.2 静态方法",[19,154109,154110,154111,154114],{},"静态方法使用 ",[71,154112,154113],{},"@staticmethod","，不需要访问实例和类。",[153,154116,154118],{"className":155,"code":154117,"language":157,"meta":158,"style":158},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[71,154119,154120,154129,154136,154145,154156,154160,154164],{"__ignoreMap":158},[162,154121,154122,154124,154127],{"class":164,"line":165},[162,154123,17788],{"class":172},[162,154125,154126],{"class":5082}," MathUtils",[162,154128,2316],{"class":168},[162,154130,154131,154133],{"class":164,"line":197},[162,154132,154065],{"class":5082},[162,154134,154135],{"class":207},"staticmethod\n",[162,154137,154138,154140,154142],{"class":164,"line":228},[162,154139,33885],{"class":172},[162,154141,8317],{"class":5082},[162,154143,154144],{"class":168},"(a, b):\n",[162,154146,154147,154149,154151,154153],{"class":164,"line":252},[162,154148,17846],{"class":172},[162,154150,13967],{"class":168},[162,154152,3771],{"class":172},[162,154154,154155],{"class":168}," b\n",[162,154157,154158],{"class":164,"line":328},[162,154159,301],{"emptyLinePlaceholder":300},[162,154161,154162],{"class":164,"line":466},[162,154163,301],{"emptyLinePlaceholder":300},[162,154165,154166,154168,154171,154173,154175,154177],{"class":164,"line":471},[162,154167,306],{"class":207},[162,154169,154170],{"class":168},"(MathUtils.add(",[162,154172,208],{"class":207},[162,154174,183],{"class":168},[162,154176,213],{"class":207},[162,154178,586],{"class":168},[19,154180,154181],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,154183,154185],{"id":154184},"_1114-dataclass","11.14 dataclass",[19,154187,154188,154191],{},[71,154189,154190],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[153,154193,154195],{"className":155,"code":154194,"language":157,"meta":158,"style":158},"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",[71,154196,154197,154209,154213,154217,154222,154230,154238,154246,154254,154258,154262,154282],{"__ignoreMap":158},[162,154198,154199,154201,154204,154206],{"class":164,"line":165},[162,154200,33821],{"class":172},[162,154202,154203],{"class":168}," dataclasses ",[162,154205,33478],{"class":172},[162,154207,154208],{"class":168}," dataclass\n",[162,154210,154211],{"class":164,"line":197},[162,154212,301],{"emptyLinePlaceholder":300},[162,154214,154215],{"class":164,"line":228},[162,154216,301],{"emptyLinePlaceholder":300},[162,154218,154219],{"class":164,"line":252},[162,154220,154221],{"class":5082},"@dataclass\n",[162,154223,154224,154226,154228],{"class":164,"line":328},[162,154225,17788],{"class":172},[162,154227,11002],{"class":5082},[162,154229,2316],{"class":168},[162,154231,154232,154235],{"class":164,"line":466},[162,154233,154234],{"class":168},"    name: ",[162,154236,154237],{"class":207},"str\n",[162,154239,154240,154243],{"class":164,"line":471},[162,154241,154242],{"class":168},"    age: ",[162,154244,154245],{"class":207},"int\n",[162,154247,154248,154251],{"class":164,"line":687},[162,154249,154250],{"class":168},"    score: ",[162,154252,154253],{"class":207},"float\n",[162,154255,154256],{"class":164,"line":692},[162,154257,301],{"emptyLinePlaceholder":300},[162,154259,154260],{"class":164,"line":698},[162,154261,301],{"emptyLinePlaceholder":300},[162,154263,154264,154266,154268,154270,154272,154274,154276,154278,154280],{"class":164,"line":2955},[162,154265,1717],{"class":168},[162,154267,173],{"class":172},[162,154269,152940],{"class":168},[162,154271,180],{"class":179},[162,154273,183],{"class":168},[162,154275,242],{"class":207},[162,154277,183],{"class":168},[162,154279,2058],{"class":207},[162,154281,434],{"class":168},[162,154283,154284,154286],{"class":164,"line":2960},[162,154285,306],{"class":207},[162,154287,2303],{"class":168},[19,154289,154290,154291,3513,154293,154296],{},"它会自动生成 ",[71,154292,33913],{},[71,154294,154295],{},"__repr__"," 等方法。适合数据模型类。",[14,154298,154300],{"id":154299},"_1115-小案例学生类","11.15 小案例：学生类",[153,154302,154304],{"className":155,"code":154303,"language":157,"meta":158,"style":158},"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",[71,154305,154306,154314,154323,154335,154345,154355,154365,154369,154378,154391,154395,154404,154410,154422,154434,154446,154458,154462,154466,154472,154482,154491,154501,154509,154517,154525,154529,154533,154541,154577,154581,154585,154610,154617],{"__ignoreMap":158},[162,154307,154308,154310,154312],{"class":164,"line":165},[162,154309,17788],{"class":172},[162,154311,11002],{"class":5082},[162,154313,2316],{"class":168},[162,154315,154316,154318,154320],{"class":164,"line":197},[162,154317,33885],{"class":172},[162,154319,33888],{"class":207},[162,154321,154322],{"class":168},"(self, student_id, name, age, score):\n",[162,154324,154325,154327,154330,154332],{"class":164,"line":228},[162,154326,33929],{"class":207},[162,154328,154329],{"class":168},".student_id ",[162,154331,173],{"class":172},[162,154333,154334],{"class":168}," student_id\n",[162,154336,154337,154339,154341,154343],{"class":164,"line":252},[162,154338,33929],{"class":207},[162,154340,152845],{"class":168},[162,154342,173],{"class":172},[162,154344,152850],{"class":168},[162,154346,154347,154349,154351,154353],{"class":164,"line":328},[162,154348,33929],{"class":207},[162,154350,152857],{"class":168},[162,154352,173],{"class":172},[162,154354,152862],{"class":168},[162,154356,154357,154359,154361,154363],{"class":164,"line":466},[162,154358,33929],{"class":207},[162,154360,152869],{"class":168},[162,154362,173],{"class":172},[162,154364,929],{"class":168},[162,154366,154367],{"class":164,"line":471},[162,154368,301],{"emptyLinePlaceholder":300},[162,154370,154371,154373,154376],{"class":164,"line":687},[162,154372,33885],{"class":172},[162,154374,154375],{"class":5082}," is_passed",[162,154377,33891],{"class":168},[162,154379,154380,154382,154384,154386,154388],{"class":164,"line":692},[162,154381,17846],{"class":172},[162,154383,41948],{"class":207},[162,154385,152869],{"class":168},[162,154387,3038],{"class":172},[162,154389,154390],{"class":207}," 60\n",[162,154392,154393],{"class":164,"line":698},[162,154394,301],{"emptyLinePlaceholder":300},[162,154396,154397,154399,154402],{"class":164,"line":2955},[162,154398,33885],{"class":172},[162,154400,154401],{"class":5082}," to_dict",[162,154403,33891],{"class":168},[162,154405,154406,154408],{"class":164,"line":2960},[162,154407,17846],{"class":172},[162,154409,1722],{"class":168},[162,154411,154412,154415,154417,154419],{"class":164,"line":2971},[162,154413,154414],{"class":179},"            \"student_id\"",[162,154416,1730],{"class":168},[162,154418,33907],{"class":207},[162,154420,154421],{"class":168},".student_id,\n",[162,154423,154424,154427,154429,154431],{"class":164,"line":2984},[162,154425,154426],{"class":179},"            \"name\"",[162,154428,1730],{"class":168},[162,154430,33907],{"class":207},[162,154432,154433],{"class":168},".name,\n",[162,154435,154436,154439,154441,154443],{"class":164,"line":2989},[162,154437,154438],{"class":179},"            \"age\"",[162,154440,1730],{"class":168},[162,154442,33907],{"class":207},[162,154444,154445],{"class":168},".age,\n",[162,154447,154448,154451,154453,154455],{"class":164,"line":3011},[162,154449,154450],{"class":179},"            \"score\"",[162,154452,1730],{"class":168},[162,154454,33907],{"class":207},[162,154456,154457],{"class":168},".score,\n",[162,154459,154460],{"class":164,"line":3022},[162,154461,5646],{"class":168},[162,154463,154464],{"class":164,"line":3027},[162,154465,301],{"emptyLinePlaceholder":300},[162,154467,154468,154470],{"class":164,"line":3046},[162,154469,154065],{"class":5082},[162,154471,154068],{"class":207},[162,154473,154474,154476,154479],{"class":164,"line":3052},[162,154475,33885],{"class":172},[162,154477,154478],{"class":5082}," from_dict",[162,154480,154481],{"class":168},"(cls, data):\n",[162,154483,154484,154486,154488],{"class":164,"line":3057},[162,154485,17846],{"class":172},[162,154487,154085],{"class":207},[162,154489,154490],{"class":168},"(\n",[162,154492,154493,154496,154499],{"class":164,"line":3072},[162,154494,154495],{"class":168},"            data[",[162,154497,154498],{"class":179},"\"student_id\"",[162,154500,90901],{"class":168},[162,154502,154503,154505,154507],{"class":164,"line":3077},[162,154504,154495],{"class":168},[162,154506,1778],{"class":179},[162,154508,90901],{"class":168},[162,154510,154511,154513,154515],{"class":164,"line":3100},[162,154512,154495],{"class":168},[162,154514,1864],{"class":179},[162,154516,90901],{"class":168},[162,154518,154519,154521,154523],{"class":164,"line":3140},[162,154520,154495],{"class":168},[162,154522,1905],{"class":179},[162,154524,90901],{"class":168},[162,154526,154527],{"class":164,"line":4878},[162,154528,41201],{"class":168},[162,154530,154531],{"class":164,"line":4883},[162,154532,301],{"emptyLinePlaceholder":300},[162,154534,154535,154537,154539],{"class":164,"line":4897},[162,154536,33885],{"class":172},[162,154538,153035],{"class":207},[162,154540,33891],{"class":168},[162,154542,154543,154545,154547,154549,154551,154554,154556,154559,154561,154563,154565,154567,154569,154571,154573,154575],{"class":164,"line":4902},[162,154544,17846],{"class":172},[162,154546,153044],{"class":172},[162,154548,979],{"class":179},[162,154550,152508],{"class":207},[162,154552,154553],{"class":168},".student_id",[162,154555,976],{"class":207},[162,154557,154558],{"class":207}," {self",[162,154560,83366],{"class":168},[162,154562,976],{"class":207},[162,154564,154558],{"class":207},[162,154566,83378],{"class":168},[162,154568,976],{"class":207},[162,154570,154558],{"class":207},[162,154572,152917],{"class":168},[162,154574,976],{"class":207},[162,154576,28225],{"class":179},[162,154578,154579],{"class":164,"line":5694},[162,154580,301],{"emptyLinePlaceholder":300},[162,154582,154583],{"class":164,"line":5708},[162,154584,301],{"emptyLinePlaceholder":300},[162,154586,154587,154589,154591,154593,154596,154598,154600,154602,154604,154606,154608],{"class":164,"line":5716},[162,154588,1717],{"class":168},[162,154590,173],{"class":172},[162,154592,152940],{"class":168},[162,154594,154595],{"class":179},"\"001\"",[162,154597,183],{"class":168},[162,154599,180],{"class":179},[162,154601,183],{"class":168},[162,154603,242],{"class":207},[162,154605,183],{"class":168},[162,154607,2058],{"class":207},[162,154609,434],{"class":168},[162,154611,154612,154614],{"class":164,"line":5721},[162,154613,306],{"class":207},[162,154615,154616],{"class":168},"(student.is_passed())\n",[162,154618,154619,154621],{"class":164,"line":5727},[162,154620,306],{"class":207},[162,154622,154623],{"class":168},"(student.to_dict())\n",[19,154625,154626,104082,154629,154632],{},[71,154627,154628],{},"to_dict()",[71,154630,154631],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,154634,154636],{"id":154635},"_1116-易错点","11.16 易错点",[1452,154638,154639,154645,154651,154656,154659,154662],{},[1455,154640,154641,154642,3183],{},"类名推荐使用大驼峰，如 ",[71,154643,154644],{},"StudentManager",[1455,154646,154647,154648,154650],{},"方法第一个参数必须写 ",[71,154649,33907],{},"，调用时不用传。",[1455,154652,154653,154655],{},[71,154654,33913],{}," 不是普通方法，它在创建对象时自动执行。",[1455,154657,154658],{},"私有属性不是绝对安全，只是约定和名称改写。",[1455,154660,154661],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[1455,154663,154664],{},"类中方法太多时，说明职责可能过重。",[14,154666,154668],{"id":154667},"_1117-本章练习","11.17 本章练习",[1452,154670,154671,154677,154683,154688,154701],{},[1455,154672,154673,154674,154676],{},"定义 ",[71,154675,152623],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[1455,154678,154673,154679,154682],{},[71,154680,154681],{},"Account"," 类，实现存款、取款、查询余额。",[1455,154684,154673,154685,154687],{},[71,154686,20317],{}," 类，计算圆的周长和面积。",[1455,154689,154673,154690,3513,154693,154696,154697,154700],{},[71,154691,154692],{},"Dog",[71,154694,154695],{},"Cat"," 类，并用同一个函数调用它们的 ",[71,154698,154699],{},"speak()"," 方法。",[1455,154702,3186,154703,154705,154706,3183],{},[71,154704,154190],{}," 定义一个商品类 ",[71,154707,154708],{},"Product",[3219,154710,154711],{},"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":158,"searchDepth":197,"depth":197,"links":154713},[154714,154715,154716,154717,154718,154719,154721,154722,154723,154724,154725,154726,154727,154731,154732,154733,154734],{"id":152388,"depth":197,"text":152389},{"id":152570,"depth":197,"text":152571},{"id":152634,"depth":197,"text":152635},{"id":152711,"depth":197,"text":152712},{"id":152810,"depth":197,"text":152811},{"id":152973,"depth":197,"text":154720},"11.6 str",{"id":153098,"depth":197,"text":153099},{"id":153364,"depth":197,"text":153365},{"id":153478,"depth":197,"text":153479},{"id":153633,"depth":197,"text":153634},{"id":153756,"depth":197,"text":153757},{"id":153872,"depth":197,"text":153873},{"id":154020,"depth":197,"text":154021,"children":154728},[154729,154730],{"id":154024,"depth":228,"text":154025},{"id":154106,"depth":228,"text":154107},{"id":154184,"depth":197,"text":154185},{"id":154299,"depth":197,"text":154300},{"id":154635,"depth":197,"text":154636},{"id":154667,"depth":197,"text":154668},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":152380,"description":3241},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":154741,"title":154742,"body":154743,"description":3241,"extension":3242,"meta":158048,"navigation":300,"path":158049,"seo":158050,"stem":158051,"__hash__":158052},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":154744,"toc":158024},[154745,154748,154752,154755,154758,154787,154790,154798,154802,154806,154809,154832,154835,154841,154845,156284,156287,156308,156312,156315,156327,156330,156514,156517,156643,156646,156650,156654,156790,156794,156880,156884,156966,156970,157007,157011,157199,157203,157206,157436,157440,157443,157624,157627,157631,157634,157640,157643,157669,157673,157676,157690,157693,157718,157721,157735,157738,157755,157758,157775,157778,157795,157799,157825,157829,157852,157856,157859,157861,157867,157869,157890,157893,157899,157905,157909,157912,157988,157991,157995,158021],[10,154746,154742],{"id":154747},"_12-综合案例与复习路线",[14,154749,154751],{"id":154750},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,154753,154754],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,154756,154757],{},"一个合格的入门综合项目最好覆盖：",[1452,154759,154760,154763,154766,154769,154772,154775,154778,154781,154784],{},[1455,154761,154762],{},"输入输出。",[1455,154764,154765],{},"判断和循环。",[1455,154767,154768],{},"函数拆分。",[1455,154770,154771],{},"列表、字典等容器。",[1455,154773,154774],{},"文件持久化。",[1455,154776,154777],{},"异常处理。",[1455,154779,154780],{},"模块拆分。",[1455,154782,154783],{},"可选：面向对象。",[1455,154785,154786],{},"可选：数据可视化。",[19,154788,154789],{},"本章整理两个方向：",[1452,154791,154792,154795],{},[1455,154793,154794],{},"学生管理系统。",[1455,154796,154797],{},"销售数据统计和可视化。",[14,154799,154801],{"id":154800},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[3284,154803,154805],{"id":154804},"_1221-需求","12.2.1 需求",[19,154807,154808],{},"实现一个命令行学生管理系统：",[1452,154810,154811,154814,154817,154820,154823,154826,154829],{},[1455,154812,154813],{},"添加学生。",[1455,154815,154816],{},"删除学生。",[1455,154818,154819],{},"修改学生。",[1455,154821,154822],{},"查询学生。",[1455,154824,154825],{},"显示所有学生。",[1455,154827,154828],{},"保存到 JSON 文件。",[1455,154830,154831],{},"程序启动时自动读取 JSON 文件。",[19,154833,154834],{},"学生字段：",[153,154836,154839],{"className":154837,"code":154838,"language":8295,"meta":158},[8293],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[71,154840,154838],{"__ignoreMap":158},[14,154842,154844],{"id":154843},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[153,154846,154848],{"className":155,"code":154847,"language":157,"meta":158,"style":158},"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",[71,154849,154850,154856,154866,154870,154884,154888,154892,154901,154913,154919,154923,154929,154960,154970,154977,154988,154994,154998,155002,155012,155043,155069,155073,155077,155086,155097,155108,155119,155130,155141,155152,155163,155167,155171,155181,155191,155206,155212,155219,155223,155227,155237,155245,155252,155265,155275,155286,155290,155294,155303,155311,155317,155329,155337,155348,155352,155356,155365,155381,155385,155392,155403,155408,155412,155428,155443,155458,155462,155467,155475,155483,155491,155499,155503,155508,155519,155523,155527,155536,155551,155561,155565,155577,155588,155592,155596,155601,155605,155616,155620,155624,155633,155648,155656,155660,155672,155682,155686,155690,155705,155718,155731,155735,155748,155760,155772,155776,155780,155791,155795,155799,155808,155823,155831,155835,155847,155857,155861,155865,155870,155874,155878,155888,155894,155915,155933,155952,155970,155975,155979,155983,155992,156000,156011,156015,156019,156045,156055,156060,156064,156068,156076,156086,156090,156098,156103,156119,156123,156137,156142,156156,156161,156174,156179,156192,156197,156210,156215,156228,156239,156243,156249,156260,156264,156268,156280],{"__ignoreMap":158},[162,154851,154852,154854],{"class":164,"line":165},[162,154853,33478],{"class":172},[162,154855,150148],{"class":168},[162,154857,154858,154860,154862,154864],{"class":164,"line":197},[162,154859,33821],{"class":172},[162,154861,111372],{"class":168},[162,154863,33478],{"class":172},[162,154865,111377],{"class":168},[162,154867,154868],{"class":164,"line":228},[162,154869,301],{"emptyLinePlaceholder":300},[162,154871,154872,154875,154877,154879,154882],{"class":164,"line":252},[162,154873,154874],{"class":207},"DATA_FILE",[162,154876,16659],{"class":172},[162,154878,111606],{"class":168},[162,154880,154881],{"class":179},"\"students.json\"",[162,154883,434],{"class":168},[162,154885,154886],{"class":164,"line":328},[162,154887,301],{"emptyLinePlaceholder":300},[162,154889,154890],{"class":164,"line":466},[162,154891,301],{"emptyLinePlaceholder":300},[162,154893,154894,154896,154899],{"class":164,"line":471},[162,154895,35026],{"class":172},[162,154897,154898],{"class":5082}," load_students",[162,154900,35032],{"class":168},[162,154902,154903,154905,154907,154910],{"class":164,"line":687},[162,154904,2283],{"class":172},[162,154906,42005],{"class":172},[162,154908,154909],{"class":207}," DATA_FILE",[162,154911,154912],{"class":168},".exists():\n",[162,154914,154915,154917],{"class":164,"line":692},[162,154916,17846],{"class":172},[162,154918,260],{"class":168},[162,154920,154921],{"class":164,"line":698},[162,154922,301],{"emptyLinePlaceholder":300},[162,154924,154925,154927],{"class":164,"line":2955},[162,154926,128842],{"class":172},[162,154928,2316],{"class":168},[162,154930,154931,154934,154936,154938,154940,154942,154944,154946,154948,154950,154952,154954,154956,154958],{"class":164,"line":2960},[162,154932,154933],{"class":172},"        with",[162,154935,149849],{"class":207},[162,154937,604],{"class":168},[162,154939,154874],{"class":207},[162,154941,183],{"class":168},[162,154943,149859],{"class":179},[162,154945,183],{"class":168},[162,154947,149864],{"class":671},[162,154949,173],{"class":172},[162,154951,149869],{"class":179},[162,154953,1823],{"class":168},[162,154955,34466],{"class":172},[162,154957,151210],{"class":671},[162,154959,2316],{"class":168},[162,154961,154962,154964,154966,154968],{"class":164,"line":2971},[162,154963,18823],{"class":172},[162,154965,151221],{"class":168},[162,154967,48429],{"class":671},[162,154969,434],{"class":168},[162,154971,154972,154974],{"class":164,"line":2984},[162,154973,128870],{"class":172},[162,154975,154976],{"class":168}," json.JSONDecodeError:\n",[162,154978,154979,154981,154983,154986],{"class":164,"line":2989},[162,154980,2300],{"class":207},[162,154982,604],{"class":168},[162,154984,154985],{"class":179},"\"数据文件格式错误，已使用空数据启动\"",[162,154987,434],{"class":168},[162,154989,154990,154992],{"class":164,"line":3011},[162,154991,17846],{"class":172},[162,154993,260],{"class":168},[162,154995,154996],{"class":164,"line":3022},[162,154997,301],{"emptyLinePlaceholder":300},[162,154999,155000],{"class":164,"line":3027},[162,155001,301],{"emptyLinePlaceholder":300},[162,155003,155004,155006,155009],{"class":164,"line":3046},[162,155005,35026],{"class":172},[162,155007,155008],{"class":5082}," save_students",[162,155010,155011],{"class":168},"(students):\n",[162,155013,155014,155016,155018,155020,155022,155024,155027,155029,155031,155033,155035,155037,155039,155041],{"class":164,"line":3052},[162,155015,37253],{"class":172},[162,155017,149849],{"class":207},[162,155019,604],{"class":168},[162,155021,154874],{"class":207},[162,155023,183],{"class":168},[162,155025,155026],{"class":179},"\"w\"",[162,155028,183],{"class":168},[162,155030,149864],{"class":671},[162,155032,173],{"class":172},[162,155034,149869],{"class":179},[162,155036,1823],{"class":168},[162,155038,34466],{"class":172},[162,155040,151210],{"class":671},[162,155042,2316],{"class":168},[162,155044,155045,155048,155050,155052,155054,155056,155058,155060,155063,155065,155067],{"class":164,"line":3057},[162,155046,155047],{"class":168},"        json.dump(students, ",[162,155049,48429],{"class":671},[162,155051,183],{"class":168},[162,155053,150194],{"class":671},[162,155055,173],{"class":172},[162,155057,37062],{"class":207},[162,155059,183],{"class":168},[162,155061,155062],{"class":671},"indent",[162,155064,173],{"class":172},[162,155066,213],{"class":207},[162,155068,434],{"class":168},[162,155070,155071],{"class":164,"line":3072},[162,155072,301],{"emptyLinePlaceholder":300},[162,155074,155075],{"class":164,"line":3077},[162,155076,301],{"emptyLinePlaceholder":300},[162,155078,155079,155081,155084],{"class":164,"line":3100},[162,155080,35026],{"class":172},[162,155082,155083],{"class":5082}," show_menu",[162,155085,35032],{"class":168},[162,155087,155088,155090,155092,155095],{"class":164,"line":3140},[162,155089,822],{"class":207},[162,155091,604],{"class":168},[162,155093,155094],{"class":179},"\"====== 学生管理系统 ======\"",[162,155096,434],{"class":168},[162,155098,155099,155101,155103,155106],{"class":164,"line":4878},[162,155100,822],{"class":207},[162,155102,604],{"class":168},[162,155104,155105],{"class":179},"\"1. 添加学生\"",[162,155107,434],{"class":168},[162,155109,155110,155112,155114,155117],{"class":164,"line":4883},[162,155111,822],{"class":207},[162,155113,604],{"class":168},[162,155115,155116],{"class":179},"\"2. 删除学生\"",[162,155118,434],{"class":168},[162,155120,155121,155123,155125,155128],{"class":164,"line":4897},[162,155122,822],{"class":207},[162,155124,604],{"class":168},[162,155126,155127],{"class":179},"\"3. 修改学生\"",[162,155129,434],{"class":168},[162,155131,155132,155134,155136,155139],{"class":164,"line":4902},[162,155133,822],{"class":207},[162,155135,604],{"class":168},[162,155137,155138],{"class":179},"\"4. 查询学生\"",[162,155140,434],{"class":168},[162,155142,155143,155145,155147,155150],{"class":164,"line":5694},[162,155144,822],{"class":207},[162,155146,604],{"class":168},[162,155148,155149],{"class":179},"\"5. 显示所有学生\"",[162,155151,434],{"class":168},[162,155153,155154,155156,155158,155161],{"class":164,"line":5708},[162,155155,822],{"class":207},[162,155157,604],{"class":168},[162,155159,155160],{"class":179},"\"0. 退出系统\"",[162,155162,434],{"class":168},[162,155164,155165],{"class":164,"line":5716},[162,155166,301],{"emptyLinePlaceholder":300},[162,155168,155169],{"class":164,"line":5721},[162,155170,301],{"emptyLinePlaceholder":300},[162,155172,155173,155175,155178],{"class":164,"line":5727},[162,155174,35026],{"class":172},[162,155176,155177],{"class":5082}," find_student",[162,155179,155180],{"class":168},"(students, student_id):\n",[162,155182,155183,155185,155187,155189],{"class":164,"line":5733},[162,155184,6315],{"class":172},[162,155186,2136],{"class":168},[162,155188,814],{"class":172},[162,155190,2141],{"class":168},[162,155192,155193,155195,155197,155199,155201,155203],{"class":164,"line":5738},[162,155194,5614],{"class":172},[162,155196,1914],{"class":168},[162,155198,154498],{"class":179},[162,155200,1204],{"class":168},[162,155202,2292],{"class":172},[162,155204,155205],{"class":168}," student_id:\n",[162,155207,155208,155210],{"class":164,"line":11052},[162,155209,18823],{"class":172},[162,155211,3019],{"class":168},[162,155213,155214,155216],{"class":164,"line":11076},[162,155215,7203],{"class":172},[162,155217,155218],{"class":207}," None\n",[162,155220,155221],{"class":164,"line":11081},[162,155222,301],{"emptyLinePlaceholder":300},[162,155224,155225],{"class":164,"line":11087},[162,155226,301],{"emptyLinePlaceholder":300},[162,155228,155229,155231,155234],{"class":164,"line":11114},[162,155230,35026],{"class":172},[162,155232,155233],{"class":5082}," input_int",[162,155235,155236],{"class":168},"(prompt):\n",[162,155238,155239,155241,155243],{"class":164,"line":11119},[162,155240,5369],{"class":172},[162,155242,98357],{"class":207},[162,155244,2316],{"class":168},[162,155246,155247,155250],{"class":164,"line":11125},[162,155248,155249],{"class":172},"        try",[162,155251,2316],{"class":168},[162,155253,155254,155256,155258,155260,155262],{"class":164,"line":11137},[162,155255,18823],{"class":172},[162,155257,5500],{"class":207},[162,155259,604],{"class":168},[162,155261,56891],{"class":207},[162,155263,155264],{"class":168},"(prompt))\n",[162,155266,155267,155270,155273],{"class":164,"line":11149},[162,155268,155269],{"class":172},"        except",[162,155271,155272],{"class":207}," ValueError",[162,155274,2316],{"class":168},[162,155276,155277,155279,155281,155284],{"class":164,"line":11161},[162,155278,37725],{"class":207},[162,155280,604],{"class":168},[162,155282,155283],{"class":179},"\"请输入整数\"",[162,155285,434],{"class":168},[162,155287,155288],{"class":164,"line":12816},[162,155289,301],{"emptyLinePlaceholder":300},[162,155291,155292],{"class":164,"line":12841},[162,155293,301],{"emptyLinePlaceholder":300},[162,155295,155296,155298,155301],{"class":164,"line":12864},[162,155297,35026],{"class":172},[162,155299,155300],{"class":5082}," input_float",[162,155302,155236],{"class":168},[162,155304,155305,155307,155309],{"class":164,"line":12888},[162,155306,5369],{"class":172},[162,155308,98357],{"class":207},[162,155310,2316],{"class":168},[162,155312,155313,155315],{"class":164,"line":12893},[162,155314,155249],{"class":172},[162,155316,2316],{"class":168},[162,155318,155319,155321,155323,155325,155327],{"class":164,"line":12898},[162,155320,18823],{"class":172},[162,155322,112858],{"class":207},[162,155324,604],{"class":168},[162,155326,56891],{"class":207},[162,155328,155264],{"class":168},[162,155330,155331,155333,155335],{"class":164,"line":12903},[162,155332,155269],{"class":172},[162,155334,155272],{"class":207},[162,155336,2316],{"class":168},[162,155338,155339,155341,155343,155346],{"class":164,"line":12912},[162,155340,37725],{"class":207},[162,155342,604],{"class":168},[162,155344,155345],{"class":179},"\"请输入数字\"",[162,155347,434],{"class":168},[162,155349,155350],{"class":164,"line":12917},[162,155351,301],{"emptyLinePlaceholder":300},[162,155353,155354],{"class":164,"line":12923},[162,155355,301],{"emptyLinePlaceholder":300},[162,155357,155358,155360,155363],{"class":164,"line":12944},[162,155359,35026],{"class":172},[162,155361,155362],{"class":5082}," add_student",[162,155364,155011],{"class":168},[162,155366,155367,155370,155372,155374,155376,155379],{"class":164,"line":12950},[162,155368,155369],{"class":168},"    student_id ",[162,155371,173],{"class":172},[162,155373,2257],{"class":207},[162,155375,604],{"class":168},[162,155377,155378],{"class":179},"\"请输入学号:\"",[162,155380,434],{"class":168},[162,155382,155383],{"class":164,"line":12964},[162,155384,301],{"emptyLinePlaceholder":300},[162,155386,155387,155389],{"class":164,"line":12970},[162,155388,2283],{"class":172},[162,155390,155391],{"class":168}," find_student(students, student_id):\n",[162,155393,155394,155396,155398,155401],{"class":164,"line":12997},[162,155395,2300],{"class":207},[162,155397,604],{"class":168},[162,155399,155400],{"class":179},"\"学号已存在\"",[162,155402,434],{"class":168},[162,155404,155405],{"class":164,"line":13006},[162,155406,155407],{"class":172},"        return\n",[162,155409,155410],{"class":164,"line":13012},[162,155411,301],{"emptyLinePlaceholder":300},[162,155413,155414,155417,155419,155421,155423,155426],{"class":164,"line":13020},[162,155415,155416],{"class":168},"    name ",[162,155418,173],{"class":172},[162,155420,2257],{"class":207},[162,155422,604],{"class":168},[162,155424,155425],{"class":179},"\"请输入姓名:\"",[162,155427,434],{"class":168},[162,155429,155430,155433,155435,155438,155441],{"class":164,"line":13025},[162,155431,155432],{"class":168},"    age ",[162,155434,173],{"class":172},[162,155436,155437],{"class":168}," input_int(",[162,155439,155440],{"class":179},"\"请输入年龄:\"",[162,155442,434],{"class":168},[162,155444,155445,155448,155450,155453,155456],{"class":164,"line":19695},[162,155446,155447],{"class":168},"    score ",[162,155449,173],{"class":172},[162,155451,155452],{"class":168}," input_float(",[162,155454,155455],{"class":179},"\"请输入成绩:\"",[162,155457,434],{"class":168},[162,155459,155460],{"class":164,"line":19701},[162,155461,301],{"emptyLinePlaceholder":300},[162,155463,155464],{"class":164,"line":19724},[162,155465,155466],{"class":168},"    students.append({\n",[162,155468,155469,155472],{"class":164,"line":19730},[162,155470,155471],{"class":179},"        \"student_id\"",[162,155473,155474],{"class":168},": student_id,\n",[162,155476,155477,155480],{"class":164,"line":19753},[162,155478,155479],{"class":179},"        \"name\"",[162,155481,155482],{"class":168},": name,\n",[162,155484,155485,155488],{"class":164,"line":19767},[162,155486,155487],{"class":179},"        \"age\"",[162,155489,155490],{"class":168},": age,\n",[162,155492,155493,155496],{"class":164,"line":19787},[162,155494,155495],{"class":179},"        \"score\"",[162,155497,155498],{"class":168},": score,\n",[162,155500,155501],{"class":164,"line":19793},[162,155502,36536],{"class":168},[162,155504,155505],{"class":164,"line":19804},[162,155506,155507],{"class":168},"    save_students(students)\n",[162,155509,155510,155512,155514,155517],{"class":164,"line":19827},[162,155511,822],{"class":207},[162,155513,604],{"class":168},[162,155515,155516],{"class":179},"\"添加成功\"",[162,155518,434],{"class":168},[162,155520,155521],{"class":164,"line":19849},[162,155522,301],{"emptyLinePlaceholder":300},[162,155524,155525],{"class":164,"line":19854},[162,155526,301],{"emptyLinePlaceholder":300},[162,155528,155529,155531,155534],{"class":164,"line":19860},[162,155530,35026],{"class":172},[162,155532,155533],{"class":5082}," delete_student",[162,155535,155011],{"class":168},[162,155537,155538,155540,155542,155544,155546,155549],{"class":164,"line":19874},[162,155539,155369],{"class":168},[162,155541,173],{"class":172},[162,155543,2257],{"class":207},[162,155545,604],{"class":168},[162,155547,155548],{"class":179},"\"请输入要删除的学号:\"",[162,155550,434],{"class":168},[162,155552,155553,155556,155558],{"class":164,"line":19887},[162,155554,155555],{"class":168},"    student ",[162,155557,173],{"class":172},[162,155559,155560],{"class":168}," find_student(students, student_id)\n",[162,155562,155563],{"class":164,"line":19892},[162,155564,301],{"emptyLinePlaceholder":300},[162,155566,155567,155569,155571,155573,155575],{"class":164,"line":19906},[162,155568,2283],{"class":172},[162,155570,2136],{"class":168},[162,155572,42002],{"class":172},[162,155574,42008],{"class":207},[162,155576,2316],{"class":168},[162,155578,155579,155581,155583,155586],{"class":164,"line":19911},[162,155580,2300],{"class":207},[162,155582,604],{"class":168},[162,155584,155585],{"class":179},"\"学生不存在\"",[162,155587,434],{"class":168},[162,155589,155590],{"class":164,"line":19917},[162,155591,155407],{"class":172},[162,155593,155594],{"class":164,"line":19922},[162,155595,301],{"emptyLinePlaceholder":300},[162,155597,155598],{"class":164,"line":19936},[162,155599,155600],{"class":168},"    students.remove(student)\n",[162,155602,155603],{"class":164,"line":19941},[162,155604,155507],{"class":168},[162,155606,155607,155609,155611,155614],{"class":164,"line":19946},[162,155608,822],{"class":207},[162,155610,604],{"class":168},[162,155612,155613],{"class":179},"\"删除成功\"",[162,155615,434],{"class":168},[162,155617,155618],{"class":164,"line":19960},[162,155619,301],{"emptyLinePlaceholder":300},[162,155621,155622],{"class":164,"line":19972},[162,155623,301],{"emptyLinePlaceholder":300},[162,155625,155626,155628,155631],{"class":164,"line":19977},[162,155627,35026],{"class":172},[162,155629,155630],{"class":5082}," update_student",[162,155632,155011],{"class":168},[162,155634,155635,155637,155639,155641,155643,155646],{"class":164,"line":19990},[162,155636,155369],{"class":168},[162,155638,173],{"class":172},[162,155640,2257],{"class":207},[162,155642,604],{"class":168},[162,155644,155645],{"class":179},"\"请输入要修改的学号:\"",[162,155647,434],{"class":168},[162,155649,155650,155652,155654],{"class":164,"line":19995},[162,155651,155555],{"class":168},[162,155653,173],{"class":172},[162,155655,155560],{"class":168},[162,155657,155658],{"class":164,"line":20000},[162,155659,301],{"emptyLinePlaceholder":300},[162,155661,155662,155664,155666,155668,155670],{"class":164,"line":20005},[162,155663,2283],{"class":172},[162,155665,2136],{"class":168},[162,155667,42002],{"class":172},[162,155669,42008],{"class":207},[162,155671,2316],{"class":168},[162,155673,155674,155676,155678,155680],{"class":164,"line":20018},[162,155675,2300],{"class":207},[162,155677,604],{"class":168},[162,155679,155585],{"class":179},[162,155681,434],{"class":168},[162,155683,155684],{"class":164,"line":20023},[162,155685,155407],{"class":172},[162,155687,155688],{"class":164,"line":35709},[162,155689,301],{"emptyLinePlaceholder":300},[162,155691,155692,155694,155696,155698,155700,155703],{"class":164,"line":35715},[162,155693,155416],{"class":168},[162,155695,173],{"class":172},[162,155697,2257],{"class":207},[162,155699,604],{"class":168},[162,155701,155702],{"class":179},"\"请输入新姓名:\"",[162,155704,434],{"class":168},[162,155706,155707,155709,155711,155713,155716],{"class":164,"line":35721},[162,155708,155432],{"class":168},[162,155710,173],{"class":172},[162,155712,155437],{"class":168},[162,155714,155715],{"class":179},"\"请输入新年龄:\"",[162,155717,434],{"class":168},[162,155719,155720,155722,155724,155726,155729],{"class":164,"line":35727},[162,155721,155447],{"class":168},[162,155723,173],{"class":172},[162,155725,155452],{"class":168},[162,155727,155728],{"class":179},"\"请输入新成绩:\"",[162,155730,434],{"class":168},[162,155732,155733],{"class":164,"line":35733},[162,155734,301],{"emptyLinePlaceholder":300},[162,155736,155737,155740,155742,155744,155746],{"class":164,"line":35744},[162,155738,155739],{"class":168},"    student[",[162,155741,1778],{"class":179},[162,155743,1204],{"class":168},[162,155745,173],{"class":172},[162,155747,152850],{"class":168},[162,155749,155750,155752,155754,155756,155758],{"class":164,"line":35750},[162,155751,155739],{"class":168},[162,155753,1864],{"class":179},[162,155755,1204],{"class":168},[162,155757,173],{"class":172},[162,155759,152862],{"class":168},[162,155761,155762,155764,155766,155768,155770],{"class":164,"line":35770},[162,155763,155739],{"class":168},[162,155765,1905],{"class":179},[162,155767,1204],{"class":168},[162,155769,173],{"class":172},[162,155771,929],{"class":168},[162,155773,155774],{"class":164,"line":35776},[162,155775,301],{"emptyLinePlaceholder":300},[162,155777,155778],{"class":164,"line":35787},[162,155779,155507],{"class":168},[162,155781,155782,155784,155786,155789],{"class":164,"line":35793},[162,155783,822],{"class":207},[162,155785,604],{"class":168},[162,155787,155788],{"class":179},"\"修改成功\"",[162,155790,434],{"class":168},[162,155792,155793],{"class":164,"line":35799},[162,155794,301],{"emptyLinePlaceholder":300},[162,155796,155797],{"class":164,"line":35805},[162,155798,301],{"emptyLinePlaceholder":300},[162,155800,155801,155803,155806],{"class":164,"line":35811},[162,155802,35026],{"class":172},[162,155804,155805],{"class":5082}," query_student",[162,155807,155011],{"class":168},[162,155809,155810,155812,155814,155816,155818,155821],{"class":164,"line":35817},[162,155811,155369],{"class":168},[162,155813,173],{"class":172},[162,155815,2257],{"class":207},[162,155817,604],{"class":168},[162,155819,155820],{"class":179},"\"请输入要查询的学号:\"",[162,155822,434],{"class":168},[162,155824,155825,155827,155829],{"class":164,"line":35823},[162,155826,155555],{"class":168},[162,155828,173],{"class":172},[162,155830,155560],{"class":168},[162,155832,155833],{"class":164,"line":35829},[162,155834,301],{"emptyLinePlaceholder":300},[162,155836,155837,155839,155841,155843,155845],{"class":164,"line":35849},[162,155838,2283],{"class":172},[162,155840,2136],{"class":168},[162,155842,42002],{"class":172},[162,155844,42008],{"class":207},[162,155846,2316],{"class":168},[162,155848,155849,155851,155853,155855],{"class":164,"line":35855},[162,155850,2300],{"class":207},[162,155852,604],{"class":168},[162,155854,155585],{"class":179},[162,155856,434],{"class":168},[162,155858,155859],{"class":164,"line":35871},[162,155860,155407],{"class":172},[162,155862,155863],{"class":164,"line":35877},[162,155864,301],{"emptyLinePlaceholder":300},[162,155866,155867],{"class":164,"line":35891},[162,155868,155869],{"class":168},"    print_student(student)\n",[162,155871,155872],{"class":164,"line":35897},[162,155873,301],{"emptyLinePlaceholder":300},[162,155875,155876],{"class":164,"line":35912},[162,155877,301],{"emptyLinePlaceholder":300},[162,155879,155880,155882,155885],{"class":164,"line":35918},[162,155881,35026],{"class":172},[162,155883,155884],{"class":5082}," print_student",[162,155886,155887],{"class":168},"(student):\n",[162,155889,155890,155892],{"class":164,"line":35927},[162,155891,822],{"class":207},[162,155893,154490],{"class":168},[162,155895,155896,155899,155901,155903,155905,155908,155910,155913],{"class":164,"line":35933},[162,155897,155898],{"class":172},"        f",[162,155900,979],{"class":179},[162,155902,967],{"class":207},[162,155904,1804],{"class":168},[162,155906,155907],{"class":179},"'student_id'",[162,155909,3120],{"class":168},[162,155911,155912],{"class":207},"}\\t",[162,155914,28225],{"class":179},[162,155916,155917,155919,155921,155923,155925,155927,155929,155931],{"class":164,"line":35942},[162,155918,155898],{"class":172},[162,155920,979],{"class":179},[162,155922,967],{"class":207},[162,155924,1804],{"class":168},[162,155926,3117],{"class":179},[162,155928,3120],{"class":168},[162,155930,155912],{"class":207},[162,155932,28225],{"class":179},[162,155934,155935,155937,155939,155941,155943,155946,155948,155950],{"class":164,"line":35948},[162,155936,155898],{"class":172},[162,155938,979],{"class":179},[162,155940,967],{"class":207},[162,155942,1804],{"class":168},[162,155944,155945],{"class":179},"'age'",[162,155947,3120],{"class":168},[162,155949,155912],{"class":207},[162,155951,28225],{"class":179},[162,155953,155954,155956,155958,155960,155962,155964,155966,155968],{"class":164,"line":35954},[162,155955,155898],{"class":172},[162,155957,979],{"class":179},[162,155959,967],{"class":207},[162,155961,1804],{"class":168},[162,155963,3129],{"class":179},[162,155965,3120],{"class":168},[162,155967,976],{"class":207},[162,155969,28225],{"class":179},[162,155971,155972],{"class":164,"line":35963},[162,155973,155974],{"class":168},"    )\n",[162,155976,155977],{"class":164,"line":35969},[162,155978,301],{"emptyLinePlaceholder":300},[162,155980,155981],{"class":164,"line":35980},[162,155982,301],{"emptyLinePlaceholder":300},[162,155984,155985,155987,155990],{"class":164,"line":35986},[162,155986,35026],{"class":172},[162,155988,155989],{"class":5082}," show_all_students",[162,155991,155011],{"class":168},[162,155993,155994,155996,155998],{"class":164,"line":36005},[162,155995,2283],{"class":172},[162,155997,42005],{"class":172},[162,155999,2141],{"class":168},[162,156001,156002,156004,156006,156009],{"class":164,"line":36011},[162,156003,2300],{"class":207},[162,156005,604],{"class":168},[162,156007,156008],{"class":179},"\"暂无学生\"",[162,156010,434],{"class":168},[162,156012,156013],{"class":164,"line":36022},[162,156014,155407],{"class":172},[162,156016,156017],{"class":164,"line":36028},[162,156018,301],{"emptyLinePlaceholder":300},[162,156020,156021,156023,156025,156028,156030,156033,156035,156038,156040,156043],{"class":164,"line":36048},[162,156022,822],{"class":207},[162,156024,604],{"class":168},[162,156026,156027],{"class":179},"\"学号",[162,156029,4373],{"class":207},[162,156031,156032],{"class":179},"姓名",[162,156034,4373],{"class":207},[162,156036,156037],{"class":179},"年龄",[162,156039,4373],{"class":207},[162,156041,156042],{"class":179},"成绩\"",[162,156044,434],{"class":168},[162,156046,156047,156049,156051,156053],{"class":164,"line":36064},[162,156048,6315],{"class":172},[162,156050,2136],{"class":168},[162,156052,814],{"class":172},[162,156054,2141],{"class":168},[162,156056,156057],{"class":164,"line":36070},[162,156058,156059],{"class":168},"        print_student(student)\n",[162,156061,156062],{"class":164,"line":36084},[162,156063,301],{"emptyLinePlaceholder":300},[162,156065,156066],{"class":164,"line":36090},[162,156067,301],{"emptyLinePlaceholder":300},[162,156069,156070,156072,156074],{"class":164,"line":36096},[162,156071,35026],{"class":172},[162,156073,5092],{"class":5082},[162,156075,35032],{"class":168},[162,156077,156078,156081,156083],{"class":164,"line":36107},[162,156079,156080],{"class":168},"    students ",[162,156082,173],{"class":172},[162,156084,156085],{"class":168}," load_students()\n",[162,156087,156088],{"class":164,"line":36113},[162,156089,301],{"emptyLinePlaceholder":300},[162,156091,156092,156094,156096],{"class":164,"line":36119},[162,156093,5369],{"class":172},[162,156095,98357],{"class":207},[162,156097,2316],{"class":168},[162,156099,156100],{"class":164,"line":36129},[162,156101,156102],{"class":168},"        show_menu()\n",[162,156104,156105,156108,156110,156112,156114,156117],{"class":164,"line":36135},[162,156106,156107],{"class":168},"        choice ",[162,156109,173],{"class":172},[162,156111,2257],{"class":207},[162,156113,604],{"class":168},[162,156115,156116],{"class":179},"\"请输入操作:\"",[162,156118,434],{"class":168},[162,156120,156121],{"class":164,"line":36146},[162,156122,301],{"emptyLinePlaceholder":300},[162,156124,156125,156127,156130,156132,156135],{"class":164,"line":36152},[162,156126,5614],{"class":172},[162,156128,156129],{"class":168}," choice ",[162,156131,2292],{"class":172},[162,156133,156134],{"class":179}," \"1\"",[162,156136,2316],{"class":168},[162,156138,156139],{"class":164,"line":36162},[162,156140,156141],{"class":168},"            add_student(students)\n",[162,156143,156144,156147,156149,156151,156154],{"class":164,"line":36167},[162,156145,156146],{"class":172},"        elif",[162,156148,156129],{"class":168},[162,156150,2292],{"class":172},[162,156152,156153],{"class":179}," \"2\"",[162,156155,2316],{"class":168},[162,156157,156158],{"class":164,"line":36173},[162,156159,156160],{"class":168},"            delete_student(students)\n",[162,156162,156163,156165,156167,156169,156172],{"class":164,"line":36222},[162,156164,156146],{"class":172},[162,156166,156129],{"class":168},[162,156168,2292],{"class":172},[162,156170,156171],{"class":179}," \"3\"",[162,156173,2316],{"class":168},[162,156175,156176],{"class":164,"line":36269},[162,156177,156178],{"class":168},"            update_student(students)\n",[162,156180,156181,156183,156185,156187,156190],{"class":164,"line":36274},[162,156182,156146],{"class":172},[162,156184,156129],{"class":168},[162,156186,2292],{"class":172},[162,156188,156189],{"class":179}," \"4\"",[162,156191,2316],{"class":168},[162,156193,156194],{"class":164,"line":36280},[162,156195,156196],{"class":168},"            query_student(students)\n",[162,156198,156199,156201,156203,156205,156208],{"class":164,"line":36299},[162,156200,156146],{"class":172},[162,156202,156129],{"class":168},[162,156204,2292],{"class":172},[162,156206,156207],{"class":179}," \"5\"",[162,156209,2316],{"class":168},[162,156211,156212],{"class":164,"line":36305},[162,156213,156214],{"class":168},"            show_all_students(students)\n",[162,156216,156217,156219,156221,156223,156226],{"class":164,"line":36324},[162,156218,156146],{"class":172},[162,156220,156129],{"class":168},[162,156222,2292],{"class":172},[162,156224,156225],{"class":179}," \"0\"",[162,156227,2316],{"class":168},[162,156229,156230,156232,156234,156237],{"class":164,"line":36330},[162,156231,37725],{"class":207},[162,156233,604],{"class":168},[162,156235,156236],{"class":179},"\"退出系统\"",[162,156238,434],{"class":168},[162,156240,156241],{"class":164,"line":36336},[162,156242,118158],{"class":172},[162,156244,156245,156247],{"class":164,"line":36346},[162,156246,5651],{"class":172},[162,156248,2316],{"class":168},[162,156250,156251,156253,156255,156258],{"class":164,"line":36351},[162,156252,37725],{"class":207},[162,156254,604],{"class":168},[162,156256,156257],{"class":179},"\"输入错误\"",[162,156259,434],{"class":168},[162,156261,156262],{"class":164,"line":36357},[162,156263,301],{"emptyLinePlaceholder":300},[162,156265,156266],{"class":164,"line":36373},[162,156267,301],{"emptyLinePlaceholder":300},[162,156269,156270,156272,156274,156276,156278],{"class":164,"line":36418},[162,156271,2703],{"class":172},[162,156273,34304],{"class":207},[162,156275,2714],{"class":172},[162,156277,104625],{"class":179},[162,156279,2316],{"class":168},[162,156281,156282],{"class":164,"line":36424},[162,156283,104632],{"class":168},[19,156285,156286],{},"这个项目串联了：",[1452,156288,156289,156292,156295,156298,156301,156303],{},[1455,156290,156291],{},"菜单循环。",[1455,156293,156294],{},"函数封装。",[1455,156296,156297],{},"列表字典。",[1455,156299,156300],{},"JSON 读写。",[1455,156302,154777],{},[1455,156304,156305,3183],{},[71,156306,156307],{},"if __name__ == \"__main__\"",[14,156309,156311],{"id":156310},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,156313,156314],{},"可以进一步拆成两个类：",[1452,156316,156317,156322],{},[1455,156318,156319,156321],{},[71,156320,152623],{},"：表示单个学生。",[1455,156323,156324,156326],{},[71,156325,154644],{},"：负责学生增删改查和文件保存。",[19,156328,156329],{},"示意代码：",[153,156331,156333],{"className":155,"code":156332,"language":157,"meta":158,"style":158},"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",[71,156334,156335,156345,156349,156353,156357,156365,156372,156378,156384,156390,156394,156402,156408,156418,156428,156438,156448,156452,156456,156462,156470,156478,156486,156494,156502,156510],{"__ignoreMap":158},[162,156336,156337,156339,156341,156343],{"class":164,"line":165},[162,156338,33821],{"class":172},[162,156340,154203],{"class":168},[162,156342,33478],{"class":172},[162,156344,154208],{"class":168},[162,156346,156347],{"class":164,"line":197},[162,156348,301],{"emptyLinePlaceholder":300},[162,156350,156351],{"class":164,"line":228},[162,156352,301],{"emptyLinePlaceholder":300},[162,156354,156355],{"class":164,"line":252},[162,156356,154221],{"class":5082},[162,156358,156359,156361,156363],{"class":164,"line":328},[162,156360,17788],{"class":172},[162,156362,11002],{"class":5082},[162,156364,2316],{"class":168},[162,156366,156367,156370],{"class":164,"line":466},[162,156368,156369],{"class":168},"    student_id: ",[162,156371,154237],{"class":207},[162,156373,156374,156376],{"class":164,"line":471},[162,156375,154234],{"class":168},[162,156377,154237],{"class":207},[162,156379,156380,156382],{"class":164,"line":687},[162,156381,154242],{"class":168},[162,156383,154245],{"class":207},[162,156385,156386,156388],{"class":164,"line":692},[162,156387,154250],{"class":168},[162,156389,154253],{"class":207},[162,156391,156392],{"class":164,"line":698},[162,156393,301],{"emptyLinePlaceholder":300},[162,156395,156396,156398,156400],{"class":164,"line":2955},[162,156397,33885],{"class":172},[162,156399,154401],{"class":5082},[162,156401,33891],{"class":168},[162,156403,156404,156406],{"class":164,"line":2960},[162,156405,17846],{"class":172},[162,156407,1722],{"class":168},[162,156409,156410,156412,156414,156416],{"class":164,"line":2971},[162,156411,154414],{"class":179},[162,156413,1730],{"class":168},[162,156415,33907],{"class":207},[162,156417,154421],{"class":168},[162,156419,156420,156422,156424,156426],{"class":164,"line":2984},[162,156421,154426],{"class":179},[162,156423,1730],{"class":168},[162,156425,33907],{"class":207},[162,156427,154433],{"class":168},[162,156429,156430,156432,156434,156436],{"class":164,"line":2989},[162,156431,154438],{"class":179},[162,156433,1730],{"class":168},[162,156435,33907],{"class":207},[162,156437,154445],{"class":168},[162,156439,156440,156442,156444,156446],{"class":164,"line":3011},[162,156441,154450],{"class":179},[162,156443,1730],{"class":168},[162,156445,33907],{"class":207},[162,156447,154457],{"class":168},[162,156449,156450],{"class":164,"line":3022},[162,156451,5646],{"class":168},[162,156453,156454],{"class":164,"line":3027},[162,156455,301],{"emptyLinePlaceholder":300},[162,156457,156458,156460],{"class":164,"line":3046},[162,156459,154065],{"class":5082},[162,156461,154068],{"class":207},[162,156463,156464,156466,156468],{"class":164,"line":3052},[162,156465,33885],{"class":172},[162,156467,154478],{"class":5082},[162,156469,154481],{"class":168},[162,156471,156472,156474,156476],{"class":164,"line":3057},[162,156473,17846],{"class":172},[162,156475,154085],{"class":207},[162,156477,154490],{"class":168},[162,156479,156480,156482,156484],{"class":164,"line":3072},[162,156481,154495],{"class":168},[162,156483,154498],{"class":179},[162,156485,90901],{"class":168},[162,156487,156488,156490,156492],{"class":164,"line":3077},[162,156489,154495],{"class":168},[162,156491,1778],{"class":179},[162,156493,90901],{"class":168},[162,156495,156496,156498,156500],{"class":164,"line":3100},[162,156497,154495],{"class":168},[162,156499,1864],{"class":179},[162,156501,90901],{"class":168},[162,156503,156504,156506,156508],{"class":164,"line":3140},[162,156505,154495],{"class":168},[162,156507,1905],{"class":179},[162,156509,90901],{"class":168},[162,156511,156512],{"class":164,"line":4878},[162,156513,41201],{"class":168},[19,156515,156516],{},"管理器示意：",[153,156518,156520],{"className":155,"code":156519,"language":157,"meta":158,"style":158},"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",[71,156521,156522,156531,156539,156550,156554,156564,156577,156588,156595,156601,156605,156614,156623,156629,156636],{"__ignoreMap":158},[162,156523,156524,156526,156529],{"class":164,"line":165},[162,156525,17788],{"class":172},[162,156527,156528],{"class":5082}," StudentManager",[162,156530,2316],{"class":168},[162,156532,156533,156535,156537],{"class":164,"line":197},[162,156534,33885],{"class":172},[162,156536,33888],{"class":207},[162,156538,33891],{"class":168},[162,156540,156541,156543,156546,156548],{"class":164,"line":228},[162,156542,33929],{"class":207},[162,156544,156545],{"class":168},".students ",[162,156547,173],{"class":172},[162,156549,260],{"class":168},[162,156551,156552],{"class":164,"line":252},[162,156553,301],{"emptyLinePlaceholder":300},[162,156555,156556,156558,156561],{"class":164,"line":328},[162,156557,33885],{"class":172},[162,156559,156560],{"class":5082}," find_by_id",[162,156562,156563],{"class":168},"(self, student_id):\n",[162,156565,156566,156568,156570,156572,156574],{"class":164,"line":466},[162,156567,6517],{"class":172},[162,156569,2136],{"class":168},[162,156571,814],{"class":172},[162,156573,41948],{"class":207},[162,156575,156576],{"class":168},".students:\n",[162,156578,156579,156581,156584,156586],{"class":164,"line":471},[162,156580,7752],{"class":172},[162,156582,156583],{"class":168}," student.student_id ",[162,156585,2292],{"class":172},[162,156587,155205],{"class":168},[162,156589,156590,156593],{"class":164,"line":687},[162,156591,156592],{"class":172},"                return",[162,156594,3019],{"class":168},[162,156596,156597,156599],{"class":164,"line":692},[162,156598,17846],{"class":172},[162,156600,155218],{"class":207},[162,156602,156603],{"class":164,"line":698},[162,156604,301],{"emptyLinePlaceholder":300},[162,156606,156607,156609,156611],{"class":164,"line":2955},[162,156608,33885],{"class":172},[162,156610,8317],{"class":5082},[162,156612,156613],{"class":168},"(self, student):\n",[162,156615,156616,156618,156620],{"class":164,"line":2960},[162,156617,5614],{"class":172},[162,156619,41948],{"class":207},[162,156621,156622],{"class":168},".find_by_id(student.student_id):\n",[162,156624,156625,156627],{"class":164,"line":2971},[162,156626,18823],{"class":172},[162,156628,128865],{"class":207},[162,156630,156631,156633],{"class":164,"line":2984},[162,156632,33929],{"class":207},[162,156634,156635],{"class":168},".students.append(student)\n",[162,156637,156638,156640],{"class":164,"line":2989},[162,156639,17846],{"class":172},[162,156641,156642],{"class":207}," True\n",[19,156644,156645],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,156647,156649],{"id":156648},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[3284,156651,156653],{"id":156652},"_1251-数据结构","12.5.1 数据结构",[153,156655,156657],{"className":155,"code":156656,"language":157,"meta":158,"style":158},"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",[71,156658,156659,156667,156698,156728,156757,156786],{"__ignoreMap":158},[162,156660,156661,156663,156665],{"class":164,"line":165},[162,156662,151521],{"class":168},[162,156664,173],{"class":172},[162,156666,2030],{"class":168},[162,156668,156669,156671,156673,156675,156677,156679,156682,156684,156687,156689,156691,156693,156696],{"class":164,"line":197},[162,156670,2035],{"class":168},[162,156672,151054],{"class":179},[162,156674,1730],{"class":168},[162,156676,151664],{"class":179},[162,156678,183],{"class":168},[162,156680,156681],{"class":179},"\"category\"",[162,156683,1730],{"class":168},[162,156685,156686],{"class":179},"\"手机\"",[162,156688,183],{"class":168},[162,156690,87149],{"class":179},[162,156692,1730],{"class":168},[162,156694,156695],{"class":207},"12000",[162,156697,2061],{"class":168},[162,156699,156700,156702,156704,156706,156708,156710,156712,156714,156717,156719,156721,156723,156726],{"class":164,"line":228},[162,156701,2035],{"class":168},[162,156703,151054],{"class":179},[162,156705,1730],{"class":168},[162,156707,151664],{"class":179},[162,156709,183],{"class":168},[162,156711,156681],{"class":179},[162,156713,1730],{"class":168},[162,156715,156716],{"class":179},"\"电脑\"",[162,156718,183],{"class":168},[162,156720,87149],{"class":179},[162,156722,1730],{"class":168},[162,156724,156725],{"class":207},"18000",[162,156727,2061],{"class":168},[162,156729,156730,156732,156734,156736,156738,156740,156742,156744,156746,156748,156750,156752,156755],{"class":164,"line":252},[162,156731,2035],{"class":168},[162,156733,151054],{"class":179},[162,156735,1730],{"class":168},[162,156737,151685],{"class":179},[162,156739,183],{"class":168},[162,156741,156681],{"class":179},[162,156743,1730],{"class":168},[162,156745,156686],{"class":179},[162,156747,183],{"class":168},[162,156749,87149],{"class":179},[162,156751,1730],{"class":168},[162,156753,156754],{"class":207},"15000",[162,156756,2061],{"class":168},[162,156758,156759,156761,156763,156765,156767,156769,156771,156773,156775,156777,156779,156781,156784],{"class":164,"line":328},[162,156760,2035],{"class":168},[162,156762,151054],{"class":179},[162,156764,1730],{"class":168},[162,156766,151685],{"class":179},[162,156768,183],{"class":168},[162,156770,156681],{"class":179},[162,156772,1730],{"class":168},[162,156774,156716],{"class":179},[162,156776,183],{"class":168},[162,156778,87149],{"class":179},[162,156780,1730],{"class":168},[162,156782,156783],{"class":207},"16000",[162,156785,2061],{"class":168},[162,156787,156788],{"class":164,"line":466},[162,156789,194],{"class":168},[3284,156791,156793],{"id":156792},"_1252-按日期统计","12.5.2 按日期统计",[153,156795,156797],{"className":155,"code":156796,"language":157,"meta":158,"style":158},"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",[71,156798,156799,156808,156812,156823,156837,156850,156869,156873],{"__ignoreMap":158},[162,156800,156801,156804,156806],{"class":164,"line":165},[162,156802,156803],{"class":168},"daily_total ",[162,156805,173],{"class":172},[162,156807,90933],{"class":168},[162,156809,156810],{"class":164,"line":197},[162,156811,301],{"emptyLinePlaceholder":300},[162,156813,156814,156816,156818,156820],{"class":164,"line":228},[162,156815,808],{"class":172},[162,156817,151266],{"class":168},[162,156819,814],{"class":172},[162,156821,156822],{"class":168}," sales:\n",[162,156824,156825,156828,156830,156833,156835],{"class":164,"line":252},[162,156826,156827],{"class":168},"    date ",[162,156829,173],{"class":172},[162,156831,156832],{"class":168}," item[",[162,156834,151054],{"class":179},[162,156836,194],{"class":168},[162,156838,156839,156842,156844,156846,156848],{"class":164,"line":328},[162,156840,156841],{"class":168},"    amount ",[162,156843,173],{"class":172},[162,156845,156832],{"class":168},[162,156847,87149],{"class":179},[162,156849,194],{"class":168},[162,156851,156852,156855,156857,156860,156862,156864,156866],{"class":164,"line":466},[162,156853,156854],{"class":168},"    daily_total[date] ",[162,156856,173],{"class":172},[162,156858,156859],{"class":168}," daily_total.get(date, ",[162,156861,312],{"class":207},[162,156863,1823],{"class":168},[162,156865,3771],{"class":172},[162,156867,156868],{"class":168}," amount\n",[162,156870,156871],{"class":164,"line":471},[162,156872,301],{"emptyLinePlaceholder":300},[162,156874,156875,156877],{"class":164,"line":687},[162,156876,306],{"class":207},[162,156878,156879],{"class":168},"(daily_total)\n",[3284,156881,156883],{"id":156882},"_1253-按类别统计","12.5.3 按类别统计",[153,156885,156887],{"className":155,"code":156886,"language":157,"meta":158,"style":158},"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",[71,156888,156889,156898,156902,156912,156925,156937,156955,156959],{"__ignoreMap":158},[162,156890,156891,156894,156896],{"class":164,"line":165},[162,156892,156893],{"class":168},"category_total ",[162,156895,173],{"class":172},[162,156897,90933],{"class":168},[162,156899,156900],{"class":164,"line":197},[162,156901,301],{"emptyLinePlaceholder":300},[162,156903,156904,156906,156908,156910],{"class":164,"line":228},[162,156905,808],{"class":172},[162,156907,151266],{"class":168},[162,156909,814],{"class":172},[162,156911,156822],{"class":168},[162,156913,156914,156917,156919,156921,156923],{"class":164,"line":252},[162,156915,156916],{"class":168},"    category ",[162,156918,173],{"class":172},[162,156920,156832],{"class":168},[162,156922,156681],{"class":179},[162,156924,194],{"class":168},[162,156926,156927,156929,156931,156933,156935],{"class":164,"line":328},[162,156928,156841],{"class":168},[162,156930,173],{"class":172},[162,156932,156832],{"class":168},[162,156934,87149],{"class":179},[162,156936,194],{"class":168},[162,156938,156939,156942,156944,156947,156949,156951,156953],{"class":164,"line":466},[162,156940,156941],{"class":168},"    category_total[category] ",[162,156943,173],{"class":172},[162,156945,156946],{"class":168}," category_total.get(category, ",[162,156948,312],{"class":207},[162,156950,1823],{"class":168},[162,156952,3771],{"class":172},[162,156954,156868],{"class":168},[162,156956,156957],{"class":164,"line":471},[162,156958,301],{"emptyLinePlaceholder":300},[162,156960,156961,156963],{"class":164,"line":687},[162,156962,306],{"class":207},[162,156964,156965],{"class":168},"(category_total)\n",[3284,156967,156969],{"id":156968},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[153,156971,156973],{"className":155,"code":156972,"language":157,"meta":158,"style":158},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[71,156974,156975,157000],{"__ignoreMap":158},[162,156976,156977,156980,156982,156984,156987,156990,156993,156996,156998],{"class":164,"line":165},[162,156978,156979],{"class":168},"top_date, top_amount ",[162,156981,173],{"class":172},[162,156983,9058],{"class":207},[162,156985,156986],{"class":168},"(daily_total.items(), ",[162,156988,156989],{"class":671},"key",[162,156991,156992],{"class":172},"=lambda",[162,156994,156995],{"class":168}," item: item[",[162,156997,208],{"class":207},[162,156999,315],{"class":168},[162,157001,157002,157004],{"class":164,"line":197},[162,157003,306],{"class":207},[162,157005,157006],{"class":168},"(top_date, top_amount)\n",[14,157008,157010],{"id":157009},"_126-绘制柱状图","12.6 绘制柱状图",[153,157012,157014],{"className":155,"code":157013,"language":157,"meta":158,"style":158},"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",[71,157015,157016,157030,157041,157045,157053,157065,157077,157088,157092,157096,157106,157116,157130,157135,157152,157169,157185,157189],{"__ignoreMap":158},[162,157017,157018,157020,157022,157024,157026,157028],{"class":164,"line":165},[162,157019,33821],{"class":172},[162,157021,150436],{"class":168},[162,157023,33478],{"class":172},[162,157025,150441],{"class":168},[162,157027,34466],{"class":172},[162,157029,150446],{"class":168},[162,157031,157032,157034,157036,157038],{"class":164,"line":197},[162,157033,33821],{"class":172},[162,157035,150295],{"class":168},[162,157037,33478],{"class":172},[162,157039,157040],{"class":168}," Bar\n",[162,157042,157043],{"class":164,"line":228},[162,157044,301],{"emptyLinePlaceholder":300},[162,157046,157047,157049,157051],{"class":164,"line":252},[162,157048,156893],{"class":168},[162,157050,173],{"class":172},[162,157052,1722],{"class":168},[162,157054,157055,157058,157060,157063],{"class":164,"line":328},[162,157056,157057],{"class":179},"    \"手机\"",[162,157059,1730],{"class":168},[162,157061,157062],{"class":207},"27000",[162,157064,1735],{"class":168},[162,157066,157067,157070,157072,157075],{"class":164,"line":466},[162,157068,157069],{"class":179},"    \"电脑\"",[162,157071,1730],{"class":168},[162,157073,157074],{"class":207},"34000",[162,157076,1735],{"class":168},[162,157078,157079,157082,157084,157086],{"class":164,"line":471},[162,157080,157081],{"class":179},"    \"耳机\"",[162,157083,1730],{"class":168},[162,157085,127457],{"class":207},[162,157087,1735],{"class":168},[162,157089,157090],{"class":164,"line":687},[162,157091,1498],{"class":168},[162,157093,157094],{"class":164,"line":692},[162,157095,301],{"emptyLinePlaceholder":300},[162,157097,157098,157101,157103],{"class":164,"line":698},[162,157099,157100],{"class":168},"bar ",[162,157102,173],{"class":172},[162,157104,157105],{"class":168}," Bar()\n",[162,157107,157108,157111,157113],{"class":164,"line":2955},[162,157109,157110],{"class":168},"bar.add_xaxis(",[162,157112,2496],{"class":207},[162,157114,157115],{"class":168},"(category_total.keys()))\n",[162,157117,157118,157121,157123,157125,157127],{"class":164,"line":2960},[162,157119,157120],{"class":168},"bar.add_yaxis(",[162,157122,150352],{"class":179},[162,157124,183],{"class":168},[162,157126,2496],{"class":207},[162,157128,157129],{"class":168},"(category_total.values()))\n",[162,157131,157132],{"class":164,"line":2971},[162,157133,157134],{"class":168},"bar.set_global_opts(\n",[162,157136,157137,157139,157141,157143,157145,157147,157150],{"class":164,"line":2984},[162,157138,150530],{"class":671},[162,157140,173],{"class":172},[162,157142,150535],{"class":168},[162,157144,54480],{"class":671},[162,157146,173],{"class":172},[162,157148,157149],{"class":179},"\"品类销售额\"",[162,157151,41122],{"class":168},[162,157153,157154,157156,157158,157160,157162,157164,157167],{"class":164,"line":2989},[162,157155,150549],{"class":671},[162,157157,173],{"class":172},[162,157159,150554],{"class":168},[162,157161,82875],{"class":671},[162,157163,173],{"class":172},[162,157165,157166],{"class":179},"\"品类\"",[162,157168,41122],{"class":168},[162,157170,157171,157173,157175,157177,157179,157181,157183],{"class":164,"line":3011},[162,157172,150568],{"class":671},[162,157174,173],{"class":172},[162,157176,150554],{"class":168},[162,157178,82875],{"class":671},[162,157180,173],{"class":172},[162,157182,150352],{"class":179},[162,157184,41122],{"class":168},[162,157186,157187],{"class":164,"line":3022},[162,157188,434],{"class":168},[162,157190,157191,157194,157197],{"class":164,"line":3027},[162,157192,157193],{"class":168},"bar.render(",[162,157195,157196],{"class":179},"\"category_sales.html\"",[162,157198,434],{"class":168},[14,157200,157202],{"id":157201},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,157204,157205],{},"时间线适合展示不同日期、月份、年份的数据变化。",[153,157207,157209],{"className":155,"code":157208,"language":157,"meta":158,"style":158},"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",[71,157210,157211,157225,157236,157240,157248,157272,157295,157320,157324,157328,157338,157342,157353,157362,157372,157386,157417,157422,157426],{"__ignoreMap":158},[162,157212,157213,157215,157217,157219,157221,157223],{"class":164,"line":165},[162,157214,33821],{"class":172},[162,157216,150436],{"class":168},[162,157218,33478],{"class":172},[162,157220,150441],{"class":168},[162,157222,34466],{"class":172},[162,157224,150446],{"class":168},[162,157226,157227,157229,157231,157233],{"class":164,"line":197},[162,157228,33821],{"class":172},[162,157230,150295],{"class":168},[162,157232,33478],{"class":172},[162,157234,157235],{"class":168}," Bar, Timeline\n",[162,157237,157238],{"class":164,"line":228},[162,157239,301],{"emptyLinePlaceholder":300},[162,157241,157242,157244,157246],{"class":164,"line":252},[162,157243,104721],{"class":168},[162,157245,173],{"class":172},[162,157247,1722],{"class":168},[162,157249,157250,157253,157256,157258,157260,157262,157264,157266,157268,157270],{"class":164,"line":328},[162,157251,157252],{"class":179},"    \"2024-10-01\"",[162,157254,157255],{"class":168},": {",[162,157257,156686],{"class":179},[162,157259,1730],{"class":168},[162,157261,156695],{"class":207},[162,157263,183],{"class":168},[162,157265,156716],{"class":179},[162,157267,1730],{"class":168},[162,157269,156725],{"class":207},[162,157271,2061],{"class":168},[162,157273,157274,157277,157279,157281,157283,157285,157287,157289,157291,157293],{"class":164,"line":466},[162,157275,157276],{"class":179},"    \"2024-10-02\"",[162,157278,157255],{"class":168},[162,157280,156686],{"class":179},[162,157282,1730],{"class":168},[162,157284,156754],{"class":207},[162,157286,183],{"class":168},[162,157288,156716],{"class":179},[162,157290,1730],{"class":168},[162,157292,156783],{"class":207},[162,157294,2061],{"class":168},[162,157296,157297,157300,157302,157304,157306,157309,157311,157313,157315,157318],{"class":164,"line":471},[162,157298,157299],{"class":179},"    \"2024-10-03\"",[162,157301,157255],{"class":168},[162,157303,156686],{"class":179},[162,157305,1730],{"class":168},[162,157307,157308],{"class":207},"17000",[162,157310,183],{"class":168},[162,157312,156716],{"class":179},[162,157314,1730],{"class":168},[162,157316,157317],{"class":207},"19000",[162,157319,2061],{"class":168},[162,157321,157322],{"class":164,"line":687},[162,157323,1498],{"class":168},[162,157325,157326],{"class":164,"line":692},[162,157327,301],{"emptyLinePlaceholder":300},[162,157329,157330,157333,157335],{"class":164,"line":698},[162,157331,157332],{"class":168},"timeline ",[162,157334,173],{"class":172},[162,157336,157337],{"class":168}," Timeline()\n",[162,157339,157340],{"class":164,"line":2955},[162,157341,301],{"emptyLinePlaceholder":300},[162,157343,157344,157346,157349,157351],{"class":164,"line":2960},[162,157345,808],{"class":172},[162,157347,157348],{"class":168}," date, category_data ",[162,157350,814],{"class":172},[162,157352,152204],{"class":168},[162,157354,157355,157358,157360],{"class":164,"line":2971},[162,157356,157357],{"class":168},"    bar ",[162,157359,173],{"class":172},[162,157361,157105],{"class":168},[162,157363,157364,157367,157369],{"class":164,"line":2984},[162,157365,157366],{"class":168},"    bar.add_xaxis(",[162,157368,2496],{"class":207},[162,157370,157371],{"class":168},"(category_data.keys()))\n",[162,157373,157374,157377,157379,157381,157383],{"class":164,"line":2989},[162,157375,157376],{"class":168},"    bar.add_yaxis(",[162,157378,150352],{"class":179},[162,157380,183],{"class":168},[162,157382,2496],{"class":207},[162,157384,157385],{"class":168},"(category_data.values()))\n",[162,157387,157388,157391,157394,157396,157398,157400,157402,157404,157406,157408,157410,157412,157415],{"class":164,"line":3011},[162,157389,157390],{"class":168},"    bar.set_global_opts(",[162,157392,157393],{"class":671},"title_opts",[162,157395,173],{"class":172},[162,157397,150535],{"class":168},[162,157399,54480],{"class":671},[162,157401,173],{"class":172},[162,157403,961],{"class":172},[162,157405,979],{"class":179},[162,157407,967],{"class":207},[162,157409,76991],{"class":168},[162,157411,976],{"class":207},[162,157413,157414],{"class":179},"销售额\"",[162,157416,586],{"class":168},[162,157418,157419],{"class":164,"line":3022},[162,157420,157421],{"class":168},"    timeline.add(bar, date)\n",[162,157423,157424],{"class":164,"line":3027},[162,157425,301],{"emptyLinePlaceholder":300},[162,157427,157428,157431,157434],{"class":164,"line":3046},[162,157429,157430],{"class":168},"timeline.render(",[162,157432,157433],{"class":179},"\"timeline_sales.html\"",[162,157435,434],{"class":168},[14,157437,157439],{"id":157438},"_128-绘制地图","12.8 绘制地图",[19,157441,157442],{},"地图适合展示地区数据。",[153,157444,157446],{"className":155,"code":157445,"language":157,"meta":158,"style":158},"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",[71,157447,157448,157462,157473,157477,157485,157498,157510,157523,157536,157540,157544,157554,157569,157574,157591,157610,157614],{"__ignoreMap":158},[162,157449,157450,157452,157454,157456,157458,157460],{"class":164,"line":165},[162,157451,33821],{"class":172},[162,157453,150436],{"class":168},[162,157455,33478],{"class":172},[162,157457,150441],{"class":168},[162,157459,34466],{"class":172},[162,157461,150446],{"class":168},[162,157463,157464,157466,157468,157470],{"class":164,"line":197},[162,157465,33821],{"class":172},[162,157467,150295],{"class":168},[162,157469,33478],{"class":172},[162,157471,157472],{"class":168}," Map\n",[162,157474,157475],{"class":164,"line":228},[162,157476,301],{"emptyLinePlaceholder":300},[162,157478,157479,157481,157483],{"class":164,"line":252},[162,157480,104721],{"class":168},[162,157482,173],{"class":172},[162,157484,2030],{"class":168},[162,157486,157487,157490,157492,157494,157496],{"class":164,"line":328},[162,157488,157489],{"class":168},"    (",[162,157491,1033],{"class":179},[162,157493,183],{"class":168},[162,157495,4098],{"class":207},[162,157497,41122],{"class":168},[162,157499,157500,157502,157504,157506,157508],{"class":164,"line":466},[162,157501,157489],{"class":168},[162,157503,72354],{"class":179},[162,157505,183],{"class":168},[162,157507,150369],{"class":207},[162,157509,41122],{"class":168},[162,157511,157512,157514,157517,157519,157521],{"class":164,"line":471},[162,157513,157489],{"class":168},[162,157515,157516],{"class":179},"\"广东\"",[162,157518,183],{"class":168},[162,157520,4845],{"class":207},[162,157522,41122],{"class":168},[162,157524,157525,157527,157530,157532,157534],{"class":164,"line":687},[162,157526,157489],{"class":168},[162,157528,157529],{"class":179},"\"浙江\"",[162,157531,183],{"class":168},[162,157533,150374],{"class":207},[162,157535,41122],{"class":168},[162,157537,157538],{"class":164,"line":692},[162,157539,194],{"class":168},[162,157541,157542],{"class":164,"line":698},[162,157543,301],{"emptyLinePlaceholder":300},[162,157545,157546,157549,157551],{"class":164,"line":2955},[162,157547,157548],{"class":168},"map_chart ",[162,157550,173],{"class":172},[162,157552,157553],{"class":168}," Map()\n",[162,157555,157556,157559,157561,157564,157567],{"class":164,"line":2960},[162,157557,157558],{"class":168},"map_chart.add(",[162,157560,150352],{"class":179},[162,157562,157563],{"class":168},", data, ",[162,157565,157566],{"class":179},"\"china\"",[162,157568,434],{"class":168},[162,157570,157571],{"class":164,"line":2971},[162,157572,157573],{"class":168},"map_chart.set_global_opts(\n",[162,157575,157576,157578,157580,157582,157584,157586,157589],{"class":164,"line":2984},[162,157577,150530],{"class":671},[162,157579,173],{"class":172},[162,157581,150535],{"class":168},[162,157583,54480],{"class":671},[162,157585,173],{"class":172},[162,157587,157588],{"class":179},"\"地区销售额\"",[162,157590,41122],{"class":168},[162,157592,157593,157596,157598,157601,157604,157606,157608],{"class":164,"line":2989},[162,157594,157595],{"class":671},"    visualmap_opts",[162,157597,173],{"class":172},[162,157599,157600],{"class":168},"opts.VisualMapOpts(",[162,157602,157603],{"class":671},"max_",[162,157605,173],{"class":172},[162,157607,4845],{"class":207},[162,157609,41122],{"class":168},[162,157611,157612],{"class":164,"line":3011},[162,157613,434],{"class":168},[162,157615,157616,157619,157622],{"class":164,"line":3022},[162,157617,157618],{"class":168},"map_chart.render(",[162,157620,157621],{"class":179},"\"map_sales.html\"",[162,157623,434],{"class":168},[19,157625,157626],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,157628,157630],{"id":157629},"_129-项目拆分建议","12.9 项目拆分建议",[19,157632,157633],{},"当代码超过一个文件时，可以这样组织：",[153,157635,157638],{"className":157636,"code":157637,"language":8295,"meta":158},[8293],"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",[71,157639,157637],{"__ignoreMap":158},[19,157641,157642],{},"职责：",[1452,157644,157645,157651,157657,157663],{},[1455,157646,157647,157650],{},[71,157648,157649],{},"main.py","：程序入口。",[1455,157652,157653,157656],{},[71,157654,157655],{},"file_utils.py","：读写 JSON。",[1455,157658,157659,157662],{},[71,157660,157661],{},"sales_service.py","：统计销售数据。",[1455,157664,157665,157668],{},[71,157666,157667],{},"chart_builder.py","：生成图表。",[14,157670,157672],{"id":157671},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,157674,157675],{},"语法基础：",[1452,157677,157678,157681,157684,157687],{},[1455,157679,157680],{},"会写变量、注释、输入输出。",[1455,157682,157683],{},"会使用 int、float、str、bool。",[1455,157685,157686],{},"会做类型转换。",[1455,157688,157689],{},"会使用 f-string 格式化输出。",[19,157691,157692],{},"流程控制：",[1452,157694,157695,157701,157707,157715],{},[1455,157696,157697,157698,3183],{},"会写 ",[71,157699,157700],{},"if elif else",[1455,157702,157697,157703,104082,157705,3183],{},[71,157704,111724],{},[71,157706,808],{},[1455,157708,157709,157710,104082,157712,3183],{},"理解 ",[71,157711,5171],{},[71,157713,157714],{},"continue",[1455,157716,157717],{},"能写嵌套循环。",[19,157719,157720],{},"函数：",[1452,157722,157723,157726,157729,157732],{},[1455,157724,157725],{},"会定义和调用函数。",[1455,157727,157728],{},"理解参数和返回值。",[1455,157730,157731],{},"知道局部变量和全局变量。",[1455,157733,157734],{},"会使用默认参数、关键字参数、不定长参数。",[19,157736,157737],{},"容器：",[1452,157739,157740,157743,157746,157749,157752],{},[1455,157741,157742],{},"会使用列表增删改查。",[1455,157744,157745],{},"会遍历列表、字典。",[1455,157747,157748],{},"会使用切片。",[1455,157750,157751],{},"会用集合去重。",[1455,157753,157754],{},"会处理列表嵌套字典。",[19,157756,157757],{},"文件和模块：",[1452,157759,157760,157763,157766,157769,157772],{},[1455,157761,157762],{},"会读写文本文件。",[1455,157764,157765],{},"会读写 JSON。",[1455,157767,157768],{},"会捕获常见异常。",[1455,157770,157771],{},"会导入模块和第三方包。",[1455,157773,157774],{},"会创建简单包结构。",[19,157776,157777],{},"项目能力：",[1452,157779,157780,157783,157786,157789,157792],{},[1455,157781,157782],{},"能把代码拆成函数。",[1455,157784,157785],{},"能把数据保存到文件。",[1455,157787,157788],{},"能处理用户输入错误。",[1455,157790,157791],{},"能写一个完整菜单程序。",[1455,157793,157794],{},"能用 pyecharts 生成图表。",[14,157796,157798],{"id":157797},"_1211-推荐练习顺序","12.11 推荐练习顺序",[1452,157800,157801,157804,157807,157810,157813,157816,157819,157822],{},[1455,157802,157803],{},"猜数字游戏。",[1455,157805,157806],{},"ATM 菜单程序。",[1455,157808,157809],{},"学生成绩统计。",[1455,157811,157812],{},"学生管理系统函数版。",[1455,157814,157815],{},"学生管理系统文件持久化版。",[1455,157817,157818],{},"学生管理系统面向对象版。",[1455,157820,157821],{},"销售数据统计。",[1455,157823,157824],{},"销售数据可视化。",[14,157826,157828],{"id":157827},"_1212-常见学习误区","12.12 常见学习误区",[1452,157830,157831,157834,157837,157840,157843,157846,157849],{},[1455,157832,157833],{},"只看视频不敲代码。",[1455,157835,157836],{},"一报错就复制错误去搜，不先读报错位置。",[1455,157838,157839],{},"变量名随便写，后续自己看不懂。",[1455,157841,157842],{},"所有代码都写在一个文件一个函数里。",[1455,157844,157845],{},"不保存练习代码，复习时没有材料。",[1455,157847,157848],{},"还没掌握列表字典就急着学框架。",[1455,157850,157851],{},"不会读官方文档，只依赖教程。",[14,157853,157855],{"id":157854},"_1213-如何读报错","12.13 如何读报错",[19,157857,157858],{},"报错通常从下往上看最后几行。",[19,157860,18228],{},[153,157862,157865],{"className":157863,"code":157864,"language":8295,"meta":158},[8293],"ValueError: invalid literal for int() with base 10: 'abc'\n",[71,157866,157864],{"__ignoreMap":158},[19,157868,27691],{},[1452,157870,157871,157877,157887],{},[1455,157872,157873,157874,3183],{},"异常类型是 ",[71,157875,157876],{},"ValueError",[1455,157878,110406,157879,157882,157883,157886],{},[71,157880,157881],{},"int()"," 无法把 ",[71,157884,157885],{},"'abc'"," 转成整数。",[1455,157888,157889],{},"应该检查输入内容或增加异常处理。",[19,157891,157892],{},"再看文件名和行号：",[153,157894,157897],{"className":157895,"code":157896,"language":8295,"meta":158},[8293],"File \"main.py\", line 10, in \u003Cmodule>\n",[71,157898,157896],{"__ignoreMap":158},[19,157900,157901,157902,157904],{},"表示错误发生在 ",[71,157903,157649],{}," 第 10 行。",[14,157906,157908],{"id":157907},"_1214-后续学习方向","12.14 后续学习方向",[19,157910,157911],{},"Python 基础完成后，可以按兴趣选择方向：",[1452,157913,157914,157926,157935,157947,157958,157967,157977],{},[1455,157915,157916,157917,3513,157920,3513,157923,3183],{},"自动化办公：",[71,157918,157919],{},"openpyxl",[71,157921,157922],{},"python-docx",[71,157924,157925],{},"pdfplumber",[1455,157927,157928,157929,3513,157931,3513,157933,3183],{},"数据分析：",[71,157930,103690],{},[71,157932,149243],{},[71,157934,149251],{},[1455,157936,157937,157938,3513,157941,3513,157944,3183],{},"Web 后端：",[71,157939,157940],{},"Flask",[71,157942,157943],{},"FastAPI",[71,157945,157946],{},"Django",[1455,157948,157949,157950,3513,157952,3513,157955,3183],{},"爬虫：",[71,157951,149228],{},[71,157953,157954],{},"BeautifulSoup",[71,157956,157957],{},"Scrapy",[1455,157959,157960,157961,3513,157963,157966],{},"测试开发：",[71,157962,149275],{},[71,157964,157965],{},"selenium","、接口测试。",[1455,157968,157969,157970,3513,157972,3513,157974,3183],{},"人工智能：",[71,157971,103690],{},[71,157973,149243],{},[71,157975,157976],{},"pytorch",[1455,157978,157979,157980,3513,157982,3513,157985,3183],{},"运维脚本：",[71,157981,148844],{},[71,157983,157984],{},"subprocess",[71,157986,157987],{},"paramiko",[19,157989,157990],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,157992,157994],{"id":157993},"_1215-结课练习","12.15 结课练习",[1452,157996,157997,158000,158003,158006,158009,158012,158015,158018],{},[1455,157998,157999],{},"完成函数版学生管理系统。",[1455,158001,158002],{},"给学生管理系统增加 JSON 持久化。",[1455,158004,158005],{},"给学生管理系统增加异常处理。",[1455,158007,158008],{},"把学生管理系统改成面向对象版。",[1455,158010,158011],{},"使用 pyecharts 绘制学生成绩柱状图。",[1455,158013,158014],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[1455,158016,158017],{},"按品类统计销售额并绘制柱状图。",[1455,158019,158020],{},"写一份自己的 Python 学习路线图。",[3219,158022,158023],{},"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":158,"searchDepth":197,"depth":197,"links":158025},[158026,158027,158030,158031,158032,158038,158039,158040,158041,158042,158043,158044,158045,158046,158047],{"id":154750,"depth":197,"text":154751},{"id":154800,"depth":197,"text":154801,"children":158028},[158029],{"id":154804,"depth":228,"text":154805},{"id":154843,"depth":197,"text":154844},{"id":156310,"depth":197,"text":156311},{"id":156648,"depth":197,"text":156649,"children":158033},[158034,158035,158036,158037],{"id":156652,"depth":228,"text":156653},{"id":156792,"depth":228,"text":156793},{"id":156882,"depth":228,"text":156883},{"id":156968,"depth":228,"text":156969},{"id":157009,"depth":197,"text":157010},{"id":157201,"depth":197,"text":157202},{"id":157438,"depth":197,"text":157439},{"id":157629,"depth":197,"text":157630},{"id":157671,"depth":197,"text":157672},{"id":157797,"depth":197,"text":157798},{"id":157827,"depth":197,"text":157828},{"id":157854,"depth":197,"text":157855},{"id":157907,"depth":197,"text":157908},{"id":157993,"depth":197,"text":157994},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":154742,"description":3241},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":158054,"title":158055,"body":158056,"description":3241,"extension":3242,"meta":160515,"navigation":300,"path":160516,"seo":160517,"stem":160518,"__hash__":160519},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":158057,"toc":160490},[158058,158061,158065,158068,158071,158091,158094,158117,158120,158123,158145,158148,158170,158174,158177,158217,158220,158336,158340,158343,158383,158386,158409,158412,158416,158419,158433,158466,158469,158504,158507,158530,158533,158566,158569,158571,158577,158652,158655,158661,158678,158718,158722,158725,158771,158773,158811,158814,158849,158852,158887,158890,158921,158924,158943,158947,158951,159064,159066,159141,159145,159191,159194,159220,159229,159233,159236,159299,159307,159335,159339,159379,159444,159448,159451,159489,159492,159537,159540,159601,159605,159632,159635,159663,159666,159670,159674,159739,159742,159780,159783,159815,159819,159918,159922,159925,159998,160001,160049,160053,160059,160099,160102,160149,160152,160200,160204,160206,160220,160222,160402,160406,160433,160453,160460,160464,160481,160487],[10,158059,158055],{"id":158060},"_2-基础语法变量与字符串",[14,158062,158064],{"id":158063},"_21-注释","2.1 注释",[19,158066,158067],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,158069,158070],{},"单行注释：",[153,158072,158074],{"className":155,"code":158073,"language":157,"meta":158,"style":158},"# 这是单行注释\nprint(\"hello\")\n",[71,158075,158076,158081],{"__ignoreMap":158},[162,158077,158078],{"class":164,"line":165},[162,158079,158080],{"class":361},"# 这是单行注释\n",[162,158082,158083,158085,158087,158089],{"class":164,"line":197},[162,158084,306],{"class":207},[162,158086,604],{"class":168},[162,158088,8951],{"class":179},[162,158090,434],{"class":168},[19,158092,158093],{},"多行说明常用三引号：",[153,158095,158097],{"className":155,"code":158096,"language":157,"meta":158,"style":158},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[71,158098,158099,158103,158108,158113],{"__ignoreMap":158},[162,158100,158101],{"class":164,"line":165},[162,158102,98763],{"class":179},[162,158104,158105],{"class":164,"line":197},[162,158106,158107],{"class":179},"这是多行说明。\n",[162,158109,158110],{"class":164,"line":228},[162,158111,158112],{"class":179},"常用于文件顶部说明、函数说明等。\n",[162,158114,158115],{"class":164,"line":252},[162,158116,98763],{"class":179},[19,158118,158119],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,158121,158122],{},"不好：",[153,158124,158126],{"className":155,"code":158125,"language":157,"meta":158,"style":158},"# age 加 1\nage = age + 1\n",[71,158127,158128,158133],{"__ignoreMap":158},[162,158129,158130],{"class":164,"line":165},[162,158131,158132],{"class":361},"# age 加 1\n",[162,158134,158135,158137,158139,158141,158143],{"class":164,"line":197},[162,158136,149604],{"class":168},[162,158138,173],{"class":172},[162,158140,18798],{"class":168},[162,158142,3771],{"class":172},[162,158144,58768],{"class":207},[19,158146,158147],{},"较好：",[153,158149,158151],{"className":155,"code":158150,"language":157,"meta":158,"style":158},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[71,158152,158153,158158],{"__ignoreMap":158},[162,158154,158155],{"class":164,"line":165},[162,158156,158157],{"class":361},"# 用户过完生日后，年龄增加一岁\n",[162,158159,158160,158162,158164,158166,158168],{"class":164,"line":197},[162,158161,149604],{"class":168},[162,158163,173],{"class":172},[162,158165,18798],{"class":168},[162,158167,3771],{"class":172},[162,158169,58768],{"class":207},[14,158171,158173],{"id":158172},"_22-字面量","2.2 字面量",[19,158175,158176],{},"字面量就是代码中直接写出来的数据。",[153,158178,158180],{"className":155,"code":158179,"language":157,"meta":158,"style":158},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[71,158181,158182,158189,158196,158203,158210],{"__ignoreMap":158},[162,158183,158184,158186],{"class":164,"line":165},[162,158185,3608],{"class":207},[162,158187,158188],{"class":361},"          # 整数\n",[162,158190,158191,158193],{"class":164,"line":197},[162,158192,3362],{"class":207},[162,158194,158195],{"class":361},"         # 小数\n",[162,158197,158198,158200],{"class":164,"line":228},[162,158199,8951],{"class":179},[162,158201,158202],{"class":361},"      # 字符串\n",[162,158204,158205,158207],{"class":164,"line":252},[162,158206,247],{"class":207},[162,158208,158209],{"class":361},"         # 布尔值\n",[162,158211,158212,158214],{"class":164,"line":328},[162,158213,98751],{"class":207},[162,158215,158216],{"class":361},"         # 空值\n",[19,158218,158219],{},"常见字面量类型：",[26,158221,158222,158232],{},[29,158223,158224],{},[32,158225,158226,158228,158230],{},[35,158227,26828],{},[35,158229,49],{},[35,158231,28960],{},[51,158233,158234,158245,158256,158267,158279,158291,158302,158313,158325],{},[32,158235,158236,158238,158242],{},[56,158237,3319],{},[56,158239,158240],{},[71,158241,3608],{},[56,158243,158244],{},"整数",[32,158246,158247,158249,158253],{},[56,158248,3354],{},[56,158250,158251],{},[71,158252,3362],{},[56,158254,158255],{},"浮点数",[32,158257,158258,158260,158264],{},[56,158259,4442],{},[56,158261,158262],{},[71,158263,8951],{},[56,158265,158266],{},"字符串",[32,158268,158269,158271,158277],{},[56,158270,4494],{},[56,158272,158273,3513,158275],{},[71,158274,247],{},[71,158276,37062],{},[56,158278,69082],{},[32,158280,158281,158284,158288],{},[56,158282,158283],{},"NoneType",[56,158285,158286],{},[71,158287,98751],{},[56,158289,158290],{},"空值",[32,158292,158293,158295,158299],{},[56,158294,2496],{},[56,158296,158297],{},[71,158298,73],{},[56,158300,158301],{},"列表",[32,158303,158304,158306,158310],{},[56,158305,2507],{},[56,158307,158308],{},[71,158309,90],{},[56,158311,158312],{},"元组",[32,158314,158315,158317,158322],{},[56,158316,117606],{},[56,158318,158319],{},[71,158320,158321],{},"{\"name\": \"张三\"}",[56,158323,158324],{},"字典",[32,158326,158327,158329,158333],{},[56,158328,2526],{},[56,158330,158331],{},[71,158332,124],{},[56,158334,158335],{},"集合",[14,158337,158339],{"id":158338},"_23-变量","2.3 变量",[19,158341,158342],{},"变量是保存数据的名字。",[153,158344,158346],{"className":155,"code":158345,"language":157,"meta":158,"style":158},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[71,158347,158348,158356,158364,158374],{"__ignoreMap":158},[162,158349,158350,158352,158354],{"class":164,"line":165},[162,158351,149594],{"class":168},[162,158353,173],{"class":172},[162,158355,152409],{"class":179},[162,158357,158358,158360,158362],{"class":164,"line":197},[162,158359,149604],{"class":168},[162,158361,173],{"class":172},[162,158363,149609],{"class":207},[162,158365,158366,158369,158371],{"class":164,"line":228},[162,158367,158368],{"class":168},"height ",[162,158370,173],{"class":172},[162,158372,158373],{"class":207}," 1.75\n",[162,158375,158376,158379,158381],{"class":164,"line":252},[162,158377,158378],{"class":168},"is_student ",[162,158380,173],{"class":172},[162,158382,156642],{"class":207},[19,158384,158385],{},"Python 的变量不需要提前声明类型：",[153,158387,158389],{"className":155,"code":158388,"language":157,"meta":158,"style":158},"score = 100\nscore = \"满分\"\n",[71,158390,158391,158400],{"__ignoreMap":158},[162,158392,158393,158395,158397],{"class":164,"line":165},[162,158394,1897],{"class":168},[162,158396,173],{"class":172},[162,158398,158399],{"class":207}," 100\n",[162,158401,158402,158404,158406],{"class":164,"line":197},[162,158403,1897],{"class":168},[162,158405,173],{"class":172},[162,158407,158408],{"class":179}," \"满分\"\n",[19,158410,158411],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,158413,158415],{"id":158414},"_24-变量命名规则","2.4 变量命名规则",[19,158417,158418],{},"硬性规则：",[1452,158420,158421,158424,158427,158430],{},[1455,158422,158423],{},"只能由字母、数字、下划线组成。",[1455,158425,158426],{},"不能以数字开头。",[1455,158428,158429],{},"不能使用 Python 关键字。",[1455,158431,158432],{},"区分大小写。",[153,158434,158436],{"className":155,"code":158435,"language":157,"meta":158,"style":158},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[71,158437,158438,158447,158456],{"__ignoreMap":158},[162,158439,158440,158443,158445],{"class":164,"line":165},[162,158441,158442],{"class":168},"user_name ",[162,158444,173],{"class":172},[162,158446,149599],{"class":179},[162,158448,158449,158452,158454],{"class":164,"line":197},[162,158450,158451],{"class":168},"age2 ",[162,158453,173],{"class":172},[162,158455,149609],{"class":207},[162,158457,158458,158461,158463],{"class":164,"line":228},[162,158459,158460],{"class":168},"_token ",[162,158462,173],{"class":172},[162,158464,158465],{"class":179}," \"abc\"\n",[19,158467,158468],{},"错误写法：",[153,158470,158472],{"className":155,"code":158471,"language":157,"meta":158,"style":158},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[71,158473,158474,158483,158495],{"__ignoreMap":158},[162,158475,158476,158479,158481],{"class":164,"line":165},[162,158477,158478],{"class":80468},"2age",[162,158480,16659],{"class":172},[162,158482,149609],{"class":207},[162,158484,158485,158487,158489,158491,158493],{"class":164,"line":197},[162,158486,134642],{"class":168},[162,158488,353],{"class":172},[162,158490,149594],{"class":168},[162,158492,173],{"class":172},[162,158494,149599],{"class":179},[162,158496,158497,158499,158501],{"class":164,"line":228},[162,158498,17788],{"class":172},[162,158500,16659],{"class":172},[162,158502,158503],{"class":179}," \"一班\"\n",[19,158505,158506],{},"查看关键字：",[153,158508,158510],{"className":155,"code":158509,"language":157,"meta":158,"style":158},"import keyword\n\nprint(keyword.kwlist)\n",[71,158511,158512,158519,158523],{"__ignoreMap":158},[162,158513,158514,158516],{"class":164,"line":165},[162,158515,33478],{"class":172},[162,158517,158518],{"class":168}," keyword\n",[162,158520,158521],{"class":164,"line":197},[162,158522,301],{"emptyLinePlaceholder":300},[162,158524,158525,158527],{"class":164,"line":228},[162,158526,306],{"class":207},[162,158528,158529],{"class":168},"(keyword.kwlist)\n",[19,158531,158532],{},"推荐命名风格：",[153,158534,158536],{"className":155,"code":158535,"language":157,"meta":158,"style":158},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[71,158537,158538,158547,158557],{"__ignoreMap":158},[162,158539,158540,158543,158545],{"class":164,"line":165},[162,158541,158542],{"class":168},"student_name ",[162,158544,173],{"class":172},[162,158546,152409],{"class":179},[162,158548,158549,158552,158554],{"class":164,"line":197},[162,158550,158551],{"class":168},"total_price ",[162,158553,173],{"class":172},[162,158555,158556],{"class":207}," 99.8\n",[162,158558,158559,158562,158564],{"class":164,"line":228},[162,158560,158561],{"class":168},"is_finished ",[162,158563,173],{"class":172},[162,158565,128865],{"class":207},[19,158567,158568],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,158570,53805],{"id":53804},[19,158572,3186,158573,158576],{},[71,158574,158575],{},"type()"," 查看数据类型：",[153,158578,158580],{"className":155,"code":158579,"language":157,"meta":158,"style":158},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[71,158581,158582,158596,158610,158624,158638],{"__ignoreMap":158},[162,158583,158584,158586,158588,158590,158592,158594],{"class":164,"line":165},[162,158585,306],{"class":207},[162,158587,604],{"class":168},[162,158589,1083],{"class":207},[162,158591,604],{"class":168},[162,158593,3608],{"class":207},[162,158595,586],{"class":168},[162,158597,158598,158600,158602,158604,158606,158608],{"class":164,"line":197},[162,158599,306],{"class":207},[162,158601,604],{"class":168},[162,158603,1083],{"class":207},[162,158605,604],{"class":168},[162,158607,3362],{"class":207},[162,158609,586],{"class":168},[162,158611,158612,158614,158616,158618,158620,158622],{"class":164,"line":228},[162,158613,306],{"class":207},[162,158615,604],{"class":168},[162,158617,1083],{"class":207},[162,158619,604],{"class":168},[162,158621,8951],{"class":179},[162,158623,586],{"class":168},[162,158625,158626,158628,158630,158632,158634,158636],{"class":164,"line":252},[162,158627,306],{"class":207},[162,158629,604],{"class":168},[162,158631,1083],{"class":207},[162,158633,604],{"class":168},[162,158635,247],{"class":207},[162,158637,586],{"class":168},[162,158639,158640,158642,158644,158646,158648,158650],{"class":164,"line":328},[162,158641,306],{"class":207},[162,158643,604],{"class":168},[162,158645,1083],{"class":207},[162,158647,604],{"class":168},[162,158649,98751],{"class":207},[162,158651,586],{"class":168},[19,158653,158654],{},"输出类似：",[153,158656,158659],{"className":158657,"code":158658,"language":8295,"meta":158},[8293],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[71,158660,158658],{"__ignoreMap":158},[19,158662,1529,158663,110344,158665,158667,158668,158670,158671,24591,158673,158670,158675,158677],{},[71,158664,4494],{},[71,158666,3319],{}," 的子类，",[71,158669,247],{}," 可以当作 ",[71,158672,208],{},[71,158674,37062],{},[71,158676,312],{},"，但业务代码中不要滥用。",[153,158679,158681],{"className":155,"code":158680,"language":157,"meta":158,"style":158},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[71,158682,158683,158701],{"__ignoreMap":158},[162,158684,158685,158687,158689,158691,158693,158695,158698],{"class":164,"line":165},[162,158686,306],{"class":207},[162,158688,604],{"class":168},[162,158690,247],{"class":207},[162,158692,1239],{"class":172},[162,158694,28210],{"class":207},[162,158696,158697],{"class":168},")   ",[162,158699,158700],{"class":361},"# 2\n",[162,158702,158703,158705,158707,158709,158711,158713,158715],{"class":164,"line":197},[162,158704,306],{"class":207},[162,158706,604],{"class":168},[162,158708,37062],{"class":207},[162,158710,1239],{"class":172},[162,158712,28210],{"class":207},[162,158714,48882],{"class":168},[162,158716,158717],{"class":361},"# 1\n",[14,158719,158721],{"id":158720},"_26-类型转换","2.6 类型转换",[19,158723,158724],{},"常用转换函数：",[153,158726,158728],{"className":155,"code":158727,"language":157,"meta":158,"style":158},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[71,158729,158730,158740,158751,158761],{"__ignoreMap":158},[162,158731,158732,158734,158736,158738],{"class":164,"line":165},[162,158733,3319],{"class":207},[162,158735,604],{"class":168},[162,158737,57386],{"class":179},[162,158739,434],{"class":168},[162,158741,158742,158744,158746,158749],{"class":164,"line":197},[162,158743,3354],{"class":207},[162,158745,604],{"class":168},[162,158747,158748],{"class":179},"\"3.14\"",[162,158750,434],{"class":168},[162,158752,158753,158755,158757,158759],{"class":164,"line":228},[162,158754,4442],{"class":207},[162,158756,604],{"class":168},[162,158758,3608],{"class":207},[162,158760,434],{"class":168},[162,158762,158763,158765,158767,158769],{"class":164,"line":252},[162,158764,4494],{"class":207},[162,158766,604],{"class":168},[162,158768,208],{"class":207},[162,158770,434],{"class":168},[19,158772,18228],{},[153,158774,158776],{"className":155,"code":158775,"language":157,"meta":158,"style":158},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[71,158777,158778,158787,158798],{"__ignoreMap":158},[162,158779,158780,158782,158784],{"class":164,"line":165},[162,158781,149604],{"class":168},[162,158783,173],{"class":172},[162,158785,158786],{"class":179}," \"18\"\n",[162,158788,158789,158791,158793,158795],{"class":164,"line":197},[162,158790,149604],{"class":168},[162,158792,173],{"class":172},[162,158794,5500],{"class":207},[162,158796,158797],{"class":168},"(age)\n",[162,158799,158800,158802,158805,158807,158809],{"class":164,"line":228},[162,158801,306],{"class":207},[162,158803,158804],{"class":168},"(age ",[162,158806,3771],{"class":172},[162,158808,28210],{"class":207},[162,158810,434],{"class":168},[19,158812,158813],{},"输入得到的内容永远是字符串：",[153,158815,158817],{"className":155,"code":158816,"language":157,"meta":158,"style":158},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[71,158818,158819,158835],{"__ignoreMap":158},[162,158820,158821,158824,158826,158828,158830,158833],{"class":164,"line":165},[162,158822,158823],{"class":168},"num ",[162,158825,173],{"class":172},[162,158827,2257],{"class":207},[162,158829,604],{"class":168},[162,158831,158832],{"class":179},"\"请输入数字:\"",[162,158834,434],{"class":168},[162,158836,158837,158839,158841,158843,158846],{"class":164,"line":197},[162,158838,306],{"class":207},[162,158840,604],{"class":168},[162,158842,1083],{"class":207},[162,158844,158845],{"class":168},"(num))  ",[162,158847,158848],{"class":361},"# str\n",[19,158850,158851],{},"如果要做数学运算，必须转换：",[153,158853,158855],{"className":155,"code":158854,"language":157,"meta":158,"style":158},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[71,158856,158857,158875],{"__ignoreMap":158},[162,158858,158859,158861,158863,158865,158867,158869,158871,158873],{"class":164,"line":165},[162,158860,158823],{"class":168},[162,158862,173],{"class":172},[162,158864,5500],{"class":207},[162,158866,604],{"class":168},[162,158868,56891],{"class":207},[162,158870,604],{"class":168},[162,158872,158832],{"class":179},[162,158874,586],{"class":168},[162,158876,158877,158879,158881,158883,158885],{"class":164,"line":197},[162,158878,306],{"class":207},[162,158880,48693],{"class":168},[162,158882,3771],{"class":172},[162,158884,5156],{"class":207},[162,158886,434],{"class":168},[19,158888,158889],{},"常见错误：",[153,158891,158893],{"className":155,"code":158892,"language":157,"meta":158,"style":158},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[71,158894,158895,158908],{"__ignoreMap":158},[162,158896,158897,158899,158901,158903,158905],{"class":164,"line":165},[162,158898,3319],{"class":207},[162,158900,604],{"class":168},[162,158902,158748],{"class":179},[162,158904,158697],{"class":168},[162,158906,158907],{"class":361},"# 错误\n",[162,158909,158910,158912,158914,158916,158919],{"class":164,"line":197},[162,158911,3319],{"class":207},[162,158913,604],{"class":168},[162,158915,106],{"class":179},[162,158917,158918],{"class":168},")    ",[162,158920,158907],{"class":361},[19,158922,158923],{},"正确写法：",[153,158925,158927],{"className":155,"code":158926,"language":157,"meta":158,"style":158},"num = float(\"3.14\")\n",[71,158928,158929],{"__ignoreMap":158},[162,158930,158931,158933,158935,158937,158939,158941],{"class":164,"line":165},[162,158932,158823],{"class":168},[162,158934,173],{"class":172},[162,158936,112858],{"class":207},[162,158938,604],{"class":168},[162,158940,158748],{"class":179},[162,158942,434],{"class":168},[14,158944,158946],{"id":158945},"_27-运算符","2.7 运算符",[3284,158948,158950],{"id":158949},"_271-算术运算符","2.7.1 算术运算符",[26,158952,158953,158964],{},[29,158954,158955],{},[32,158956,158957,158960,158962],{},[35,158958,158959],{},"运算符",[35,158961,28960],{},[35,158963,49],{},[51,158965,158966,158980,158994,159008,159022,159036,159050],{},[32,158967,158968,158972,158975],{},[56,158969,158970],{},[71,158971,3771],{},[56,158973,158974],{},"加法",[56,158976,158977],{},[71,158978,158979],{},"1 + 2",[32,158981,158982,158986,158989],{},[56,158983,158984],{},[71,158985,353],{},[56,158987,158988],{},"减法",[56,158990,158991],{},[71,158992,158993],{},"5 - 3",[32,158995,158996,159000,159003],{},[56,158997,158998],{},[71,158999,3745],{},[56,159001,159002],{},"乘法",[56,159004,159005],{},[71,159006,159007],{},"2 * 3",[32,159009,159010,159014,159017],{},[56,159011,159012],{},[71,159013,946],{},[56,159015,159016],{},"除法，结果是浮点数",[56,159018,159019],{},[71,159020,159021],{},"5 \u002F 2",[32,159023,159024,159028,159031],{},[56,159025,159026],{},[71,159027,36404],{},[56,159029,159030],{},"整除",[56,159032,159033],{},[71,159034,159035],{},"5 \u002F\u002F 2",[32,159037,159038,159042,159045],{},[56,159039,159040],{},[71,159041,2708],{},[56,159043,159044],{},"取余",[56,159046,159047],{},[71,159048,159049],{},"5 % 2",[32,159051,159052,159056,159059],{},[56,159053,159054],{},[71,159055,2747],{},[56,159057,159058],{},"幂运算",[56,159060,159061],{},[71,159062,159063],{},"2 ** 3",[19,159065,18228],{},[153,159067,159069],{"className":155,"code":159068,"language":157,"meta":158,"style":158},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[71,159070,159071,159089,159106,159123],{"__ignoreMap":158},[162,159072,159073,159075,159077,159079,159082,159084,159086],{"class":164,"line":165},[162,159074,306],{"class":207},[162,159076,604],{"class":168},[162,159078,637],{"class":207},[162,159080,159081],{"class":172}," \u002F",[162,159083,2711],{"class":207},[162,159085,158697],{"class":168},[162,159087,159088],{"class":361},"# 2.5\n",[162,159090,159091,159093,159095,159097,159100,159102,159104],{"class":164,"line":197},[162,159092,306],{"class":207},[162,159094,604],{"class":168},[162,159096,637],{"class":207},[162,159098,159099],{"class":172}," \u002F\u002F",[162,159101,2711],{"class":207},[162,159103,48882],{"class":168},[162,159105,158700],{"class":361},[162,159107,159108,159110,159112,159114,159117,159119,159121],{"class":164,"line":228},[162,159109,306],{"class":207},[162,159111,604],{"class":168},[162,159113,637],{"class":207},[162,159115,159116],{"class":172}," %",[162,159118,2711],{"class":207},[162,159120,158697],{"class":168},[162,159122,158717],{"class":361},[162,159124,159125,159127,159129,159131,159134,159136,159138],{"class":164,"line":252},[162,159126,306],{"class":207},[162,159128,604],{"class":168},[162,159130,213],{"class":207},[162,159132,159133],{"class":172}," **",[162,159135,81135],{"class":207},[162,159137,48882],{"class":168},[162,159139,159140],{"class":361},"# 8\n",[3284,159142,159144],{"id":159143},"_272-赋值运算符","2.7.2 赋值运算符",[153,159146,159148],{"className":155,"code":159147,"language":157,"meta":158,"style":158},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[71,159149,159150,159158,159166,159174,159182],{"__ignoreMap":158},[162,159151,159152,159154,159156],{"class":164,"line":165},[162,159153,158823],{"class":168},[162,159155,173],{"class":172},[162,159157,61497],{"class":207},[162,159159,159160,159162,159164],{"class":164,"line":197},[162,159161,158823],{"class":168},[162,159163,926],{"class":172},[162,159165,57497],{"class":207},[162,159167,159168,159170,159172],{"class":164,"line":228},[162,159169,158823],{"class":168},[162,159171,153305],{"class":172},[162,159173,50796],{"class":207},[162,159175,159176,159178,159180],{"class":164,"line":252},[162,159177,158823],{"class":168},[162,159179,140206],{"class":172},[162,159181,123094],{"class":207},[162,159183,159184,159186,159189],{"class":164,"line":328},[162,159185,158823],{"class":168},[162,159187,159188],{"class":172},"\u002F=",[162,159190,50796],{"class":207},[19,159192,159193],{},"等价关系：",[153,159195,159197],{"className":155,"code":159196,"language":157,"meta":158,"style":158},"num += 1\nnum = num + 1\n",[71,159198,159199,159207],{"__ignoreMap":158},[162,159200,159201,159203,159205],{"class":164,"line":165},[162,159202,158823],{"class":168},[162,159204,926],{"class":172},[162,159206,58768],{"class":207},[162,159208,159209,159211,159213,159216,159218],{"class":164,"line":197},[162,159210,158823],{"class":168},[162,159212,173],{"class":172},[162,159214,159215],{"class":168}," num ",[162,159217,3771],{"class":172},[162,159219,58768],{"class":207},[19,159221,159222,159223,104082,159226,3183],{},"Python 没有 ",[71,159224,159225],{},"num++",[71,159227,159228],{},"num--",[3284,159230,159232],{"id":159231},"_273-比较运算符","2.7.3 比较运算符",[19,159234,159235],{},"比较运算结果是布尔值。",[153,159237,159239],{"className":155,"code":159238,"language":157,"meta":158,"style":158},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[71,159240,159241,159255,159270,159284],{"__ignoreMap":158},[162,159242,159243,159245,159247,159249,159251,159253],{"class":164,"line":165},[162,159244,306],{"class":207},[162,159246,604],{"class":168},[162,159248,1006],{"class":207},[162,159250,29312],{"class":172},[162,159252,5266],{"class":207},[162,159254,434],{"class":168},[162,159256,159257,159259,159261,159263,159266,159268],{"class":164,"line":197},[162,159258,306],{"class":207},[162,159260,604],{"class":168},[162,159262,1006],{"class":207},[162,159264,159265],{"class":172}," >=",[162,159267,5156],{"class":207},[162,159269,434],{"class":168},[162,159271,159272,159274,159276,159278,159280,159282],{"class":164,"line":228},[162,159273,306],{"class":207},[162,159275,604],{"class":168},[162,159277,1006],{"class":207},[162,159279,2714],{"class":172},[162,159281,5201],{"class":207},[162,159283,434],{"class":168},[162,159285,159286,159288,159290,159292,159295,159297],{"class":164,"line":252},[162,159287,306],{"class":207},[162,159289,604],{"class":168},[162,159291,1006],{"class":207},[162,159293,159294],{"class":172}," !=",[162,159296,5201],{"class":207},[162,159298,434],{"class":168},[19,159300,159301,159302,159304,159305,3183],{},"注意：判断相等用 ",[71,159303,2292],{},"，赋值用 ",[71,159306,173],{},[153,159308,159310],{"className":155,"code":159309,"language":157,"meta":158,"style":158},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[71,159311,159312,159324],{"__ignoreMap":158},[162,159313,159314,159316,159318,159321],{"class":164,"line":165},[162,159315,149604],{"class":168},[162,159317,173],{"class":172},[162,159319,159320],{"class":207}," 18",[162,159322,159323],{"class":361},"       # 赋值\n",[162,159325,159326,159328,159330,159332],{"class":164,"line":197},[162,159327,149604],{"class":168},[162,159329,2292],{"class":172},[162,159331,159320],{"class":207},[162,159333,159334],{"class":361},"      # 判断是否相等\n",[3284,159336,159338],{"id":159337},"_274-逻辑运算符","2.7.4 逻辑运算符",[26,159340,159341,159349],{},[29,159342,159343],{},[32,159344,159345,159347],{},[35,159346,158959],{},[35,159348,28960],{},[51,159350,159351,159360,159369],{},[32,159352,159353,159357],{},[56,159354,159355],{},[71,159356,33547],{},[56,159358,159359],{},"并且",[32,159361,159362,159366],{},[56,159363,159364],{},[71,159365,118150],{},[56,159367,159368],{},"或者",[32,159370,159371,159376],{},[56,159372,159373],{},[71,159374,159375],{},"not",[56,159377,159378],{},"取反",[153,159380,159382],{"className":155,"code":159381,"language":157,"meta":158,"style":158},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[71,159383,159384,159392,159401,159405,159420,159434],{"__ignoreMap":158},[162,159385,159386,159388,159390],{"class":164,"line":165},[162,159387,149604],{"class":168},[162,159389,173],{"class":172},[162,159391,91130],{"class":207},[162,159393,159394,159397,159399],{"class":164,"line":197},[162,159395,159396],{"class":168},"has_ticket ",[162,159398,173],{"class":172},[162,159400,156642],{"class":207},[162,159402,159403],{"class":164,"line":228},[162,159404,301],{"emptyLinePlaceholder":300},[162,159406,159407,159409,159411,159413,159415,159417],{"class":164,"line":252},[162,159408,306],{"class":207},[162,159410,158804],{"class":168},[162,159412,3038],{"class":172},[162,159414,159320],{"class":207},[162,159416,123487],{"class":172},[162,159418,159419],{"class":168}," has_ticket)\n",[162,159421,159422,159424,159426,159428,159430,159432],{"class":164,"line":328},[162,159423,306],{"class":207},[162,159425,158804],{"class":168},[162,159427,4187],{"class":172},[162,159429,159320],{"class":207},[162,159431,117261],{"class":172},[162,159433,159419],{"class":168},[162,159435,159436,159438,159440,159442],{"class":164,"line":466},[162,159437,306],{"class":207},[162,159439,604],{"class":168},[162,159441,159375],{"class":172},[162,159443,159419],{"class":168},[14,159445,159447],{"id":159446},"_28-字符串定义","2.8 字符串定义",[19,159449,159450],{},"三种常见写法：",[153,159452,159454],{"className":155,"code":159453,"language":157,"meta":158,"style":158},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[71,159455,159456,159466,159475,159484],{"__ignoreMap":158},[162,159457,159458,159461,159463],{"class":164,"line":165},[162,159459,159460],{"class":168},"name1 ",[162,159462,173],{"class":172},[162,159464,159465],{"class":179}," '小明'\n",[162,159467,159468,159471,159473],{"class":164,"line":197},[162,159469,159470],{"class":168},"name2 ",[162,159472,173],{"class":172},[162,159474,152409],{"class":179},[162,159476,159477,159479,159481],{"class":164,"line":228},[162,159478,1123],{"class":168},[162,159480,173],{"class":172},[162,159482,159483],{"class":179}," \"\"\"这是多行字符串\n",[162,159485,159486],{"class":164,"line":252},[162,159487,159488],{"class":179},"可以换行\"\"\"\n",[19,159490,159491],{},"字符串中包含引号：",[153,159493,159495],{"className":155,"code":159494,"language":157,"meta":158,"style":158},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[71,159496,159497,159507,159517],{"__ignoreMap":158},[162,159498,159499,159502,159504],{"class":164,"line":165},[162,159500,159501],{"class":168},"msg ",[162,159503,173],{"class":172},[162,159505,159506],{"class":179}," \"他说:'你好'\"\n",[162,159508,159509,159512,159514],{"class":164,"line":197},[162,159510,159511],{"class":168},"msg2 ",[162,159513,173],{"class":172},[162,159515,159516],{"class":179}," '他说:\"你好\"'\n",[162,159518,159519,159522,159524,159527,159530,159533,159535],{"class":164,"line":228},[162,159520,159521],{"class":168},"msg3 ",[162,159523,173],{"class":172},[162,159525,159526],{"class":179}," \"他说:",[162,159528,159529],{"class":207},"\\\"",[162,159531,159532],{"class":179},"你好",[162,159534,159529],{"class":207},[162,159536,28225],{"class":179},[19,159538,159539],{},"常见转义字符：",[26,159541,159542,159551],{},[29,159543,159544],{},[32,159545,159546,159549],{},[35,159547,159548],{},"写法",[35,159550,103764],{},[51,159552,159553,159563,159572,159582,159591],{},[32,159554,159555,159560],{},[56,159556,159557],{},[71,159558,159559],{},"\\n",[56,159561,159562],{},"换行",[32,159564,159565,159569],{},[56,159566,159567],{},[71,159568,4373],{},[56,159570,159571],{},"制表符",[32,159573,159574,159579],{},[56,159575,159576],{},[71,159577,159578],{},"\\\\",[56,159580,159581],{},"反斜杠",[32,159583,159584,159588],{},[56,159585,159586],{},[71,159587,159529],{},[56,159589,159590],{},"双引号",[32,159592,159593,159598],{},[56,159594,159595],{},[71,159596,159597],{},"\\'",[56,159599,159600],{},"单引号",[14,159602,159604],{"id":159603},"_29-字符串拼接","2.9 字符串拼接",[153,159606,159608],{"className":155,"code":159607,"language":157,"meta":158,"style":158},"name = \"小明\"\nprint(\"你好，\" + name)\n",[71,159609,159610,159618],{"__ignoreMap":158},[162,159611,159612,159614,159616],{"class":164,"line":165},[162,159613,149594],{"class":168},[162,159615,173],{"class":172},[162,159617,152409],{"class":179},[162,159619,159620,159622,159624,159627,159629],{"class":164,"line":197},[162,159621,306],{"class":207},[162,159623,604],{"class":168},[162,159625,159626],{"class":179},"\"你好，\"",[162,159628,1239],{"class":172},[162,159630,159631],{"class":168}," name)\n",[19,159633,159634],{},"字符串只能和字符串拼接：",[153,159636,159638],{"className":155,"code":159637,"language":157,"meta":158,"style":158},"age = 18\nprint(\"年龄:\" + str(age))\n",[71,159639,159640,159648],{"__ignoreMap":158},[162,159641,159642,159644,159646],{"class":164,"line":165},[162,159643,149604],{"class":168},[162,159645,173],{"class":172},[162,159647,149609],{"class":207},[162,159649,159650,159652,159654,159656,159658,159660],{"class":164,"line":197},[162,159651,306],{"class":207},[162,159653,604],{"class":168},[162,159655,149575],{"class":179},[162,159657,1239],{"class":172},[162,159659,76984],{"class":207},[162,159661,159662],{"class":168},"(age))\n",[19,159664,159665],{},"更推荐使用格式化字符串。",[14,159667,159669],{"id":159668},"_210-字符串格式化","2.10 字符串格式化",[3284,159671,159673],{"id":159672},"_2101-百分号格式化","2.10.1 百分号格式化",[153,159675,159677],{"className":155,"code":159676,"language":157,"meta":158,"style":158},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[71,159678,159679,159687,159695,159704,159708],{"__ignoreMap":158},[162,159680,159681,159683,159685],{"class":164,"line":165},[162,159682,149594],{"class":168},[162,159684,173],{"class":172},[162,159686,152409],{"class":179},[162,159688,159689,159691,159693],{"class":164,"line":197},[162,159690,149604],{"class":168},[162,159692,173],{"class":172},[162,159694,149609],{"class":207},[162,159696,159697,159699,159701],{"class":164,"line":228},[162,159698,1897],{"class":168},[162,159700,173],{"class":172},[162,159702,159703],{"class":207}," 95.5\n",[162,159705,159706],{"class":164,"line":252},[162,159707,301],{"emptyLinePlaceholder":300},[162,159709,159710,159712,159714,159717,159720,159723,159726,159729,159732,159734,159736],{"class":164,"line":328},[162,159711,306],{"class":207},[162,159713,604],{"class":168},[162,159715,159716],{"class":179},"\"姓名:",[162,159718,159719],{"class":207},"%s",[162,159721,159722],{"class":179}," 年龄:",[162,159724,159725],{"class":207},"%d",[162,159727,159728],{"class":179}," 分数:",[162,159730,159731],{"class":207},"%.1f",[162,159733,979],{"class":179},[162,159735,159116],{"class":172},[162,159737,159738],{"class":168}," (name, age, score))\n",[19,159740,159741],{},"常用占位符：",[26,159743,159744,159753],{},[29,159745,159746],{},[32,159747,159748,159751],{},[35,159749,159750],{},"占位符",[35,159752,28960],{},[51,159754,159755,159763,159771],{},[32,159756,159757,159761],{},[56,159758,159759],{},[71,159760,159719],{},[56,159762,158266],{},[32,159764,159765,159769],{},[56,159766,159767],{},[71,159768,159725],{},[56,159770,158244],{},[32,159772,159773,159778],{},[56,159774,159775],{},[71,159776,159777],{},"%f",[56,159779,158255],{},[19,159781,159782],{},"精度控制：",[153,159784,159786],{"className":155,"code":159785,"language":157,"meta":158,"style":158},"price = 12.3456\nprint(\"%.2f\" % price)\n",[71,159787,159788,159797],{"__ignoreMap":158},[162,159789,159790,159792,159794],{"class":164,"line":165},[162,159791,149739],{"class":168},[162,159793,173],{"class":172},[162,159795,159796],{"class":207}," 12.3456\n",[162,159798,159799,159801,159803,159805,159808,159810,159812],{"class":164,"line":197},[162,159800,306],{"class":207},[162,159802,604],{"class":168},[162,159804,979],{"class":179},[162,159806,159807],{"class":207},"%.2f",[162,159809,979],{"class":179},[162,159811,159116],{"class":172},[162,159813,159814],{"class":168}," price)\n",[3284,159816,159818],{"id":159817},"_2102-format方法","2.10.2 format方法",[153,159820,159822],{"className":155,"code":159821,"language":157,"meta":158,"style":158},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[71,159823,159824,159832,159840,159844,159863,159883],{"__ignoreMap":158},[162,159825,159826,159828,159830],{"class":164,"line":165},[162,159827,149594],{"class":168},[162,159829,173],{"class":172},[162,159831,152409],{"class":179},[162,159833,159834,159836,159838],{"class":164,"line":197},[162,159835,149604],{"class":168},[162,159837,173],{"class":172},[162,159839,149609],{"class":207},[162,159841,159842],{"class":164,"line":228},[162,159843,301],{"emptyLinePlaceholder":300},[162,159845,159846,159848,159850,159852,159854,159856,159858,159860],{"class":164,"line":252},[162,159847,306],{"class":207},[162,159849,604],{"class":168},[162,159851,159716],{"class":179},[162,159853,1532],{"class":207},[162,159855,159722],{"class":179},[162,159857,1532],{"class":207},[162,159859,979],{"class":179},[162,159861,159862],{"class":168},".format(name, age))\n",[162,159864,159865,159867,159869,159871,159874,159876,159879,159881],{"class":164,"line":328},[162,159866,306],{"class":207},[162,159868,604],{"class":168},[162,159870,159716],{"class":179},[162,159872,159873],{"class":207},"{0}",[162,159875,159722],{"class":179},[162,159877,159878],{"class":207},"{1}",[162,159880,979],{"class":179},[162,159882,159862],{"class":168},[162,159884,159885,159887,159889,159891,159894,159896,159899,159901,159904,159906,159908,159911,159913,159915],{"class":164,"line":466},[162,159886,306],{"class":207},[162,159888,604],{"class":168},[162,159890,159716],{"class":179},[162,159892,159893],{"class":207},"{name}",[162,159895,159722],{"class":179},[162,159897,159898],{"class":207},"{age}",[162,159900,979],{"class":179},[162,159902,159903],{"class":168},".format(",[162,159905,82875],{"class":671},[162,159907,173],{"class":172},[162,159909,159910],{"class":168},"name, ",[162,159912,73286],{"class":671},[162,159914,173],{"class":172},[162,159916,159917],{"class":168},"age))\n",[3284,159919,159921],{"id":159920},"_2103-f-string","2.10.3 f-string",[19,159923,159924],{},"推荐写法：",[153,159926,159928],{"className":155,"code":159927,"language":157,"meta":158,"style":158},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[71,159929,159930,159938,159946,159954,159958],{"__ignoreMap":158},[162,159931,159932,159934,159936],{"class":164,"line":165},[162,159933,149594],{"class":168},[162,159935,173],{"class":172},[162,159937,152409],{"class":179},[162,159939,159940,159942,159944],{"class":164,"line":197},[162,159941,149604],{"class":168},[162,159943,173],{"class":172},[162,159945,149609],{"class":207},[162,159947,159948,159950,159952],{"class":164,"line":228},[162,159949,1897],{"class":168},[162,159951,173],{"class":172},[162,159953,159703],{"class":207},[162,159955,159956],{"class":164,"line":252},[162,159957,301],{"emptyLinePlaceholder":300},[162,159959,159960,159962,159964,159966,159968,159970,159972,159974,159976,159978,159980,159982,159984,159986,159989,159992,159994,159996],{"class":164,"line":328},[162,159961,306],{"class":207},[162,159963,604],{"class":168},[162,159965,961],{"class":172},[162,159967,159716],{"class":179},[162,159969,967],{"class":207},[162,159971,82875],{"class":168},[162,159973,976],{"class":207},[162,159975,159722],{"class":179},[162,159977,967],{"class":207},[162,159979,73286],{"class":168},[162,159981,976],{"class":207},[162,159983,159728],{"class":179},[162,159985,967],{"class":207},[162,159987,159988],{"class":168},"score",[162,159990,159991],{"class":172},":.1f",[162,159993,976],{"class":207},[162,159995,979],{"class":179},[162,159997,434],{"class":168},[19,159999,160000],{},"表达式也可以放进去：",[153,160002,160004],{"className":155,"code":160003,"language":157,"meta":158,"style":158},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[71,160005,160006,160014,160022],{"__ignoreMap":158},[162,160007,160008,160010,160012],{"class":164,"line":165},[162,160009,149739],{"class":168},[162,160011,173],{"class":172},[162,160013,149744],{"class":207},[162,160015,160016,160018,160020],{"class":164,"line":197},[162,160017,149749],{"class":168},[162,160019,173],{"class":172},[162,160021,57497],{"class":207},[162,160023,160024,160026,160028,160030,160033,160035,160037,160039,160042,160044,160047],{"class":164,"line":228},[162,160025,306],{"class":207},[162,160027,604],{"class":168},[162,160029,961],{"class":172},[162,160031,160032],{"class":179},"\"总价:",[162,160034,967],{"class":207},[162,160036,149739],{"class":168},[162,160038,3745],{"class":172},[162,160040,160041],{"class":168}," count",[162,160043,976],{"class":207},[162,160045,160046],{"class":179},"元\"",[162,160048,434],{"class":168},[14,160050,160052],{"id":160051},"_211-input输入","2.11 input输入",[19,160054,160055,160058],{},[71,160056,160057],{},"input()"," 会暂停程序，等待用户输入。",[153,160060,160062],{"className":155,"code":160061,"language":157,"meta":158,"style":158},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[71,160063,160064,160078],{"__ignoreMap":158},[162,160065,160066,160068,160070,160072,160074,160076],{"class":164,"line":165},[162,160067,149594],{"class":168},[162,160069,173],{"class":172},[162,160071,2257],{"class":207},[162,160073,604],{"class":168},[162,160075,155425],{"class":179},[162,160077,434],{"class":168},[162,160079,160080,160082,160084,160086,160089,160091,160093,160095,160097],{"class":164,"line":197},[162,160081,306],{"class":207},[162,160083,604],{"class":168},[162,160085,961],{"class":172},[162,160087,160088],{"class":179},"\"你好，",[162,160090,967],{"class":207},[162,160092,82875],{"class":168},[162,160094,976],{"class":207},[162,160096,979],{"class":179},[162,160098,434],{"class":168},[19,160100,160101],{},"输入整数：",[153,160103,160105],{"className":155,"code":160104,"language":157,"meta":158,"style":158},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[71,160106,160107,160125],{"__ignoreMap":158},[162,160108,160109,160111,160113,160115,160117,160119,160121,160123],{"class":164,"line":165},[162,160110,149604],{"class":168},[162,160112,173],{"class":172},[162,160114,5500],{"class":207},[162,160116,604],{"class":168},[162,160118,56891],{"class":207},[162,160120,604],{"class":168},[162,160122,155440],{"class":179},[162,160124,586],{"class":168},[162,160126,160127,160129,160131,160133,160136,160138,160140,160142,160145,160147],{"class":164,"line":197},[162,160128,306],{"class":207},[162,160130,604],{"class":168},[162,160132,961],{"class":172},[162,160134,160135],{"class":179},"\"明年你",[162,160137,967],{"class":207},[162,160139,149604],{"class":168},[162,160141,3771],{"class":172},[162,160143,160144],{"class":207}," 1}",[162,160146,152460],{"class":179},[162,160148,434],{"class":168},[19,160150,160151],{},"输入小数：",[153,160153,160155],{"className":155,"code":160154,"language":157,"meta":158,"style":158},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[71,160156,160157,160176],{"__ignoreMap":158},[162,160158,160159,160161,160163,160165,160167,160169,160171,160174],{"class":164,"line":165},[162,160160,158368],{"class":168},[162,160162,173],{"class":172},[162,160164,112858],{"class":207},[162,160166,604],{"class":168},[162,160168,56891],{"class":207},[162,160170,604],{"class":168},[162,160172,160173],{"class":179},"\"请输入身高:\"",[162,160175,586],{"class":168},[162,160177,160178,160180,160182,160184,160187,160189,160191,160193,160195,160198],{"class":164,"line":197},[162,160179,306],{"class":207},[162,160181,604],{"class":168},[162,160183,961],{"class":172},[162,160185,160186],{"class":179},"\"身高:",[162,160188,967],{"class":207},[162,160190,28073],{"class":168},[162,160192,973],{"class":172},[162,160194,976],{"class":207},[162,160196,160197],{"class":179},"米\"",[162,160199,434],{"class":168},[14,160201,160203],{"id":160202},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,160205,126350],{},[1452,160207,160208,160211,160214,160217],{},[1455,160209,160210],{},"输入商品单价。",[1455,160212,160213],{},"输入购买数量。",[1455,160215,160216],{},"输入折扣，例如 0.8 表示八折。",[1455,160218,160219],{},"输出最终金额，保留两位小数。",[19,160221,13135],{},[153,160223,160225],{"className":155,"code":160224,"language":157,"meta":158,"style":158},"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",[71,160226,160227,160246,160265,160285,160289,160308,160312,160335,160356,160378],{"__ignoreMap":158},[162,160228,160229,160231,160233,160235,160237,160239,160241,160244],{"class":164,"line":165},[162,160230,149739],{"class":168},[162,160232,173],{"class":172},[162,160234,112858],{"class":207},[162,160236,604],{"class":168},[162,160238,56891],{"class":207},[162,160240,604],{"class":168},[162,160242,160243],{"class":179},"\"请输入商品单价:\"",[162,160245,586],{"class":168},[162,160247,160248,160250,160252,160254,160256,160258,160260,160263],{"class":164,"line":197},[162,160249,149749],{"class":168},[162,160251,173],{"class":172},[162,160253,5500],{"class":207},[162,160255,604],{"class":168},[162,160257,56891],{"class":207},[162,160259,604],{"class":168},[162,160261,160262],{"class":179},"\"请输入购买数量:\"",[162,160264,586],{"class":168},[162,160266,160267,160270,160272,160274,160276,160278,160280,160283],{"class":164,"line":228},[162,160268,160269],{"class":168},"discount ",[162,160271,173],{"class":172},[162,160273,112858],{"class":207},[162,160275,604],{"class":168},[162,160277,56891],{"class":207},[162,160279,604],{"class":168},[162,160281,160282],{"class":179},"\"请输入折扣:\"",[162,160284,586],{"class":168},[162,160286,160287],{"class":164,"line":252},[162,160288,301],{"emptyLinePlaceholder":300},[162,160290,160291,160293,160295,160298,160300,160303,160305],{"class":164,"line":328},[162,160292,897],{"class":168},[162,160294,173],{"class":172},[162,160296,160297],{"class":168}," price ",[162,160299,3745],{"class":172},[162,160301,160302],{"class":168}," count ",[162,160304,3745],{"class":172},[162,160306,160307],{"class":168}," discount\n",[162,160309,160310],{"class":164,"line":466},[162,160311,301],{"emptyLinePlaceholder":300},[162,160313,160314,160316,160318,160320,160323,160325,160327,160329,160331,160333],{"class":164,"line":471},[162,160315,306],{"class":207},[162,160317,604],{"class":168},[162,160319,961],{"class":172},[162,160321,160322],{"class":179},"\"商品单价:",[162,160324,967],{"class":207},[162,160326,82880],{"class":168},[162,160328,973],{"class":172},[162,160330,976],{"class":207},[162,160332,979],{"class":179},[162,160334,434],{"class":168},[162,160336,160337,160339,160341,160343,160346,160348,160350,160352,160354],{"class":164,"line":687},[162,160338,306],{"class":207},[162,160340,604],{"class":168},[162,160342,961],{"class":172},[162,160344,160345],{"class":179},"\"购买数量:",[162,160347,967],{"class":207},[162,160349,87499],{"class":168},[162,160351,976],{"class":207},[162,160353,979],{"class":179},[162,160355,434],{"class":168},[162,160357,160358,160360,160362,160364,160367,160369,160372,160374,160376],{"class":164,"line":692},[162,160359,306],{"class":207},[162,160361,604],{"class":168},[162,160363,961],{"class":172},[162,160365,160366],{"class":179},"\"折扣:",[162,160368,967],{"class":207},[162,160370,160371],{"class":168},"discount",[162,160373,976],{"class":207},[162,160375,979],{"class":179},[162,160377,434],{"class":168},[162,160379,160380,160382,160384,160386,160389,160391,160394,160396,160398,160400],{"class":164,"line":698},[162,160381,306],{"class":207},[162,160383,604],{"class":168},[162,160385,961],{"class":172},[162,160387,160388],{"class":179},"\"应付金额:",[162,160390,967],{"class":207},[162,160392,160393],{"class":168},"total",[162,160395,973],{"class":172},[162,160397,976],{"class":207},[162,160399,160046],{"class":179},[162,160401,434],{"class":168},[14,160403,160405],{"id":160404},"_213-易错点","2.13 易错点",[1452,160407,160408,160413,160419,160427,160430],{},[1455,160409,160410,160412],{},[71,160411,160057],{}," 的结果是字符串，做运算前要转换。",[1455,160414,160415,160416,3183],{},"字符串拼接时，数字要先 ",[71,160417,160418],{},"str()",[1455,160420,160421,160423,160424,160426],{},[71,160422,173],{}," 是赋值，",[71,160425,2292],{}," 是比较。",[1455,160428,160429],{},"Python 没有自增自减运算符。",[1455,160431,160432],{},"浮点数计算可能有精度误差：",[153,160434,160436],{"className":155,"code":160435,"language":157,"meta":158,"style":158},"print(0.1 + 0.2)\n",[71,160437,160438],{"__ignoreMap":158},[162,160439,160440,160442,160444,160446,160448,160451],{"class":164,"line":165},[162,160441,306],{"class":207},[162,160443,604],{"class":168},[162,160445,89275],{"class":207},[162,160447,1239],{"class":172},[162,160449,160450],{"class":207}," 0.2",[162,160452,434],{"class":168},[19,160454,160455,160456,160459],{},"金额计算如果要求严格，可以后续学习 ",[71,160457,160458],{},"decimal"," 模块。",[14,160461,160463],{"id":160462},"_214-本章练习","2.14 本章练习",[1452,160465,160466,160469,160472,160475,160478],{},[1455,160467,160468],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[1455,160470,160471],{},"输入圆的半径，计算面积，保留两位小数。",[1455,160473,160474],{},"输入工资和奖金，计算总收入。",[1455,160476,160477],{},"输入摄氏温度，转换为华氏温度。",[1455,160479,160480],{},"写一个 BMI 计算程序：",[153,160482,160485],{"className":160483,"code":160484,"language":8295,"meta":158},[8293],"BMI = 体重kg \u002F 身高m ** 2\n",[71,160486,160484],{"__ignoreMap":158},[3219,160488,160489],{},"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":158,"searchDepth":197,"depth":197,"links":160491},[160492,160493,160494,160495,160496,160497,160498,160504,160505,160506,160511,160512,160513,160514],{"id":158063,"depth":197,"text":158064},{"id":158172,"depth":197,"text":158173},{"id":158338,"depth":197,"text":158339},{"id":158414,"depth":197,"text":158415},{"id":53804,"depth":197,"text":53805},{"id":158720,"depth":197,"text":158721},{"id":158945,"depth":197,"text":158946,"children":160499},[160500,160501,160502,160503],{"id":158949,"depth":228,"text":158950},{"id":159143,"depth":228,"text":159144},{"id":159231,"depth":228,"text":159232},{"id":159337,"depth":228,"text":159338},{"id":159446,"depth":197,"text":159447},{"id":159603,"depth":197,"text":159604},{"id":159668,"depth":197,"text":159669,"children":160507},[160508,160509,160510],{"id":159672,"depth":228,"text":159673},{"id":159817,"depth":228,"text":159818},{"id":159920,"depth":228,"text":159921},{"id":160051,"depth":197,"text":160052},{"id":160202,"depth":197,"text":160203},{"id":160404,"depth":197,"text":160405},{"id":160462,"depth":197,"text":160463},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":158055,"description":3241},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":160521,"title":160522,"body":160523,"description":3241,"extension":3242,"meta":162157,"navigation":300,"path":162158,"seo":162159,"stem":162160,"__hash__":162161},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":160524,"toc":162138},[160525,160528,160532,160535,160550,160553,160581,160585,160635,160637,160653,160656,160682,160685,160689,160756,160759,160775,160779,160782,160898,160901,160908,160957,160963,160967,160970,161083,161086,161090,161094,161097,161147,161151,161154,161204,161208,161211,161249,161253,161256,161302,161305,161340,161344,161349,161352,161398,161400,161467,161471,161477,161588,161597,161601,161603,161614,161616,161782,161786,161788,161802,161804,162018,162022,162041,162058,162061,162107,162111,162135],[10,160526,160522],{"id":160527},"_3-判断语句",[14,160529,160531],{"id":160530},"_31-布尔值","3.1 布尔值",[19,160533,160534],{},"判断语句依赖布尔值：",[153,160536,160538],{"className":155,"code":160537,"language":157,"meta":158,"style":158},"True\nFalse\n",[71,160539,160540,160545],{"__ignoreMap":158},[162,160541,160542],{"class":164,"line":165},[162,160543,160544],{"class":207},"True\n",[162,160546,160547],{"class":164,"line":197},[162,160548,160549],{"class":207},"False\n",[19,160551,160552],{},"比较表达式会产生布尔值：",[153,160554,160556],{"className":155,"code":160555,"language":157,"meta":158,"style":158},"age = 18\nprint(age >= 18)  # True\n",[71,160557,160558,160566],{"__ignoreMap":158},[162,160559,160560,160562,160564],{"class":164,"line":165},[162,160561,149604],{"class":168},[162,160563,173],{"class":172},[162,160565,149609],{"class":207},[162,160567,160568,160570,160572,160574,160576,160578],{"class":164,"line":197},[162,160569,306],{"class":207},[162,160571,158804],{"class":168},[162,160573,3038],{"class":172},[162,160575,159320],{"class":207},[162,160577,48882],{"class":168},[162,160579,160580],{"class":361},"# True\n",[14,160582,160584],{"id":160583},"_32-if基础语法","3.2 if基础语法",[153,160586,160588],{"className":155,"code":160587,"language":157,"meta":158,"style":158},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[71,160589,160590,160608,160612,160624],{"__ignoreMap":158},[162,160591,160592,160594,160596,160598,160600,160602,160604,160606],{"class":164,"line":165},[162,160593,149604],{"class":168},[162,160595,173],{"class":172},[162,160597,5500],{"class":207},[162,160599,604],{"class":168},[162,160601,56891],{"class":207},[162,160603,604],{"class":168},[162,160605,155440],{"class":179},[162,160607,586],{"class":168},[162,160609,160610],{"class":164,"line":197},[162,160611,301],{"emptyLinePlaceholder":300},[162,160613,160614,160616,160618,160620,160622],{"class":164,"line":228},[162,160615,2703],{"class":172},[162,160617,18798],{"class":168},[162,160619,3038],{"class":172},[162,160621,159320],{"class":207},[162,160623,2316],{"class":168},[162,160625,160626,160628,160630,160633],{"class":164,"line":252},[162,160627,822],{"class":207},[162,160629,604],{"class":168},[162,160631,160632],{"class":179},"\"可以进入网吧\"",[162,160634,434],{"class":168},[19,160636,1529],{},[1452,160638,160639,160644,160647,160650],{},[1455,160640,160641,160643],{},[71,160642,2703],{}," 后面是条件表达式。",[1455,160645,160646],{},"条件后面必须写冒号。",[1455,160648,160649],{},"条件成立时执行缩进代码块。",[1455,160651,160652],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,160654,160655],{},"错误示例：",[153,160657,160659],{"className":155,"code":160658,"language":157,"meta":158,"style":158},"if age >= 18\n    print(\"可以进入\")\n",[71,160660,160661,160671],{"__ignoreMap":158},[162,160662,160663,160665,160667,160669],{"class":164,"line":165},[162,160664,2703],{"class":172},[162,160666,18798],{"class":168},[162,160668,3038],{"class":172},[162,160670,149609],{"class":207},[162,160672,160673,160675,160677,160680],{"class":164,"line":197},[162,160674,822],{"class":207},[162,160676,604],{"class":168},[162,160678,160679],{"class":179},"\"可以进入\"",[162,160681,434],{"class":168},[19,160683,160684],{},"缺少冒号。",[14,160686,160688],{"id":160687},"_33-if-else","3.3 if else",[153,160690,160692],{"className":155,"code":160691,"language":157,"meta":158,"style":158},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[71,160693,160694,160712,160716,160728,160739,160745],{"__ignoreMap":158},[162,160695,160696,160698,160700,160702,160704,160706,160708,160710],{"class":164,"line":165},[162,160697,149604],{"class":168},[162,160699,173],{"class":172},[162,160701,5500],{"class":207},[162,160703,604],{"class":168},[162,160705,56891],{"class":207},[162,160707,604],{"class":168},[162,160709,155440],{"class":179},[162,160711,586],{"class":168},[162,160713,160714],{"class":164,"line":197},[162,160715,301],{"emptyLinePlaceholder":300},[162,160717,160718,160720,160722,160724,160726],{"class":164,"line":228},[162,160719,2703],{"class":172},[162,160721,18798],{"class":168},[162,160723,3038],{"class":172},[162,160725,159320],{"class":207},[162,160727,2316],{"class":168},[162,160729,160730,160732,160734,160737],{"class":164,"line":252},[162,160731,822],{"class":207},[162,160733,604],{"class":168},[162,160735,160736],{"class":179},"\"成年人\"",[162,160738,434],{"class":168},[162,160740,160741,160743],{"class":164,"line":328},[162,160742,2313],{"class":172},[162,160744,2316],{"class":168},[162,160746,160747,160749,160751,160754],{"class":164,"line":466},[162,160748,822],{"class":207},[162,160750,604],{"class":168},[162,160752,160753],{"class":179},"\"未成年人\"",[162,160755,434],{"class":168},[19,160757,160758],{},"执行逻辑：",[1452,160760,160761,160767,160772],{},[1455,160762,160763,160764,160766],{},"条件成立，执行 ",[71,160765,2703],{}," 代码块。",[1455,160768,160769,160770,160766],{},"条件不成立，执行 ",[71,160771,2313],{},[1455,160773,160774],{},"两个代码块只会执行其中一个。",[14,160776,160778],{"id":160777},"_34-if-elif-else","3.4 if elif else",[19,160780,160781],{},"多条件判断：",[153,160783,160785],{"className":155,"code":160784,"language":157,"meta":158,"style":158},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[71,160786,160787,160805,160809,160822,160833,160847,160858,160870,160881,160887],{"__ignoreMap":158},[162,160788,160789,160791,160793,160795,160797,160799,160801,160803],{"class":164,"line":165},[162,160790,1897],{"class":168},[162,160792,173],{"class":172},[162,160794,5500],{"class":207},[162,160796,604],{"class":168},[162,160798,56891],{"class":207},[162,160800,604],{"class":168},[162,160802,155455],{"class":179},[162,160804,586],{"class":168},[162,160806,160807],{"class":164,"line":197},[162,160808,301],{"emptyLinePlaceholder":300},[162,160810,160811,160813,160815,160817,160820],{"class":164,"line":228},[162,160812,2703],{"class":172},[162,160814,913],{"class":168},[162,160816,3038],{"class":172},[162,160818,160819],{"class":207}," 90",[162,160821,2316],{"class":168},[162,160823,160824,160826,160828,160831],{"class":164,"line":252},[162,160825,822],{"class":207},[162,160827,604],{"class":168},[162,160829,160830],{"class":179},"\"优秀\"",[162,160832,434],{"class":168},[162,160834,160835,160838,160840,160842,160845],{"class":164,"line":328},[162,160836,160837],{"class":172},"elif",[162,160839,913],{"class":168},[162,160841,3038],{"class":172},[162,160843,160844],{"class":207}," 80",[162,160846,2316],{"class":168},[162,160848,160849,160851,160853,160856],{"class":164,"line":466},[162,160850,822],{"class":207},[162,160852,604],{"class":168},[162,160854,160855],{"class":179},"\"良好\"",[162,160857,434],{"class":168},[162,160859,160860,160862,160864,160866,160868],{"class":164,"line":471},[162,160861,160837],{"class":172},[162,160863,913],{"class":168},[162,160865,3038],{"class":172},[162,160867,3041],{"class":207},[162,160869,2316],{"class":168},[162,160871,160872,160874,160876,160879],{"class":164,"line":687},[162,160873,822],{"class":207},[162,160875,604],{"class":168},[162,160877,160878],{"class":179},"\"及格\"",[162,160880,434],{"class":168},[162,160882,160883,160885],{"class":164,"line":692},[162,160884,2313],{"class":172},[162,160886,2316],{"class":168},[162,160888,160889,160891,160893,160896],{"class":164,"line":698},[162,160890,822],{"class":207},[162,160892,604],{"class":168},[162,160894,160895],{"class":179},"\"不及格\"",[162,160897,434],{"class":168},[19,160899,160900],{},"注意判断顺序很重要。",[19,160902,160903,160904,160907],{},"如果把 ",[71,160905,160906],{},"score >= 60"," 放在最前面：",[153,160909,160911],{"className":155,"code":160910,"language":157,"meta":158,"style":158},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[71,160912,160913,160925,160935,160947],{"__ignoreMap":158},[162,160914,160915,160917,160919,160921,160923],{"class":164,"line":165},[162,160916,2703],{"class":172},[162,160918,913],{"class":168},[162,160920,3038],{"class":172},[162,160922,3041],{"class":207},[162,160924,2316],{"class":168},[162,160926,160927,160929,160931,160933],{"class":164,"line":197},[162,160928,822],{"class":207},[162,160930,604],{"class":168},[162,160932,160878],{"class":179},[162,160934,434],{"class":168},[162,160936,160937,160939,160941,160943,160945],{"class":164,"line":228},[162,160938,160837],{"class":172},[162,160940,913],{"class":168},[162,160942,3038],{"class":172},[162,160944,160819],{"class":207},[162,160946,2316],{"class":168},[162,160948,160949,160951,160953,160955],{"class":164,"line":252},[162,160950,822],{"class":207},[162,160952,604],{"class":168},[162,160954,160830],{"class":179},[162,160956,434],{"class":168},[19,160958,160959,160960,160962],{},"成绩 95 会先满足 ",[71,160961,160906],{},"，后面的优秀分支就不会执行。",[14,160964,160966],{"id":160965},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,160968,160969],{},"嵌套判断就是在一个判断内部再写判断。",[153,160971,160973],{"className":155,"code":160972,"language":157,"meta":158,"style":158},"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",[71,160974,160975,160993,161008,161012,161024,161038,161048,161055,161066,161072],{"__ignoreMap":158},[162,160976,160977,160979,160981,160983,160985,160987,160989,160991],{"class":164,"line":165},[162,160978,149604],{"class":168},[162,160980,173],{"class":172},[162,160982,5500],{"class":207},[162,160984,604],{"class":168},[162,160986,56891],{"class":207},[162,160988,604],{"class":168},[162,160990,155440],{"class":179},[162,160992,586],{"class":168},[162,160994,160995,160997,160999,161001,161003,161006],{"class":164,"line":197},[162,160996,159396],{"class":168},[162,160998,173],{"class":172},[162,161000,2257],{"class":207},[162,161002,604],{"class":168},[162,161004,161005],{"class":179},"\"是否有票(y\u002Fn):\"",[162,161007,434],{"class":168},[162,161009,161010],{"class":164,"line":228},[162,161011,301],{"emptyLinePlaceholder":300},[162,161013,161014,161016,161018,161020,161022],{"class":164,"line":252},[162,161015,2703],{"class":172},[162,161017,18798],{"class":168},[162,161019,3038],{"class":172},[162,161021,159320],{"class":207},[162,161023,2316],{"class":168},[162,161025,161026,161028,161031,161033,161036],{"class":164,"line":328},[162,161027,2283],{"class":172},[162,161029,161030],{"class":168}," has_ticket ",[162,161032,2292],{"class":172},[162,161034,161035],{"class":179}," \"y\"",[162,161037,2316],{"class":168},[162,161039,161040,161042,161044,161046],{"class":164,"line":466},[162,161041,2300],{"class":207},[162,161043,604],{"class":168},[162,161045,160679],{"class":179},[162,161047,434],{"class":168},[162,161049,161050,161053],{"class":164,"line":471},[162,161051,161052],{"class":172},"    else",[162,161054,2316],{"class":168},[162,161056,161057,161059,161061,161064],{"class":164,"line":687},[162,161058,2300],{"class":207},[162,161060,604],{"class":168},[162,161062,161063],{"class":179},"\"请先买票\"",[162,161065,434],{"class":168},[162,161067,161068,161070],{"class":164,"line":692},[162,161069,2313],{"class":172},[162,161071,2316],{"class":168},[162,161073,161074,161076,161078,161081],{"class":164,"line":698},[162,161075,822],{"class":207},[162,161077,604],{"class":168},[162,161079,161080],{"class":179},"\"未成年人禁止进入\"",[162,161082,434],{"class":168},[19,161084,161085],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,161087,161089],{"id":161088},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[3284,161091,161093],{"id":161092},"_361-and","3.6.1 and",[19,161095,161096],{},"两个条件都成立才成立。",[153,161098,161100],{"className":155,"code":161099,"language":157,"meta":158,"style":158},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[71,161101,161102,161110,161118,161122,161137],{"__ignoreMap":158},[162,161103,161104,161106,161108],{"class":164,"line":165},[162,161105,149604],{"class":168},[162,161107,173],{"class":172},[162,161109,91130],{"class":207},[162,161111,161112,161114,161116],{"class":164,"line":197},[162,161113,159396],{"class":168},[162,161115,173],{"class":172},[162,161117,156642],{"class":207},[162,161119,161120],{"class":164,"line":228},[162,161121,301],{"emptyLinePlaceholder":300},[162,161123,161124,161126,161128,161130,161132,161134],{"class":164,"line":252},[162,161125,2703],{"class":172},[162,161127,18798],{"class":168},[162,161129,3038],{"class":172},[162,161131,159320],{"class":207},[162,161133,123487],{"class":172},[162,161135,161136],{"class":168}," has_ticket:\n",[162,161138,161139,161141,161143,161145],{"class":164,"line":328},[162,161140,822],{"class":207},[162,161142,604],{"class":168},[162,161144,160679],{"class":179},[162,161146,434],{"class":168},[3284,161148,161150],{"id":161149},"_362-or","3.6.2 or",[19,161152,161153],{},"只要一个条件成立就成立。",[153,161155,161157],{"className":155,"code":161156,"language":157,"meta":158,"style":158},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[71,161158,161159,161168,161177,161181,161193],{"__ignoreMap":158},[162,161160,161161,161164,161166],{"class":164,"line":165},[162,161162,161163],{"class":168},"is_vip ",[162,161165,173],{"class":172},[162,161167,128865],{"class":207},[162,161169,161170,161173,161175],{"class":164,"line":197},[162,161171,161172],{"class":168},"coupon ",[162,161174,173],{"class":172},[162,161176,156642],{"class":207},[162,161178,161179],{"class":164,"line":228},[162,161180,301],{"emptyLinePlaceholder":300},[162,161182,161183,161185,161188,161190],{"class":164,"line":252},[162,161184,2703],{"class":172},[162,161186,161187],{"class":168}," is_vip ",[162,161189,118150],{"class":172},[162,161191,161192],{"class":168}," coupon:\n",[162,161194,161195,161197,161199,161202],{"class":164,"line":328},[162,161196,822],{"class":207},[162,161198,604],{"class":168},[162,161200,161201],{"class":179},"\"可以享受优惠\"",[162,161203,434],{"class":168},[3284,161205,161207],{"id":161206},"_363-not","3.6.3 not",[19,161209,161210],{},"取反。",[153,161212,161214],{"className":155,"code":161213,"language":157,"meta":158,"style":158},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[71,161215,161216,161225,161229,161238],{"__ignoreMap":158},[162,161217,161218,161221,161223],{"class":164,"line":165},[162,161219,161220],{"class":168},"is_closed ",[162,161222,173],{"class":172},[162,161224,128865],{"class":207},[162,161226,161227],{"class":164,"line":197},[162,161228,301],{"emptyLinePlaceholder":300},[162,161230,161231,161233,161235],{"class":164,"line":228},[162,161232,2703],{"class":172},[162,161234,42005],{"class":172},[162,161236,161237],{"class":168}," is_closed:\n",[162,161239,161240,161242,161244,161247],{"class":164,"line":252},[162,161241,822],{"class":207},[162,161243,604],{"class":168},[162,161245,161246],{"class":179},"\"店铺营业中\"",[162,161248,434],{"class":168},[14,161250,161252],{"id":161251},"_37-链式比较","3.7 链式比较",[19,161254,161255],{},"Python 支持链式比较：",[153,161257,161259],{"className":155,"code":161258,"language":157,"meta":158,"style":158},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[71,161260,161261,161270,161274,161291],{"__ignoreMap":158},[162,161262,161263,161265,161267],{"class":164,"line":165},[162,161264,1897],{"class":168},[162,161266,173],{"class":172},[162,161268,161269],{"class":207}," 85\n",[162,161271,161272],{"class":164,"line":197},[162,161273,301],{"emptyLinePlaceholder":300},[162,161275,161276,161278,161280,161283,161285,161287,161289],{"class":164,"line":228},[162,161277,2703],{"class":172},[162,161279,2717],{"class":207},[162,161281,161282],{"class":172}," \u003C=",[162,161284,913],{"class":168},[162,161286,4725],{"class":172},[162,161288,8861],{"class":207},[162,161290,2316],{"class":168},[162,161292,161293,161295,161297,161300],{"class":164,"line":252},[162,161294,822],{"class":207},[162,161296,604],{"class":168},[162,161298,161299],{"class":179},"\"成绩合法\"",[162,161301,434],{"class":168},[19,161303,161304],{},"等价于：",[153,161306,161308],{"className":155,"code":161307,"language":157,"meta":158,"style":158},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[71,161309,161310,161330],{"__ignoreMap":158},[162,161311,161312,161314,161316,161318,161320,161322,161324,161326,161328],{"class":164,"line":165},[162,161313,2703],{"class":172},[162,161315,913],{"class":168},[162,161317,3038],{"class":172},[162,161319,2717],{"class":207},[162,161321,123487],{"class":172},[162,161323,913],{"class":168},[162,161325,4725],{"class":172},[162,161327,8861],{"class":207},[162,161329,2316],{"class":168},[162,161331,161332,161334,161336,161338],{"class":164,"line":197},[162,161333,822],{"class":207},[162,161335,604],{"class":168},[162,161337,161299],{"class":179},[162,161339,434],{"class":168},[14,161341,161343],{"id":161342},"_38-真值和假值","3.8 真值和假值",[19,161345,119526,161346,161348],{},[71,161347,2703],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,161350,161351],{},"假值：",[153,161353,161355],{"className":155,"code":161354,"language":157,"meta":158,"style":158},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[71,161356,161357,161361,161366,161370,161374,161379,161383,161387,161392],{"__ignoreMap":158},[162,161358,161359],{"class":164,"line":165},[162,161360,160549],{"class":207},[162,161362,161363],{"class":164,"line":197},[162,161364,161365],{"class":207},"None\n",[162,161367,161368],{"class":164,"line":228},[162,161369,6200],{"class":207},[162,161371,161372],{"class":164,"line":252},[162,161373,35421],{"class":207},[162,161375,161376],{"class":164,"line":328},[162,161377,161378],{"class":179},"\"\"\n",[162,161380,161381],{"class":164,"line":466},[162,161382,35436],{"class":168},[162,161384,161385],{"class":164,"line":471},[162,161386,1526],{"class":168},[162,161388,161389],{"class":164,"line":687},[162,161390,161391],{"class":168},"{}\n",[162,161393,161394,161396],{"class":164,"line":692},[162,161395,2526],{"class":207},[162,161397,1526],{"class":168},[19,161399,18228],{},[153,161401,161403],{"className":155,"code":161402,"language":157,"meta":158,"style":158},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[71,161404,161405,161419,161423,161430,161450,161456],{"__ignoreMap":158},[162,161406,161407,161409,161411,161413,161415,161417],{"class":164,"line":165},[162,161408,149594],{"class":168},[162,161410,173],{"class":172},[162,161412,2257],{"class":207},[162,161414,604],{"class":168},[162,161416,155425],{"class":179},[162,161418,434],{"class":168},[162,161420,161421],{"class":164,"line":197},[162,161422,301],{"emptyLinePlaceholder":300},[162,161424,161425,161427],{"class":164,"line":228},[162,161426,2703],{"class":172},[162,161428,161429],{"class":168}," name:\n",[162,161431,161432,161434,161436,161438,161440,161442,161444,161446,161448],{"class":164,"line":252},[162,161433,822],{"class":207},[162,161435,604],{"class":168},[162,161437,961],{"class":172},[162,161439,160088],{"class":179},[162,161441,967],{"class":207},[162,161443,82875],{"class":168},[162,161445,976],{"class":207},[162,161447,979],{"class":179},[162,161449,434],{"class":168},[162,161451,161452,161454],{"class":164,"line":328},[162,161453,2313],{"class":172},[162,161455,2316],{"class":168},[162,161457,161458,161460,161462,161465],{"class":164,"line":466},[162,161459,822],{"class":207},[162,161461,604],{"class":168},[162,161463,161464],{"class":179},"\"姓名不能为空\"",[162,161466,434],{"class":168},[14,161468,161470],{"id":161469},"_39-match语句","3.9 match语句",[19,161472,161473,161474,161476],{},"Python 3.10 开始支持 ",[71,161475,74330],{},"。它适合处理固定选项。",[153,161478,161480],{"className":155,"code":161479,"language":157,"meta":158,"style":158},"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",[71,161481,161482,161498,161502,161509,161519,161530,161539,161550,161559,161570,161577],{"__ignoreMap":158},[162,161483,161484,161487,161489,161491,161493,161496],{"class":164,"line":165},[162,161485,161486],{"class":168},"command ",[162,161488,173],{"class":172},[162,161490,2257],{"class":207},[162,161492,604],{"class":168},[162,161494,161495],{"class":179},"\"请输入命令:\"",[162,161497,434],{"class":168},[162,161499,161500],{"class":164,"line":197},[162,161501,301],{"emptyLinePlaceholder":300},[162,161503,161504,161506],{"class":164,"line":228},[162,161505,74330],{"class":172},[162,161507,161508],{"class":168}," command:\n",[162,161510,161511,161514,161517],{"class":164,"line":252},[162,161512,161513],{"class":172},"    case",[162,161515,161516],{"class":179}," \"start\"",[162,161518,2316],{"class":168},[162,161520,161521,161523,161525,161528],{"class":164,"line":328},[162,161522,2300],{"class":207},[162,161524,604],{"class":168},[162,161526,161527],{"class":179},"\"启动\"",[162,161529,434],{"class":168},[162,161531,161532,161534,161537],{"class":164,"line":466},[162,161533,161513],{"class":172},[162,161535,161536],{"class":179}," \"stop\"",[162,161538,2316],{"class":168},[162,161540,161541,161543,161545,161548],{"class":164,"line":471},[162,161542,2300],{"class":207},[162,161544,604],{"class":168},[162,161546,161547],{"class":179},"\"停止\"",[162,161549,434],{"class":168},[162,161551,161552,161554,161557],{"class":164,"line":687},[162,161553,161513],{"class":172},[162,161555,161556],{"class":179}," \"restart\"",[162,161558,2316],{"class":168},[162,161560,161561,161563,161565,161568],{"class":164,"line":692},[162,161562,2300],{"class":207},[162,161564,604],{"class":168},[162,161566,161567],{"class":179},"\"重启\"",[162,161569,434],{"class":168},[162,161571,161572,161574],{"class":164,"line":698},[162,161573,161513],{"class":172},[162,161575,161576],{"class":168}," _:\n",[162,161578,161579,161581,161583,161586],{"class":164,"line":2955},[162,161580,2300],{"class":207},[162,161582,604],{"class":168},[162,161584,161585],{"class":179},"\"未知命令\"",[162,161587,434],{"class":168},[19,161589,161590,161591,161593,161594,161596],{},"入门阶段掌握 ",[71,161592,157700],{}," 更重要，",[71,161595,74330],{}," 可以作为补充。",[14,161598,161600],{"id":161599},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,161602,126350],{},[1452,161604,161605,161608,161611],{},[1455,161606,161607],{},"输入成绩。",[1455,161609,161610],{},"判断成绩是否合法。",[1455,161612,161613],{},"输出等级。",[19,161615,13135],{},[153,161617,161619],{"className":155,"code":161618,"language":157,"meta":158,"style":158},"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",[71,161620,161621,161639,161643,161661,161672,161684,161695,161707,161718,161731,161742,161754,161765,161771],{"__ignoreMap":158},[162,161622,161623,161625,161627,161629,161631,161633,161635,161637],{"class":164,"line":165},[162,161624,1897],{"class":168},[162,161626,173],{"class":172},[162,161628,112858],{"class":207},[162,161630,604],{"class":168},[162,161632,56891],{"class":207},[162,161634,604],{"class":168},[162,161636,155455],{"class":179},[162,161638,586],{"class":168},[162,161640,161641],{"class":164,"line":197},[162,161642,301],{"emptyLinePlaceholder":300},[162,161644,161645,161647,161649,161651,161653,161655,161657,161659],{"class":164,"line":228},[162,161646,2703],{"class":172},[162,161648,42005],{"class":172},[162,161650,2717],{"class":207},[162,161652,161282],{"class":172},[162,161654,913],{"class":168},[162,161656,4725],{"class":172},[162,161658,8861],{"class":207},[162,161660,2316],{"class":168},[162,161662,161663,161665,161667,161670],{"class":164,"line":252},[162,161664,822],{"class":207},[162,161666,604],{"class":168},[162,161668,161669],{"class":179},"\"成绩不合法\"",[162,161671,434],{"class":168},[162,161673,161674,161676,161678,161680,161682],{"class":164,"line":328},[162,161675,160837],{"class":172},[162,161677,913],{"class":168},[162,161679,3038],{"class":172},[162,161681,160819],{"class":207},[162,161683,2316],{"class":168},[162,161685,161686,161688,161690,161693],{"class":164,"line":466},[162,161687,822],{"class":207},[162,161689,604],{"class":168},[162,161691,161692],{"class":179},"\"等级:A\"",[162,161694,434],{"class":168},[162,161696,161697,161699,161701,161703,161705],{"class":164,"line":471},[162,161698,160837],{"class":172},[162,161700,913],{"class":168},[162,161702,3038],{"class":172},[162,161704,160844],{"class":207},[162,161706,2316],{"class":168},[162,161708,161709,161711,161713,161716],{"class":164,"line":687},[162,161710,822],{"class":207},[162,161712,604],{"class":168},[162,161714,161715],{"class":179},"\"等级:B\"",[162,161717,434],{"class":168},[162,161719,161720,161722,161724,161726,161729],{"class":164,"line":692},[162,161721,160837],{"class":172},[162,161723,913],{"class":168},[162,161725,3038],{"class":172},[162,161727,161728],{"class":207}," 70",[162,161730,2316],{"class":168},[162,161732,161733,161735,161737,161740],{"class":164,"line":698},[162,161734,822],{"class":207},[162,161736,604],{"class":168},[162,161738,161739],{"class":179},"\"等级:C\"",[162,161741,434],{"class":168},[162,161743,161744,161746,161748,161750,161752],{"class":164,"line":2955},[162,161745,160837],{"class":172},[162,161747,913],{"class":168},[162,161749,3038],{"class":172},[162,161751,3041],{"class":207},[162,161753,2316],{"class":168},[162,161755,161756,161758,161760,161763],{"class":164,"line":2960},[162,161757,822],{"class":207},[162,161759,604],{"class":168},[162,161761,161762],{"class":179},"\"等级:D\"",[162,161764,434],{"class":168},[162,161766,161767,161769],{"class":164,"line":2971},[162,161768,2313],{"class":172},[162,161770,2316],{"class":168},[162,161772,161773,161775,161777,161780],{"class":164,"line":2984},[162,161774,822],{"class":207},[162,161776,604],{"class":168},[162,161778,161779],{"class":179},"\"等级:E\"",[162,161781,434],{"class":168},[14,161783,161785],{"id":161784},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,161787,126350],{},[1452,161789,161790,161793,161796,161799],{},[1455,161791,161792],{},"输入消费金额。",[1455,161794,161795],{},"输入会员等级，普通、银卡、金卡。",[1455,161797,161798],{},"普通不打折，银卡 9 折，金卡 8 折。",[1455,161800,161801],{},"满 500 再减 50。",[19,161803,13135],{},[153,161805,161807],{"className":155,"code":161806,"language":157,"meta":158,"style":158},"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",[71,161808,161809,161829,161845,161849,161857,161861,161875,161885,161898,161907,161920,161928,161934,161945,161949,161963,161967,161981,161991,161995],{"__ignoreMap":158},[162,161810,161811,161814,161816,161818,161820,161822,161824,161827],{"class":164,"line":165},[162,161812,161813],{"class":168},"amount ",[162,161815,173],{"class":172},[162,161817,112858],{"class":207},[162,161819,604],{"class":168},[162,161821,56891],{"class":207},[162,161823,604],{"class":168},[162,161825,161826],{"class":179},"\"请输入消费金额:\"",[162,161828,586],{"class":168},[162,161830,161831,161834,161836,161838,161840,161843],{"class":164,"line":197},[162,161832,161833],{"class":168},"level ",[162,161835,173],{"class":172},[162,161837,2257],{"class":207},[162,161839,604],{"class":168},[162,161841,161842],{"class":179},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[162,161844,434],{"class":168},[162,161846,161847],{"class":164,"line":228},[162,161848,301],{"emptyLinePlaceholder":300},[162,161850,161851,161853,161855],{"class":164,"line":252},[162,161852,160269],{"class":168},[162,161854,173],{"class":172},[162,161856,58768],{"class":207},[162,161858,161859],{"class":164,"line":328},[162,161860,301],{"emptyLinePlaceholder":300},[162,161862,161863,161865,161868,161870,161873],{"class":164,"line":466},[162,161864,2703],{"class":172},[162,161866,161867],{"class":168}," level ",[162,161869,2292],{"class":172},[162,161871,161872],{"class":179}," \"银卡\"",[162,161874,2316],{"class":168},[162,161876,161877,161880,161882],{"class":164,"line":471},[162,161878,161879],{"class":168},"    discount ",[162,161881,173],{"class":172},[162,161883,161884],{"class":207}," 0.9\n",[162,161886,161887,161889,161891,161893,161896],{"class":164,"line":687},[162,161888,160837],{"class":172},[162,161890,161867],{"class":168},[162,161892,2292],{"class":172},[162,161894,161895],{"class":179}," \"金卡\"",[162,161897,2316],{"class":168},[162,161899,161900,161902,161904],{"class":164,"line":692},[162,161901,161879],{"class":168},[162,161903,173],{"class":172},[162,161905,161906],{"class":207}," 0.8\n",[162,161908,161909,161911,161913,161915,161918],{"class":164,"line":698},[162,161910,160837],{"class":172},[162,161912,161867],{"class":168},[162,161914,2292],{"class":172},[162,161916,161917],{"class":179}," \"普通\"",[162,161919,2316],{"class":168},[162,161921,161922,161924,161926],{"class":164,"line":2955},[162,161923,161879],{"class":168},[162,161925,173],{"class":172},[162,161927,58768],{"class":207},[162,161929,161930,161932],{"class":164,"line":2960},[162,161931,2313],{"class":172},[162,161933,2316],{"class":168},[162,161935,161936,161938,161940,161943],{"class":164,"line":2971},[162,161937,822],{"class":207},[162,161939,604],{"class":168},[162,161941,161942],{"class":179},"\"会员等级输入错误，按普通会员计算\"",[162,161944,434],{"class":168},[162,161946,161947],{"class":164,"line":2984},[162,161948,301],{"emptyLinePlaceholder":300},[162,161950,161951,161954,161956,161959,161961],{"class":164,"line":2989},[162,161952,161953],{"class":168},"pay ",[162,161955,173],{"class":172},[162,161957,161958],{"class":168}," amount ",[162,161960,3745],{"class":172},[162,161962,160307],{"class":168},[162,161964,161965],{"class":164,"line":3011},[162,161966,301],{"emptyLinePlaceholder":300},[162,161968,161969,161971,161974,161976,161979],{"class":164,"line":3022},[162,161970,2703],{"class":172},[162,161972,161973],{"class":168}," pay ",[162,161975,3038],{"class":172},[162,161977,161978],{"class":207}," 500",[162,161980,2316],{"class":168},[162,161982,161983,161986,161988],{"class":164,"line":3027},[162,161984,161985],{"class":168},"    pay ",[162,161987,153305],{"class":172},[162,161989,161990],{"class":207}," 50\n",[162,161992,161993],{"class":164,"line":3046},[162,161994,301],{"emptyLinePlaceholder":300},[162,161996,161997,161999,162001,162003,162005,162007,162010,162012,162014,162016],{"class":164,"line":3052},[162,161998,306],{"class":207},[162,162000,604],{"class":168},[162,162002,961],{"class":172},[162,162004,160388],{"class":179},[162,162006,967],{"class":207},[162,162008,162009],{"class":168},"pay",[162,162011,973],{"class":172},[162,162013,976],{"class":207},[162,162015,160046],{"class":179},[162,162017,434],{"class":168},[14,162019,162021],{"id":162020},"_312-易错点","3.12 易错点",[1452,162023,162024,162027,162030,162033,162038],{},[1455,162025,162026],{},"冒号不能漏。",[1455,162028,162029],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[1455,162031,162032],{},"多分支判断要注意顺序。",[1455,162034,162035,162036,3183],{},"判断相等用 ",[71,162037,2292],{},[1455,162039,162040],{},"字符串比较区分大小写：",[153,162042,162044],{"className":155,"code":162043,"language":157,"meta":158,"style":158},"\"Y\" == \"y\"  # False\n",[71,162045,162046],{"__ignoreMap":158},[162,162047,162048,162051,162053,162055],{"class":164,"line":165},[162,162049,162050],{"class":179},"\"Y\"",[162,162052,2714],{"class":172},[162,162054,161035],{"class":179},[162,162056,162057],{"class":361},"  # False\n",[19,162059,162060],{},"可转换后再判断：",[153,162062,162064],{"className":155,"code":162063,"language":157,"meta":158,"style":158},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[71,162065,162066,162083,162096],{"__ignoreMap":158},[162,162067,162068,162071,162073,162075,162077,162080],{"class":164,"line":165},[162,162069,162070],{"class":168},"answer ",[162,162072,173],{"class":172},[162,162074,2257],{"class":207},[162,162076,604],{"class":168},[162,162078,162079],{"class":179},"\"是否继续(y\u002Fn):\"",[162,162081,162082],{"class":168},").lower()\n",[162,162084,162085,162087,162090,162092,162094],{"class":164,"line":197},[162,162086,2703],{"class":172},[162,162088,162089],{"class":168}," answer ",[162,162091,2292],{"class":172},[162,162093,161035],{"class":179},[162,162095,2316],{"class":168},[162,162097,162098,162100,162102,162105],{"class":164,"line":228},[162,162099,822],{"class":207},[162,162101,604],{"class":168},[162,162103,162104],{"class":179},"\"继续\"",[162,162106,434],{"class":168},[14,162108,162110],{"id":162109},"_313-本章练习","3.13 本章练习",[1452,162112,162113,162116,162119,162122,162132],{},[1455,162114,162115],{},"输入年龄，判断是否成年。",[1455,162117,162118],{},"输入年份，判断是否为闰年。",[1455,162120,162121],{},"输入三个数字，输出最大值。",[1455,162123,162124,162125,162128,162129,162131],{},"写登录判断：用户名是 ",[71,162126,162127],{},"admin"," 且密码是 ",[71,162130,18177],{}," 才登录成功。",[1455,162133,162134],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[3219,162136,162137],{},"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":158,"searchDepth":197,"depth":197,"links":162139},[162140,162141,162142,162143,162144,162145,162150,162151,162152,162153,162154,162155,162156],{"id":160530,"depth":197,"text":160531},{"id":160583,"depth":197,"text":160584},{"id":160687,"depth":197,"text":160688},{"id":160777,"depth":197,"text":160778},{"id":160965,"depth":197,"text":160966},{"id":161088,"depth":197,"text":161089,"children":162146},[162147,162148,162149],{"id":161092,"depth":228,"text":161093},{"id":161149,"depth":228,"text":161150},{"id":161206,"depth":228,"text":161207},{"id":161251,"depth":197,"text":161252},{"id":161342,"depth":197,"text":161343},{"id":161469,"depth":197,"text":161470},{"id":161599,"depth":197,"text":161600},{"id":161784,"depth":197,"text":161785},{"id":162020,"depth":197,"text":162021},{"id":162109,"depth":197,"text":162110},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":160522,"description":3241},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":162163,"title":162164,"body":162165,"description":3241,"extension":3242,"meta":163924,"navigation":300,"path":163925,"seo":163926,"stem":163927,"__hash__":163928},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":162166,"toc":163904},[162167,162170,162174,162180,162183,162200,162204,162206,162223,162225,162270,162272,162289,162293,162296,162361,162364,162382,162386,162547,162556,162560,162564,162569,162616,162618,162624,162628,162633,162680,162682,162688,162692,162697,162730,162733,162778,162782,162788,162846,162851,162882,162887,162891,162946,162949,163021,163024,163083,163087,163090,163165,163168,163172,163278,163281,163307,163311,163323,163392,163395,163483,163487,163489,163500,163502,163632,163636,163838,163846,163850,163880,163884,163901],[10,162168,162164],{"id":162169},"_4-循环语句",[14,162171,162173],{"id":162172},"_41-为什么需要循环","4.1 为什么需要循环",[19,162175,162176,162177,162179],{},"如果要输出 1 到 100，不应该写 100 行 ",[71,162178,149530],{},"，而应该用循环。",[19,162181,162182],{},"循环适合处理重复任务：",[1452,162184,162185,162188,162191,162194,162197],{},[1455,162186,162187],{},"重复输出。",[1455,162189,162190],{},"重复输入。",[1455,162192,162193],{},"遍历数据。",[1455,162195,162196],{},"持续执行菜单。",[1455,162198,162199],{},"批量处理文件或数据。",[14,162201,162203],{"id":162202},"_42-while循环","4.2 while循环",[19,162205,8289],{},[153,162207,162209],{"className":155,"code":162208,"language":157,"meta":158,"style":158},"while 条件:\n    循环体\n",[71,162210,162211,162218],{"__ignoreMap":158},[162,162212,162213,162215],{"class":164,"line":165},[162,162214,111724],{"class":172},[162,162216,162217],{"class":168}," 条件:\n",[162,162219,162220],{"class":164,"line":197},[162,162221,162222],{"class":168},"    循环体\n",[19,162224,18228],{},[153,162226,162228],{"className":155,"code":162227,"language":157,"meta":158,"style":158},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[71,162229,162230,162238,162242,162254,162261],{"__ignoreMap":158},[162,162231,162232,162234,162236],{"class":164,"line":165},[162,162233,103212],{"class":168},[162,162235,173],{"class":172},[162,162237,58768],{"class":207},[162,162239,162240],{"class":164,"line":197},[162,162241,301],{"emptyLinePlaceholder":300},[162,162243,162244,162246,162248,162250,162252],{"class":164,"line":228},[162,162245,111724],{"class":172},[162,162247,2642],{"class":168},[162,162249,4725],{"class":172},[162,162251,5266],{"class":207},[162,162253,2316],{"class":168},[162,162255,162256,162258],{"class":164,"line":252},[162,162257,822],{"class":207},[162,162259,162260],{"class":168},"(i)\n",[162,162262,162263,162266,162268],{"class":164,"line":328},[162,162264,162265],{"class":168},"    i ",[162,162267,926],{"class":172},[162,162269,58768],{"class":207},[19,162271,83994],{},[1452,162273,162274,162280,162283,162286],{},[1455,162275,162276,162277,3183],{},"判断条件 ",[71,162278,162279],{},"i \u003C= 5",[1455,162281,162282],{},"条件成立，执行循环体。",[1455,162284,162285],{},"执行完后回到条件判断。",[1455,162287,162288],{},"条件不成立，退出循环。",[14,162290,162292],{"id":162291},"_43-while累加","4.3 while累加",[19,162294,162295],{},"计算 1 到 100 的和：",[153,162297,162299],{"className":155,"code":162298,"language":157,"meta":158,"style":158},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[71,162300,162301,162309,162317,162321,162333,162342,162350,162354],{"__ignoreMap":158},[162,162302,162303,162305,162307],{"class":164,"line":165},[162,162304,103212],{"class":168},[162,162306,173],{"class":172},[162,162308,58768],{"class":207},[162,162310,162311,162313,162315],{"class":164,"line":197},[162,162312,897],{"class":168},[162,162314,173],{"class":172},[162,162316,902],{"class":207},[162,162318,162319],{"class":164,"line":228},[162,162320,301],{"emptyLinePlaceholder":300},[162,162322,162323,162325,162327,162329,162331],{"class":164,"line":252},[162,162324,111724],{"class":172},[162,162326,2642],{"class":168},[162,162328,4725],{"class":172},[162,162330,8861],{"class":207},[162,162332,2316],{"class":168},[162,162334,162335,162337,162339],{"class":164,"line":328},[162,162336,923],{"class":168},[162,162338,926],{"class":172},[162,162340,162341],{"class":168}," i\n",[162,162343,162344,162346,162348],{"class":164,"line":466},[162,162345,162265],{"class":168},[162,162347,926],{"class":172},[162,162349,58768],{"class":207},[162,162351,162352],{"class":164,"line":471},[162,162353,301],{"emptyLinePlaceholder":300},[162,162355,162356,162358],{"class":164,"line":687},[162,162357,306],{"class":207},[162,162359,162360],{"class":168},"(total)\n",[19,162362,162363],{},"核心思想：",[1452,162365,162366,162371,162376],{},[1455,162367,162368,162370],{},[71,162369,3732],{}," 控制循环次数。",[1455,162372,162373,162375],{},[71,162374,160393],{}," 保存累加结果。",[1455,162377,162378,162379,162381],{},"每轮循环都要更新 ",[71,162380,3732],{},"，否则可能死循环。",[14,162383,162385],{"id":162384},"_44-while猜数字","4.4 while猜数字",[153,162387,162389],{"className":155,"code":162388,"language":157,"meta":158,"style":158},"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",[71,162390,162391,162397,162401,162418,162426,162430,162438,162458,162467,162471,162483,162494,162504,162515,162521,162543],{"__ignoreMap":158},[162,162392,162393,162395],{"class":164,"line":165},[162,162394,33478],{"class":172},[162,162396,48403],{"class":168},[162,162398,162399],{"class":164,"line":197},[162,162400,301],{"emptyLinePlaceholder":300},[162,162402,162403,162405,162407,162410,162412,162414,162416],{"class":164,"line":228},[162,162404,162070],{"class":168},[162,162406,173],{"class":172},[162,162408,162409],{"class":168}," random.randint(",[162,162411,208],{"class":207},[162,162413,183],{"class":168},[162,162415,3608],{"class":207},[162,162417,434],{"class":168},[162,162419,162420,162422,162424],{"class":164,"line":252},[162,162421,149749],{"class":168},[162,162423,173],{"class":172},[162,162425,902],{"class":207},[162,162427,162428],{"class":164,"line":328},[162,162429,301],{"emptyLinePlaceholder":300},[162,162431,162432,162434,162436],{"class":164,"line":466},[162,162433,111724],{"class":172},[162,162435,98357],{"class":207},[162,162437,2316],{"class":168},[162,162439,162440,162443,162445,162447,162449,162451,162453,162456],{"class":164,"line":471},[162,162441,162442],{"class":168},"    guess ",[162,162444,173],{"class":172},[162,162446,5500],{"class":207},[162,162448,604],{"class":168},[162,162450,56891],{"class":207},[162,162452,604],{"class":168},[162,162454,162455],{"class":179},"\"请输入1到100之间的数字:\"",[162,162457,586],{"class":168},[162,162459,162460,162463,162465],{"class":164,"line":687},[162,162461,162462],{"class":168},"    count ",[162,162464,926],{"class":172},[162,162466,58768],{"class":207},[162,162468,162469],{"class":164,"line":692},[162,162470,301],{"emptyLinePlaceholder":300},[162,162472,162473,162475,162478,162480],{"class":164,"line":698},[162,162474,2283],{"class":172},[162,162476,162477],{"class":168}," guess ",[162,162479,3000],{"class":172},[162,162481,162482],{"class":168}," answer:\n",[162,162484,162485,162487,162489,162492],{"class":164,"line":2955},[162,162486,2300],{"class":207},[162,162488,604],{"class":168},[162,162490,162491],{"class":179},"\"猜大了\"",[162,162493,434],{"class":168},[162,162495,162496,162498,162500,162502],{"class":164,"line":2960},[162,162497,42368],{"class":172},[162,162499,162477],{"class":168},[162,162501,4187],{"class":172},[162,162503,162482],{"class":168},[162,162505,162506,162508,162510,162513],{"class":164,"line":2971},[162,162507,2300],{"class":207},[162,162509,604],{"class":168},[162,162511,162512],{"class":179},"\"猜小了\"",[162,162514,434],{"class":168},[162,162516,162517,162519],{"class":164,"line":2984},[162,162518,161052],{"class":172},[162,162520,2316],{"class":168},[162,162522,162523,162525,162527,162529,162532,162534,162536,162538,162541],{"class":164,"line":2989},[162,162524,2300],{"class":207},[162,162526,604],{"class":168},[162,162528,961],{"class":172},[162,162530,162531],{"class":179},"\"猜对了，一共猜了",[162,162533,967],{"class":207},[162,162535,87499],{"class":168},[162,162537,976],{"class":207},[162,162539,162540],{"class":179},"次\"",[162,162542,434],{"class":168},[162,162544,162545],{"class":164,"line":3011},[162,162546,2308],{"class":172},[19,162548,162549,162552,162553,162555],{},[71,162550,162551],{},"while True"," 表示无限循环，通常配合 ",[71,162554,5171],{}," 使用。",[14,162557,162559],{"id":162558},"_45-break和continue","4.5 break和continue",[3284,162561,162563],{"id":162562},"_451-break","4.5.1 break",[19,162565,162566,162568],{},[71,162567,5171],{}," 直接结束整个循环。",[153,162570,162572],{"className":155,"code":162571,"language":157,"meta":158,"style":158},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[71,162573,162574,162594,162606,162610],{"__ignoreMap":158},[162,162575,162576,162578,162580,162582,162584,162586,162588,162590,162592],{"class":164,"line":165},[162,162577,808],{"class":172},[162,162579,2642],{"class":168},[162,162581,814],{"class":172},[162,162583,2647],{"class":207},[162,162585,604],{"class":168},[162,162587,208],{"class":207},[162,162589,183],{"class":168},[162,162591,1314],{"class":207},[162,162593,33870],{"class":168},[162,162595,162596,162598,162600,162602,162604],{"class":164,"line":197},[162,162597,2283],{"class":172},[162,162599,2642],{"class":168},[162,162601,2292],{"class":172},[162,162603,81135],{"class":207},[162,162605,2316],{"class":168},[162,162607,162608],{"class":164,"line":228},[162,162609,2308],{"class":172},[162,162611,162612,162614],{"class":164,"line":252},[162,162613,822],{"class":207},[162,162615,162260],{"class":168},[19,162617,149515],{},[153,162619,162622],{"className":162620,"code":162621,"language":8295,"meta":158},[8293],"1\n2\n",[71,162623,162621],{"__ignoreMap":158},[3284,162625,162627],{"id":162626},"_452-continue","4.5.2 continue",[19,162629,162630,162632],{},[71,162631,157714],{}," 跳过本轮剩余代码，进入下一轮循环。",[153,162634,162636],{"className":155,"code":162635,"language":157,"meta":158,"style":158},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[71,162637,162638,162658,162670,162674],{"__ignoreMap":158},[162,162639,162640,162642,162644,162646,162648,162650,162652,162654,162656],{"class":164,"line":165},[162,162641,808],{"class":172},[162,162643,2642],{"class":168},[162,162645,814],{"class":172},[162,162647,2647],{"class":207},[162,162649,604],{"class":168},[162,162651,208],{"class":207},[162,162653,183],{"class":168},[162,162655,1314],{"class":207},[162,162657,33870],{"class":168},[162,162659,162660,162662,162664,162666,162668],{"class":164,"line":197},[162,162661,2283],{"class":172},[162,162663,2642],{"class":168},[162,162665,2292],{"class":172},[162,162667,81135],{"class":207},[162,162669,2316],{"class":168},[162,162671,162672],{"class":164,"line":228},[162,162673,151568],{"class":172},[162,162675,162676,162678],{"class":164,"line":252},[162,162677,822],{"class":207},[162,162679,162260],{"class":168},[19,162681,149515],{},[153,162683,162686],{"className":162684,"code":162685,"language":8295,"meta":158},[8293],"1\n2\n4\n5\n",[71,162687,162685],{"__ignoreMap":158},[14,162689,162691],{"id":162690},"_46-for循环","4.6 for循环",[19,162693,162694,162696],{},[71,162695,808],{}," 常用于遍历序列。",[153,162698,162700],{"className":155,"code":162699,"language":157,"meta":158,"style":158},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[71,162701,162702,162710,162714,162724],{"__ignoreMap":158},[162,162703,162704,162706,162708],{"class":164,"line":165},[162,162705,149594],{"class":168},[162,162707,173],{"class":172},[162,162709,1128],{"class":179},[162,162711,162712],{"class":164,"line":197},[162,162713,301],{"emptyLinePlaceholder":300},[162,162715,162716,162718,162720,162722],{"class":164,"line":228},[162,162717,808],{"class":172},[162,162719,1166],{"class":168},[162,162721,814],{"class":172},[162,162723,161429],{"class":168},[162,162725,162726,162728],{"class":164,"line":252},[162,162727,822],{"class":207},[162,162729,1178],{"class":168},[19,162731,162732],{},"遍历列表：",[153,162734,162736],{"className":155,"code":162735,"language":157,"meta":158,"style":158},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[71,162737,162738,162758,162762,162772],{"__ignoreMap":158},[162,162739,162740,162742,162744,162746,162748,162750,162752,162754,162756],{"class":164,"line":165},[162,162741,2025],{"class":168},[162,162743,173],{"class":172},[162,162745,176],{"class":168},[162,162747,180],{"class":179},[162,162749,183],{"class":168},[162,162751,186],{"class":179},[162,162753,183],{"class":168},[162,162755,191],{"class":179},[162,162757,194],{"class":168},[162,162759,162760],{"class":164,"line":197},[162,162761,301],{"emptyLinePlaceholder":300},[162,162763,162764,162766,162768,162770],{"class":164,"line":228},[162,162765,808],{"class":172},[162,162767,2136],{"class":168},[162,162769,814],{"class":172},[162,162771,2141],{"class":168},[162,162773,162774,162776],{"class":164,"line":252},[162,162775,822],{"class":207},[162,162777,2303],{"class":168},[14,162779,162781],{"id":162780},"_47-range函数","4.7 range函数",[19,162783,162784,162787],{},[71,162785,162786],{},"range()"," 用于生成整数序列。",[153,162789,162791],{"className":155,"code":162790,"language":157,"meta":158,"style":158},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[71,162792,162793,162807,162825],{"__ignoreMap":158},[162,162794,162795,162797,162799,162801,162804],{"class":164,"line":165},[162,162796,36491],{"class":207},[162,162798,604],{"class":168},[162,162800,637],{"class":207},[162,162802,162803],{"class":168},")          ",[162,162805,162806],{"class":361},"# 0,1,2,3,4\n",[162,162808,162809,162811,162813,162815,162817,162819,162822],{"class":164,"line":197},[162,162810,36491],{"class":207},[162,162812,604],{"class":168},[162,162814,208],{"class":207},[162,162816,183],{"class":168},[162,162818,637],{"class":207},[162,162820,162821],{"class":168},")       ",[162,162823,162824],{"class":361},"# 1,2,3,4\n",[162,162826,162827,162829,162831,162833,162835,162837,162839,162841,162843],{"class":164,"line":228},[162,162828,36491],{"class":207},[162,162830,604],{"class":168},[162,162832,208],{"class":207},[162,162834,183],{"class":168},[162,162836,1006],{"class":207},[162,162838,183],{"class":168},[162,162840,213],{"class":207},[162,162842,158697],{"class":168},[162,162844,162845],{"class":361},"# 1,3,5,7,9\n",[19,162847,162848,162849,27710],{},"配合 ",[71,162850,808],{},[153,162852,162854],{"className":155,"code":162853,"language":157,"meta":158,"style":158},"for i in range(1, 6):\n    print(i)\n",[71,162855,162856,162876],{"__ignoreMap":158},[162,162857,162858,162860,162862,162864,162866,162868,162870,162872,162874],{"class":164,"line":165},[162,162859,808],{"class":172},[162,162861,2642],{"class":168},[162,162863,814],{"class":172},[162,162865,2647],{"class":207},[162,162867,604],{"class":168},[162,162869,208],{"class":207},[162,162871,183],{"class":168},[162,162873,1314],{"class":207},[162,162875,33870],{"class":168},[162,162877,162878,162880],{"class":164,"line":197},[162,162879,822],{"class":207},[162,162881,162260],{"class":168},[19,162883,1529,162884,162886],{},[71,162885,36491],{}," 的结束值不包含在内。",[14,162888,162890],{"id":162889},"_48-for循环求和","4.8 for循环求和",[153,162892,162894],{"className":155,"code":162893,"language":157,"meta":158,"style":158},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[71,162895,162896,162904,162908,162928,162936,162940],{"__ignoreMap":158},[162,162897,162898,162900,162902],{"class":164,"line":165},[162,162899,897],{"class":168},[162,162901,173],{"class":172},[162,162903,902],{"class":207},[162,162905,162906],{"class":164,"line":197},[162,162907,301],{"emptyLinePlaceholder":300},[162,162909,162910,162912,162914,162916,162918,162920,162922,162924,162926],{"class":164,"line":228},[162,162911,808],{"class":172},[162,162913,2642],{"class":168},[162,162915,814],{"class":172},[162,162917,2647],{"class":207},[162,162919,604],{"class":168},[162,162921,208],{"class":207},[162,162923,183],{"class":168},[162,162925,2698],{"class":207},[162,162927,33870],{"class":168},[162,162929,162930,162932,162934],{"class":164,"line":252},[162,162931,923],{"class":168},[162,162933,926],{"class":172},[162,162935,162341],{"class":168},[162,162937,162938],{"class":164,"line":328},[162,162939,301],{"emptyLinePlaceholder":300},[162,162941,162942,162944],{"class":164,"line":466},[162,162943,306],{"class":207},[162,162945,162360],{"class":168},[19,162947,162948],{},"求偶数和：",[153,162950,162952],{"className":155,"code":162951,"language":157,"meta":158,"style":158},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[71,162953,162954,162962,162966,162986,163002,163011,163015],{"__ignoreMap":158},[162,162955,162956,162958,162960],{"class":164,"line":165},[162,162957,897],{"class":168},[162,162959,173],{"class":172},[162,162961,902],{"class":207},[162,162963,162964],{"class":164,"line":197},[162,162965,301],{"emptyLinePlaceholder":300},[162,162967,162968,162970,162972,162974,162976,162978,162980,162982,162984],{"class":164,"line":228},[162,162969,808],{"class":172},[162,162971,2642],{"class":168},[162,162973,814],{"class":172},[162,162975,2647],{"class":207},[162,162977,604],{"class":168},[162,162979,208],{"class":207},[162,162981,183],{"class":168},[162,162983,2698],{"class":207},[162,162985,33870],{"class":168},[162,162987,162988,162990,162992,162994,162996,162998,163000],{"class":164,"line":252},[162,162989,2283],{"class":172},[162,162991,2642],{"class":168},[162,162993,2708],{"class":172},[162,162995,2711],{"class":207},[162,162997,2714],{"class":172},[162,162999,2717],{"class":207},[162,163001,2316],{"class":168},[162,163003,163004,163007,163009],{"class":164,"line":328},[162,163005,163006],{"class":168},"        total ",[162,163008,926],{"class":172},[162,163010,162341],{"class":168},[162,163012,163013],{"class":164,"line":466},[162,163014,301],{"emptyLinePlaceholder":300},[162,163016,163017,163019],{"class":164,"line":471},[162,163018,306],{"class":207},[162,163020,162360],{"class":168},[19,163022,163023],{},"也可以：",[153,163025,163027],{"className":155,"code":163026,"language":157,"meta":158,"style":158},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[71,163028,163029,163037,163041,163065,163073,163077],{"__ignoreMap":158},[162,163030,163031,163033,163035],{"class":164,"line":165},[162,163032,897],{"class":168},[162,163034,173],{"class":172},[162,163036,902],{"class":207},[162,163038,163039],{"class":164,"line":197},[162,163040,301],{"emptyLinePlaceholder":300},[162,163042,163043,163045,163047,163049,163051,163053,163055,163057,163059,163061,163063],{"class":164,"line":228},[162,163044,808],{"class":172},[162,163046,2642],{"class":168},[162,163048,814],{"class":172},[162,163050,2647],{"class":207},[162,163052,604],{"class":168},[162,163054,213],{"class":207},[162,163056,183],{"class":168},[162,163058,2698],{"class":207},[162,163060,183],{"class":168},[162,163062,213],{"class":207},[162,163064,33870],{"class":168},[162,163066,163067,163069,163071],{"class":164,"line":252},[162,163068,923],{"class":168},[162,163070,926],{"class":172},[162,163072,162341],{"class":168},[162,163074,163075],{"class":164,"line":328},[162,163076,301],{"emptyLinePlaceholder":300},[162,163078,163079,163081],{"class":164,"line":466},[162,163080,306],{"class":207},[162,163082,162360],{"class":168},[14,163084,163086],{"id":163085},"_49-循环嵌套","4.9 循环嵌套",[19,163088,163089],{},"嵌套循环就是循环里面再写循环。",[153,163091,163093],{"className":155,"code":163092,"language":157,"meta":158,"style":158},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[71,163094,163095,163115,163135],{"__ignoreMap":158},[162,163096,163097,163099,163101,163103,163105,163107,163109,163111,163113],{"class":164,"line":165},[162,163098,808],{"class":172},[162,163100,2642],{"class":168},[162,163102,814],{"class":172},[162,163104,2647],{"class":207},[162,163106,604],{"class":168},[162,163108,208],{"class":207},[162,163110,183],{"class":168},[162,163112,223],{"class":207},[162,163114,33870],{"class":168},[162,163116,163117,163119,163121,163123,163125,163127,163129,163131,163133],{"class":164,"line":197},[162,163118,6315],{"class":172},[162,163120,12600],{"class":168},[162,163122,814],{"class":172},[162,163124,2647],{"class":207},[162,163126,604],{"class":168},[162,163128,208],{"class":207},[162,163130,183],{"class":168},[162,163132,223],{"class":207},[162,163134,33870],{"class":168},[162,163136,163137,163139,163141,163143,163146,163148,163150,163152,163155,163157,163159,163161,163163],{"class":164,"line":228},[162,163138,2300],{"class":207},[162,163140,604],{"class":168},[162,163142,961],{"class":172},[162,163144,163145],{"class":179},"\"i=",[162,163147,967],{"class":207},[162,163149,3732],{"class":168},[162,163151,976],{"class":207},[162,163153,163154],{"class":179},", j=",[162,163156,967],{"class":207},[162,163158,3757],{"class":168},[162,163160,976],{"class":207},[162,163162,979],{"class":179},[162,163164,434],{"class":168},[19,163166,163167],{},"外层循环执行一次，内层循环执行完整一轮。",[14,163169,163171],{"id":163170},"_410-九九乘法表","4.10 九九乘法表",[153,163173,163175],{"className":155,"code":163174,"language":157,"meta":158,"style":158},"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",[71,163176,163177,163197,163220,163272],{"__ignoreMap":158},[162,163178,163179,163181,163183,163185,163187,163189,163191,163193,163195],{"class":164,"line":165},[162,163180,808],{"class":172},[162,163182,2642],{"class":168},[162,163184,814],{"class":172},[162,163186,2647],{"class":207},[162,163188,604],{"class":168},[162,163190,208],{"class":207},[162,163192,183],{"class":168},[162,163194,1006],{"class":207},[162,163196,33870],{"class":168},[162,163198,163199,163201,163203,163205,163207,163209,163211,163214,163216,163218],{"class":164,"line":197},[162,163200,6315],{"class":172},[162,163202,12600],{"class":168},[162,163204,814],{"class":172},[162,163206,2647],{"class":207},[162,163208,604],{"class":168},[162,163210,208],{"class":207},[162,163212,163213],{"class":168},", i ",[162,163215,3771],{"class":172},[162,163217,28210],{"class":207},[162,163219,33870],{"class":168},[162,163221,163222,163224,163226,163228,163230,163232,163234,163236,163238,163240,163242,163244,163246,163248,163250,163252,163254,163256,163258,163260,163262,163264,163266,163268,163270],{"class":164,"line":228},[162,163223,2300],{"class":207},[162,163225,604],{"class":168},[162,163227,961],{"class":172},[162,163229,979],{"class":179},[162,163231,967],{"class":207},[162,163233,3757],{"class":168},[162,163235,976],{"class":207},[162,163237,3745],{"class":179},[162,163239,967],{"class":207},[162,163241,3732],{"class":168},[162,163243,976],{"class":207},[162,163245,173],{"class":179},[162,163247,967],{"class":207},[162,163249,103212],{"class":168},[162,163251,3745],{"class":172},[162,163253,6524],{"class":168},[162,163255,976],{"class":207},[162,163257,979],{"class":179},[162,163259,183],{"class":168},[162,163261,48875],{"class":671},[162,163263,173],{"class":172},[162,163265,979],{"class":179},[162,163267,4373],{"class":207},[162,163269,979],{"class":179},[162,163271,434],{"class":168},[162,163273,163274,163276],{"class":164,"line":252},[162,163275,822],{"class":207},[162,163277,1526],{"class":168},[19,163279,163280],{},"关键点：",[1452,163282,163283,163289,163295,163301],{},[1455,163284,163285,163286,163288],{},"外层 ",[71,163287,3732],{}," 控制行。",[1455,163290,163291,163292,163294],{},"内层 ",[71,163293,3757],{}," 控制列。",[1455,163296,163297,163298,163300],{},"每行结束后用 ",[71,163299,149530],{}," 换行。",[1455,163302,163303,163306],{},[71,163304,163305],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,163308,163310],{"id":163309},"_411-循环else","4.11 循环else",[19,163312,163313,163314,163316,163317,163319,163320,163322],{},"Python 的循环可以带 ",[71,163315,2313],{},"。当循环正常结束时执行 ",[71,163318,2313],{},"，如果被 ",[71,163321,5171],{}," 打断，则不执行。",[153,163324,163326],{"className":155,"code":163325,"language":157,"meta":158,"style":158},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[71,163327,163328,163348,163360,163371,163375,163381],{"__ignoreMap":158},[162,163329,163330,163332,163334,163336,163338,163340,163342,163344,163346],{"class":164,"line":165},[162,163331,808],{"class":172},[162,163333,2642],{"class":168},[162,163335,814],{"class":172},[162,163337,2647],{"class":207},[162,163339,604],{"class":168},[162,163341,208],{"class":207},[162,163343,183],{"class":168},[162,163345,1314],{"class":207},[162,163347,33870],{"class":168},[162,163349,163350,163352,163354,163356,163358],{"class":164,"line":197},[162,163351,2283],{"class":172},[162,163353,2642],{"class":168},[162,163355,2292],{"class":172},[162,163357,5156],{"class":207},[162,163359,2316],{"class":168},[162,163361,163362,163364,163366,163369],{"class":164,"line":228},[162,163363,2300],{"class":207},[162,163365,604],{"class":168},[162,163367,163368],{"class":179},"\"找到了\"",[162,163370,434],{"class":168},[162,163372,163373],{"class":164,"line":252},[162,163374,2308],{"class":172},[162,163376,163377,163379],{"class":164,"line":328},[162,163378,2313],{"class":172},[162,163380,2316],{"class":168},[162,163382,163383,163385,163387,163390],{"class":164,"line":466},[162,163384,822],{"class":207},[162,163386,604],{"class":168},[162,163388,163389],{"class":179},"\"没找到\"",[162,163391,434],{"class":168},[19,163393,163394],{},"常用于搜索。",[153,163396,163398],{"className":155,"code":163397,"language":157,"meta":158,"style":158},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[71,163399,163400,163420,163429,163433,163443,163453,163463,163467,163473],{"__ignoreMap":158},[162,163401,163402,163404,163406,163408,163410,163412,163414,163416,163418],{"class":164,"line":165},[162,163403,169],{"class":168},[162,163405,173],{"class":172},[162,163407,176],{"class":168},[162,163409,180],{"class":179},[162,163411,183],{"class":168},[162,163413,186],{"class":179},[162,163415,183],{"class":168},[162,163417,191],{"class":179},[162,163419,194],{"class":168},[162,163421,163422,163424,163426],{"class":164,"line":197},[162,163423,2252],{"class":168},[162,163425,173],{"class":172},[162,163427,163428],{"class":179}," \"小李\"\n",[162,163430,163431],{"class":164,"line":228},[162,163432,301],{"emptyLinePlaceholder":300},[162,163434,163435,163437,163439,163441],{"class":164,"line":252},[162,163436,808],{"class":172},[162,163438,811],{"class":168},[162,163440,814],{"class":172},[162,163442,817],{"class":168},[162,163444,163445,163447,163449,163451],{"class":164,"line":328},[162,163446,2283],{"class":172},[162,163448,811],{"class":168},[162,163450,2292],{"class":172},[162,163452,2295],{"class":168},[162,163454,163455,163457,163459,163461],{"class":164,"line":466},[162,163456,2300],{"class":207},[162,163458,604],{"class":168},[162,163460,163368],{"class":179},[162,163462,434],{"class":168},[162,163464,163465],{"class":164,"line":471},[162,163466,2308],{"class":172},[162,163468,163469,163471],{"class":164,"line":687},[162,163470,2313],{"class":172},[162,163472,2316],{"class":168},[162,163474,163475,163477,163479,163481],{"class":164,"line":692},[162,163476,822],{"class":207},[162,163478,604],{"class":168},[162,163480,163389],{"class":179},[162,163482,434],{"class":168},[14,163484,163486],{"id":163485},"_412-小案例登录重试","4.12 小案例：登录重试",[19,163488,126350],{},[1452,163490,163491,163494,163497],{},[1455,163492,163493],{},"用户最多输入 3 次密码。",[1455,163495,163496],{},"密码正确则登录成功。",[1455,163498,163499],{},"3 次都错误则锁定账号。",[19,163501,13135],{},[153,163503,163505],{"className":155,"code":163504,"language":157,"meta":158,"style":158},"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",[71,163506,163507,163517,163521,163537,163553,163557,163569,163580,163584,163590,163615,163621],{"__ignoreMap":158},[162,163508,163509,163512,163514],{"class":164,"line":165},[162,163510,163511],{"class":168},"password ",[162,163513,173],{"class":172},[162,163515,163516],{"class":179}," \"123456\"\n",[162,163518,163519],{"class":164,"line":197},[162,163520,301],{"emptyLinePlaceholder":300},[162,163522,163523,163525,163527,163529,163531,163533,163535],{"class":164,"line":228},[162,163524,808],{"class":172},[162,163526,2642],{"class":168},[162,163528,814],{"class":172},[162,163530,2647],{"class":207},[162,163532,604],{"class":168},[162,163534,218],{"class":207},[162,163536,33870],{"class":168},[162,163538,163539,163542,163544,163546,163548,163551],{"class":164,"line":252},[162,163540,163541],{"class":168},"    user_password ",[162,163543,173],{"class":172},[162,163545,2257],{"class":207},[162,163547,604],{"class":168},[162,163549,163550],{"class":179},"\"请输入密码:\"",[162,163552,434],{"class":168},[162,163554,163555],{"class":164,"line":328},[162,163556,301],{"emptyLinePlaceholder":300},[162,163558,163559,163561,163564,163566],{"class":164,"line":466},[162,163560,2283],{"class":172},[162,163562,163563],{"class":168}," user_password ",[162,163565,2292],{"class":172},[162,163567,163568],{"class":168}," password:\n",[162,163570,163571,163573,163575,163578],{"class":164,"line":471},[162,163572,2300],{"class":207},[162,163574,604],{"class":168},[162,163576,163577],{"class":179},"\"登录成功\"",[162,163579,434],{"class":168},[162,163581,163582],{"class":164,"line":687},[162,163583,2308],{"class":172},[162,163585,163586,163588],{"class":164,"line":692},[162,163587,161052],{"class":172},[162,163589,2316],{"class":168},[162,163591,163592,163594,163596,163598,163601,163604,163606,163608,163610,163613],{"class":164,"line":698},[162,163593,2300],{"class":207},[162,163595,604],{"class":168},[162,163597,961],{"class":172},[162,163599,163600],{"class":179},"\"密码错误，还剩",[162,163602,163603],{"class":207},"{2",[162,163605,55341],{"class":172},[162,163607,6147],{"class":168},[162,163609,976],{"class":207},[162,163611,163612],{"class":179},"次机会\"",[162,163614,434],{"class":168},[162,163616,163617,163619],{"class":164,"line":2955},[162,163618,2313],{"class":172},[162,163620,2316],{"class":168},[162,163622,163623,163625,163627,163630],{"class":164,"line":2960},[162,163624,822],{"class":207},[162,163626,604],{"class":168},[162,163628,163629],{"class":179},"\"账号已锁定\"",[162,163631,434],{"class":168},[14,163633,163635],{"id":163634},"_413-小案例菜单程序","4.13 小案例：菜单程序",[153,163637,163639],{"className":155,"code":163638,"language":157,"meta":158,"style":158},"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",[71,163640,163641,163649,163660,163671,163682,163693,163704,163708,163723,163727,163739,163750,163762,163773,163785,163796,163808,163818,163822,163828],{"__ignoreMap":158},[162,163642,163643,163645,163647],{"class":164,"line":165},[162,163644,111724],{"class":172},[162,163646,98357],{"class":207},[162,163648,2316],{"class":168},[162,163650,163651,163653,163655,163658],{"class":164,"line":197},[162,163652,822],{"class":207},[162,163654,604],{"class":168},[162,163656,163657],{"class":179},"\"====== 菜单 ======\"",[162,163659,434],{"class":168},[162,163661,163662,163664,163666,163669],{"class":164,"line":228},[162,163663,822],{"class":207},[162,163665,604],{"class":168},[162,163667,163668],{"class":179},"\"1. 查询余额\"",[162,163670,434],{"class":168},[162,163672,163673,163675,163677,163680],{"class":164,"line":252},[162,163674,822],{"class":207},[162,163676,604],{"class":168},[162,163678,163679],{"class":179},"\"2. 存款\"",[162,163681,434],{"class":168},[162,163683,163684,163686,163688,163691],{"class":164,"line":328},[162,163685,822],{"class":207},[162,163687,604],{"class":168},[162,163689,163690],{"class":179},"\"3. 取款\"",[162,163692,434],{"class":168},[162,163694,163695,163697,163699,163702],{"class":164,"line":466},[162,163696,822],{"class":207},[162,163698,604],{"class":168},[162,163700,163701],{"class":179},"\"0. 退出\"",[162,163703,434],{"class":168},[162,163705,163706],{"class":164,"line":471},[162,163707,301],{"emptyLinePlaceholder":300},[162,163709,163710,163713,163715,163717,163719,163721],{"class":164,"line":687},[162,163711,163712],{"class":168},"    choice ",[162,163714,173],{"class":172},[162,163716,2257],{"class":207},[162,163718,604],{"class":168},[162,163720,156116],{"class":179},[162,163722,434],{"class":168},[162,163724,163725],{"class":164,"line":692},[162,163726,301],{"emptyLinePlaceholder":300},[162,163728,163729,163731,163733,163735,163737],{"class":164,"line":698},[162,163730,2283],{"class":172},[162,163732,156129],{"class":168},[162,163734,2292],{"class":172},[162,163736,156134],{"class":179},[162,163738,2316],{"class":168},[162,163740,163741,163743,163745,163748],{"class":164,"line":2955},[162,163742,2300],{"class":207},[162,163744,604],{"class":168},[162,163746,163747],{"class":179},"\"余额为1000元\"",[162,163749,434],{"class":168},[162,163751,163752,163754,163756,163758,163760],{"class":164,"line":2960},[162,163753,42368],{"class":172},[162,163755,156129],{"class":168},[162,163757,2292],{"class":172},[162,163759,156153],{"class":179},[162,163761,2316],{"class":168},[162,163763,163764,163766,163768,163771],{"class":164,"line":2971},[162,163765,2300],{"class":207},[162,163767,604],{"class":168},[162,163769,163770],{"class":179},"\"存款功能\"",[162,163772,434],{"class":168},[162,163774,163775,163777,163779,163781,163783],{"class":164,"line":2984},[162,163776,42368],{"class":172},[162,163778,156129],{"class":168},[162,163780,2292],{"class":172},[162,163782,156171],{"class":179},[162,163784,2316],{"class":168},[162,163786,163787,163789,163791,163794],{"class":164,"line":2989},[162,163788,2300],{"class":207},[162,163790,604],{"class":168},[162,163792,163793],{"class":179},"\"取款功能\"",[162,163795,434],{"class":168},[162,163797,163798,163800,163802,163804,163806],{"class":164,"line":3011},[162,163799,42368],{"class":172},[162,163801,156129],{"class":168},[162,163803,2292],{"class":172},[162,163805,156225],{"class":179},[162,163807,2316],{"class":168},[162,163809,163810,163812,163814,163816],{"class":164,"line":3022},[162,163811,2300],{"class":207},[162,163813,604],{"class":168},[162,163815,156236],{"class":179},[162,163817,434],{"class":168},[162,163819,163820],{"class":164,"line":3027},[162,163821,2308],{"class":172},[162,163823,163824,163826],{"class":164,"line":3046},[162,163825,161052],{"class":172},[162,163827,2316],{"class":168},[162,163829,163830,163832,163834,163836],{"class":164,"line":3052},[162,163831,2300],{"class":207},[162,163833,604],{"class":168},[162,163835,156257],{"class":179},[162,163837,434],{"class":168},[19,163839,163840,163841,163843,163844,3183],{},"菜单类程序通常使用 ",[71,163842,162551],{},"，用户选择退出时 ",[71,163845,5171],{},[14,163847,163849],{"id":163848},"_414-易错点","4.14 易错点",[1452,163851,163852,163857,163863,163871,163877],{},[1455,163853,163854,163856],{},[71,163855,111724],{}," 循环必须更新控制变量。",[1455,163858,163859,163862],{},[71,163860,163861],{},"range(1, 10)"," 不包含 10。",[1455,163864,163865,163867,163868,163870],{},[71,163866,5171],{}," 结束整个循环，",[71,163869,157714],{}," 只跳过本轮。",[1455,163872,163873,163874,163876],{},"嵌套循环中，",[71,163875,5171],{}," 只跳出当前所在的一层循环。",[1455,163878,163879],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,163881,163883],{"id":163882},"_415-本章练习","4.15 本章练习",[1452,163885,163886,163889,163892,163895,163898],{},[1455,163887,163888],{},"输出 1 到 100。",[1455,163890,163891],{},"计算 1 到 100 的偶数和。",[1455,163893,163894],{},"输出 100 以内能被 3 和 5 同时整除的数。",[1455,163896,163897],{},"编写猜数字游戏，限制最多猜 7 次。",[1455,163899,163900],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[3219,163902,163903],{},"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":158,"searchDepth":197,"depth":197,"links":163905},[163906,163907,163908,163909,163910,163914,163915,163916,163917,163918,163919,163920,163921,163922,163923],{"id":162172,"depth":197,"text":162173},{"id":162202,"depth":197,"text":162203},{"id":162291,"depth":197,"text":162292},{"id":162384,"depth":197,"text":162385},{"id":162558,"depth":197,"text":162559,"children":163911},[163912,163913],{"id":162562,"depth":228,"text":162563},{"id":162626,"depth":228,"text":162627},{"id":162690,"depth":197,"text":162691},{"id":162780,"depth":197,"text":162781},{"id":162889,"depth":197,"text":162890},{"id":163085,"depth":197,"text":163086},{"id":163170,"depth":197,"text":163171},{"id":163309,"depth":197,"text":163310},{"id":163485,"depth":197,"text":163486},{"id":163634,"depth":197,"text":163635},{"id":163848,"depth":197,"text":163849},{"id":163882,"depth":197,"text":163883},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":162164,"description":3241},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":163930,"title":163931,"body":163932,"description":3241,"extension":3242,"meta":165937,"navigation":300,"path":165938,"seo":165939,"stem":165940,"__hash__":165941},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":163933,"toc":165917},[163934,163937,163941,163944,163947,163961,163964,163978,163982,163984,164003,164005,164052,164054,164068,164072,164146,164149,164153,164156,164215,164223,164226,164279,164282,164286,164291,164346,164354,164404,164408,164413,164421,164520,164526,164530,164535,164538,164549,164590,164603,164607,164610,164646,164649,164662,164665,164725,164729,164733,164736,164787,164791,164794,164841,164847,164913,164916,164920,164923,165039,165042,165046,165049,165155,165159,165162,165200,165203,165245,165248,165308,165311,165315,165779,165782,165786,165813,165819,165880,165884,165914],[10,163935,163931],{"id":163936},"_5-函数基础",[14,163938,163940],{"id":163939},"_51-为什么需要函数","5.1 为什么需要函数",[19,163942,163943],{},"函数用于封装一段可以重复使用的代码。",[19,163945,163946],{},"不使用函数的问题：",[1452,163948,163949,163952,163955,163958],{},[1455,163950,163951],{},"重复代码多。",[1455,163953,163954],{},"修改逻辑时容易漏改。",[1455,163956,163957],{},"主流程不清晰。",[1455,163959,163960],{},"程序越写越长，难以维护。",[19,163962,163963],{},"使用函数后的好处：",[1452,163965,163966,163969,163972,163975],{},[1455,163967,163968],{},"提高复用性。",[1455,163970,163971],{},"提高可读性。",[1455,163973,163974],{},"便于调试。",[1455,163976,163977],{},"便于分工。",[14,163979,163981],{"id":163980},"_52-函数定义","5.2 函数定义",[19,163983,8289],{},[153,163985,163987],{"className":155,"code":163986,"language":157,"meta":158,"style":158},"def 函数名():\n    函数体\n",[71,163988,163989,163998],{"__ignoreMap":158},[162,163990,163991,163993,163996],{"class":164,"line":165},[162,163992,35026],{"class":172},[162,163994,163995],{"class":5082}," 函数名",[162,163997,35032],{"class":168},[162,163999,164000],{"class":164,"line":197},[162,164001,164002],{"class":168},"    函数体\n",[19,164004,18228],{},[153,164006,164008],{"className":155,"code":164007,"language":157,"meta":158,"style":158},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[71,164009,164010,164019,164029,164039,164043,164047],{"__ignoreMap":158},[162,164011,164012,164014,164017],{"class":164,"line":165},[162,164013,35026],{"class":172},[162,164015,164016],{"class":5082}," say_hello",[162,164018,35032],{"class":168},[162,164020,164021,164023,164025,164027],{"class":164,"line":197},[162,164022,822],{"class":207},[162,164024,604],{"class":168},[162,164026,8951],{"class":179},[162,164028,434],{"class":168},[162,164030,164031,164033,164035,164037],{"class":164,"line":228},[162,164032,822],{"class":207},[162,164034,604],{"class":168},[162,164036,149697],{"class":179},[162,164038,434],{"class":168},[162,164040,164041],{"class":164,"line":252},[162,164042,301],{"emptyLinePlaceholder":300},[162,164044,164045],{"class":164,"line":328},[162,164046,301],{"emptyLinePlaceholder":300},[162,164048,164049],{"class":164,"line":466},[162,164050,164051],{"class":168},"say_hello()\n",[19,164053,1529],{},[1452,164055,164056,164059,164062,164065],{},[1455,164057,164058],{},"函数必须先定义，再调用。",[1455,164060,164061],{},"函数名遵循变量命名规则。",[1455,164063,164064],{},"函数体需要缩进。",[1455,164066,164067],{},"函数不调用就不会执行。",[14,164069,164071],{"id":164070},"_53-函数调用","5.3 函数调用",[153,164073,164075],{"className":155,"code":164074,"language":157,"meta":158,"style":158},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[71,164076,164077,164086,164097,164108,164119,164129,164133,164137,164142],{"__ignoreMap":158},[162,164078,164079,164081,164084],{"class":164,"line":165},[162,164080,35026],{"class":172},[162,164082,164083],{"class":5082}," print_menu",[162,164085,35032],{"class":168},[162,164087,164088,164090,164092,164095],{"class":164,"line":197},[162,164089,822],{"class":207},[162,164091,604],{"class":168},[162,164093,164094],{"class":179},"\"1. 查询\"",[162,164096,434],{"class":168},[162,164098,164099,164101,164103,164106],{"class":164,"line":228},[162,164100,822],{"class":207},[162,164102,604],{"class":168},[162,164104,164105],{"class":179},"\"2. 添加\"",[162,164107,434],{"class":168},[162,164109,164110,164112,164114,164117],{"class":164,"line":252},[162,164111,822],{"class":207},[162,164113,604],{"class":168},[162,164115,164116],{"class":179},"\"3. 删除\"",[162,164118,434],{"class":168},[162,164120,164121,164123,164125,164127],{"class":164,"line":328},[162,164122,822],{"class":207},[162,164124,604],{"class":168},[162,164126,163701],{"class":179},[162,164128,434],{"class":168},[162,164130,164131],{"class":164,"line":466},[162,164132,301],{"emptyLinePlaceholder":300},[162,164134,164135],{"class":164,"line":471},[162,164136,301],{"emptyLinePlaceholder":300},[162,164138,164139],{"class":164,"line":687},[162,164140,164141],{"class":168},"print_menu()\n",[162,164143,164144],{"class":164,"line":692},[162,164145,164141],{"class":168},[19,164147,164148],{},"函数可以多次调用，每次调用都会执行函数体。",[14,164150,164152],{"id":164151},"_54-参数","5.4 参数",[19,164154,164155],{},"参数用于向函数传递数据。",[153,164157,164159],{"className":155,"code":164158,"language":157,"meta":158,"style":158},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[71,164160,164161,164170,164190,164194,164198,164207],{"__ignoreMap":158},[162,164162,164163,164165,164167],{"class":164,"line":165},[162,164164,35026],{"class":172},[162,164166,164016],{"class":5082},[162,164168,164169],{"class":168},"(name):\n",[162,164171,164172,164174,164176,164178,164180,164182,164184,164186,164188],{"class":164,"line":197},[162,164173,822],{"class":207},[162,164175,604],{"class":168},[162,164177,961],{"class":172},[162,164179,160088],{"class":179},[162,164181,967],{"class":207},[162,164183,82875],{"class":168},[162,164185,976],{"class":207},[162,164187,979],{"class":179},[162,164189,434],{"class":168},[162,164191,164192],{"class":164,"line":228},[162,164193,301],{"emptyLinePlaceholder":300},[162,164195,164196],{"class":164,"line":252},[162,164197,301],{"emptyLinePlaceholder":300},[162,164199,164200,164203,164205],{"class":164,"line":328},[162,164201,164202],{"class":168},"say_hello(",[162,164204,180],{"class":179},[162,164206,434],{"class":168},[162,164208,164209,164211,164213],{"class":164,"line":466},[162,164210,164202],{"class":168},[162,164212,186],{"class":179},[162,164214,434],{"class":168},[19,164216,164217,164219,164220,164222],{},[71,164218,82875],{}," 是形参，",[71,164221,180],{}," 是实参。",[19,164224,164225],{},"多个参数：",[153,164227,164229],{"className":155,"code":164228,"language":157,"meta":158,"style":158},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[71,164230,164231,164239,164252,164258,164262,164266],{"__ignoreMap":158},[162,164232,164233,164235,164237],{"class":164,"line":165},[162,164234,35026],{"class":172},[162,164236,8317],{"class":5082},[162,164238,154144],{"class":168},[162,164240,164241,164244,164246,164248,164250],{"class":164,"line":197},[162,164242,164243],{"class":168},"    result ",[162,164245,173],{"class":172},[162,164247,13967],{"class":168},[162,164249,3771],{"class":172},[162,164251,154155],{"class":168},[162,164253,164254,164256],{"class":164,"line":228},[162,164255,822],{"class":207},[162,164257,79650],{"class":168},[162,164259,164260],{"class":164,"line":252},[162,164261,301],{"emptyLinePlaceholder":300},[162,164263,164264],{"class":164,"line":328},[162,164265,301],{"emptyLinePlaceholder":300},[162,164267,164268,164271,164273,164275,164277],{"class":164,"line":466},[162,164269,164270],{"class":168},"add(",[162,164272,1006],{"class":207},[162,164274,183],{"class":168},[162,164276,1011],{"class":207},[162,164278,434],{"class":168},[19,164280,164281],{},"调用时参数数量必须匹配。",[14,164283,164285],{"id":164284},"_55-返回值","5.5 返回值",[19,164287,164288,164290],{},[71,164289,20137],{}," 用于把函数内部的结果返回给调用者。",[153,164292,164294],{"className":155,"code":164293,"language":157,"meta":158,"style":158},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[71,164295,164296,164304,164314,164318,164322,164340],{"__ignoreMap":158},[162,164297,164298,164300,164302],{"class":164,"line":165},[162,164299,35026],{"class":172},[162,164301,8317],{"class":5082},[162,164303,154144],{"class":168},[162,164305,164306,164308,164310,164312],{"class":164,"line":197},[162,164307,7203],{"class":172},[162,164309,13967],{"class":168},[162,164311,3771],{"class":172},[162,164313,154155],{"class":168},[162,164315,164316],{"class":164,"line":228},[162,164317,301],{"emptyLinePlaceholder":300},[162,164319,164320],{"class":164,"line":252},[162,164321,301],{"emptyLinePlaceholder":300},[162,164323,164324,164327,164329,164332,164334,164336,164338],{"class":164,"line":328},[162,164325,164326],{"class":168},"result ",[162,164328,173],{"class":172},[162,164330,164331],{"class":168}," add(",[162,164333,1006],{"class":207},[162,164335,183],{"class":168},[162,164337,1011],{"class":207},[162,164339,434],{"class":168},[162,164341,164342,164344],{"class":164,"line":466},[162,164343,306],{"class":207},[162,164345,79650],{"class":168},[19,164347,164348,164349,164351,164352,3183],{},"如果函数没有写 ",[71,164350,20137],{},"，默认返回 ",[71,164353,98751],{},[153,164355,164357],{"className":155,"code":164356,"language":157,"meta":158,"style":158},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[71,164358,164359,164367,164377,164381,164385,164394],{"__ignoreMap":158},[162,164360,164361,164363,164365],{"class":164,"line":165},[162,164362,35026],{"class":172},[162,164364,164016],{"class":5082},[162,164366,35032],{"class":168},[162,164368,164369,164371,164373,164375],{"class":164,"line":197},[162,164370,822],{"class":207},[162,164372,604],{"class":168},[162,164374,8951],{"class":179},[162,164376,434],{"class":168},[162,164378,164379],{"class":164,"line":228},[162,164380,301],{"emptyLinePlaceholder":300},[162,164382,164383],{"class":164,"line":252},[162,164384,301],{"emptyLinePlaceholder":300},[162,164386,164387,164389,164391],{"class":164,"line":328},[162,164388,164326],{"class":168},[162,164390,173],{"class":172},[162,164392,164393],{"class":168}," say_hello()\n",[162,164395,164396,164398,164401],{"class":164,"line":466},[162,164397,306],{"class":207},[162,164399,164400],{"class":168},"(result)  ",[162,164402,164403],{"class":361},"# None\n",[14,164405,164407],{"id":164406},"_56-return的作用","5.6 return的作用",[19,164409,164410,164412],{},[71,164411,20137],{}," 有两个作用：",[1452,164414,164415,164418],{},[1455,164416,164417],{},"返回结果。",[1455,164419,164420],{},"结束函数。",[153,164422,164424],{"className":155,"code":164423,"language":157,"meta":158,"style":158},"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",[71,164425,164426,164436,164448,164455,164459,164471,164478,164482,164489,164493,164497,164508],{"__ignoreMap":158},[162,164427,164428,164430,164433],{"class":164,"line":165},[162,164429,35026],{"class":172},[162,164431,164432],{"class":5082}," check_age",[162,164434,164435],{"class":168},"(age):\n",[162,164437,164438,164440,164442,164444,164446],{"class":164,"line":197},[162,164439,2283],{"class":172},[162,164441,18798],{"class":168},[162,164443,4187],{"class":172},[162,164445,2717],{"class":207},[162,164447,2316],{"class":168},[162,164449,164450,164452],{"class":164,"line":228},[162,164451,17846],{"class":172},[162,164453,164454],{"class":179}," \"年龄不合法\"\n",[162,164456,164457],{"class":164,"line":252},[162,164458,301],{"emptyLinePlaceholder":300},[162,164460,164461,164463,164465,164467,164469],{"class":164,"line":328},[162,164462,2283],{"class":172},[162,164464,18798],{"class":168},[162,164466,3038],{"class":172},[162,164468,159320],{"class":207},[162,164470,2316],{"class":168},[162,164472,164473,164475],{"class":164,"line":466},[162,164474,17846],{"class":172},[162,164476,164477],{"class":179}," \"成年人\"\n",[162,164479,164480],{"class":164,"line":471},[162,164481,301],{"emptyLinePlaceholder":300},[162,164483,164484,164486],{"class":164,"line":687},[162,164485,7203],{"class":172},[162,164487,164488],{"class":179}," \"未成年人\"\n",[162,164490,164491],{"class":164,"line":692},[162,164492,301],{"emptyLinePlaceholder":300},[162,164494,164495],{"class":164,"line":698},[162,164496,301],{"emptyLinePlaceholder":300},[162,164498,164499,164501,164504,164506],{"class":164,"line":2955},[162,164500,306],{"class":207},[162,164502,164503],{"class":168},"(check_age(",[162,164505,1011],{"class":207},[162,164507,586],{"class":168},[162,164509,164510,164512,164514,164516,164518],{"class":164,"line":2960},[162,164511,306],{"class":207},[162,164513,164503],{"class":168},[162,164515,353],{"class":172},[162,164517,208],{"class":207},[162,164519,586],{"class":168},[19,164521,164522,164523,164525],{},"函数执行到 ",[71,164524,20137],{}," 后，后面的代码不会继续执行。",[14,164527,164529],{"id":164528},"_57-none","5.7 None",[19,164531,164532,164534],{},[71,164533,98751],{}," 表示空值或没有结果。",[19,164536,164537],{},"常见使用场景：",[1452,164539,164540,164543,164546],{},[1455,164541,164542],{},"函数没有返回值。",[1455,164544,164545],{},"变量暂时没有具体值。",[1455,164547,164548],{},"表示查询不到结果。",[153,164550,164552],{"className":155,"code":164551,"language":157,"meta":158,"style":158},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[71,164553,164554,164562,164566,164579],{"__ignoreMap":158},[162,164555,164556,164558,164560],{"class":164,"line":165},[162,164557,164326],{"class":168},[162,164559,173],{"class":172},[162,164561,155218],{"class":207},[162,164563,164564],{"class":164,"line":197},[162,164565,301],{"emptyLinePlaceholder":300},[162,164567,164568,164570,164573,164575,164577],{"class":164,"line":228},[162,164569,2703],{"class":172},[162,164571,164572],{"class":168}," result ",[162,164574,42002],{"class":172},[162,164576,42008],{"class":207},[162,164578,2316],{"class":168},[162,164580,164581,164583,164585,164588],{"class":164,"line":252},[162,164582,822],{"class":207},[162,164584,604],{"class":168},[162,164586,164587],{"class":179},"\"没有数据\"",[162,164589,434],{"class":168},[19,164591,164592,164593,164595,164596,164599,164600,3183],{},"判断 ",[71,164594,98751],{}," 推荐使用 ",[71,164597,164598],{},"is None","，不要写成 ",[71,164601,164602],{},"== None",[14,164604,164606],{"id":164605},"_58-函数文档字符串","5.8 函数文档字符串",[19,164608,164609],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[153,164611,164613],{"className":155,"code":164612,"language":157,"meta":158,"style":158},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[71,164614,164615,164625,164630],{"__ignoreMap":158},[162,164616,164617,164619,164622],{"class":164,"line":165},[162,164618,35026],{"class":172},[162,164620,164621],{"class":5082}," calculate_bmi",[162,164623,164624],{"class":168},"(weight, height):\n",[162,164626,164627],{"class":164,"line":197},[162,164628,164629],{"class":179},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[162,164631,164632,164634,164637,164639,164642,164644],{"class":164,"line":228},[162,164633,7203],{"class":172},[162,164635,164636],{"class":168}," weight ",[162,164638,946],{"class":172},[162,164640,164641],{"class":168}," height ",[162,164643,2747],{"class":172},[162,164645,50796],{"class":207},[19,164647,164648],{},"查看说明：",[153,164650,164652],{"className":155,"code":164651,"language":157,"meta":158,"style":158},"help(calculate_bmi)\n",[71,164653,164654],{"__ignoreMap":158},[162,164655,164656,164659],{"class":164,"line":165},[162,164657,164658],{"class":207},"help",[162,164660,164661],{"class":168},"(calculate_bmi)\n",[19,164663,164664],{},"较完整的写法：",[153,164666,164668],{"className":155,"code":164667,"language":157,"meta":158,"style":158},"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",[71,164669,164670,164678,164683,164688,164692,164697,164702,164707,164711],{"__ignoreMap":158},[162,164671,164672,164674,164676],{"class":164,"line":165},[162,164673,35026],{"class":172},[162,164675,164621],{"class":5082},[162,164677,164624],{"class":168},[162,164679,164680],{"class":164,"line":197},[162,164681,164682],{"class":179},"    \"\"\"\n",[162,164684,164685],{"class":164,"line":228},[162,164686,164687],{"class":179},"    计算BMI。\n",[162,164689,164690],{"class":164,"line":252},[162,164691,301],{"emptyLinePlaceholder":300},[162,164693,164694],{"class":164,"line":328},[162,164695,164696],{"class":179},"    :param weight: 体重，单位kg\n",[162,164698,164699],{"class":164,"line":466},[162,164700,164701],{"class":179},"    :param height: 身高，单位m\n",[162,164703,164704],{"class":164,"line":471},[162,164705,164706],{"class":179},"    :return: BMI数值\n",[162,164708,164709],{"class":164,"line":687},[162,164710,164682],{"class":179},[162,164712,164713,164715,164717,164719,164721,164723],{"class":164,"line":692},[162,164714,7203],{"class":172},[162,164716,164636],{"class":168},[162,164718,946],{"class":172},[162,164720,164641],{"class":168},[162,164722,2747],{"class":172},[162,164724,50796],{"class":207},[14,164726,164728],{"id":164727},"_59-变量作用域","5.9 变量作用域",[3284,164730,164732],{"id":164731},"_591-局部变量","5.9.1 局部变量",[19,164734,164735],{},"在函数内部定义的变量，只能在函数内部使用。",[153,164737,164739],{"className":155,"code":164738,"language":157,"meta":158,"style":158},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[71,164740,164741,164750,164758,164764,164768,164772,164777],{"__ignoreMap":158},[162,164742,164743,164745,164748],{"class":164,"line":165},[162,164744,35026],{"class":172},[162,164746,164747],{"class":5082}," test",[162,164749,35032],{"class":168},[162,164751,164752,164754,164756],{"class":164,"line":197},[162,164753,48667],{"class":168},[162,164755,173],{"class":172},[162,164757,61497],{"class":207},[162,164759,164760,164762],{"class":164,"line":228},[162,164761,822],{"class":207},[162,164763,3328],{"class":168},[162,164765,164766],{"class":164,"line":252},[162,164767,301],{"emptyLinePlaceholder":300},[162,164769,164770],{"class":164,"line":328},[162,164771,301],{"emptyLinePlaceholder":300},[162,164773,164774],{"class":164,"line":466},[162,164775,164776],{"class":168},"test()\n",[162,164778,164779,164781,164784],{"class":164,"line":471},[162,164780,306],{"class":207},[162,164782,164783],{"class":168},"(num)  ",[162,164785,164786],{"class":361},"# 报错\n",[3284,164788,164790],{"id":164789},"_592-全局变量","5.9.2 全局变量",[19,164792,164793],{},"在函数外部定义的变量，可以在函数内部读取。",[153,164795,164797],{"className":155,"code":164796,"language":157,"meta":158,"style":158},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[71,164798,164799,164807,164811,164815,164823,164829,164833,164837],{"__ignoreMap":158},[162,164800,164801,164803,164805],{"class":164,"line":165},[162,164802,149594],{"class":168},[162,164804,173],{"class":172},[162,164806,152409],{"class":179},[162,164808,164809],{"class":164,"line":197},[162,164810,301],{"emptyLinePlaceholder":300},[162,164812,164813],{"class":164,"line":228},[162,164814,301],{"emptyLinePlaceholder":300},[162,164816,164817,164819,164821],{"class":164,"line":252},[162,164818,35026],{"class":172},[162,164820,164016],{"class":5082},[162,164822,35032],{"class":168},[162,164824,164825,164827],{"class":164,"line":328},[162,164826,822],{"class":207},[162,164828,825],{"class":168},[162,164830,164831],{"class":164,"line":466},[162,164832,301],{"emptyLinePlaceholder":300},[162,164834,164835],{"class":164,"line":471},[162,164836,301],{"emptyLinePlaceholder":300},[162,164838,164839],{"class":164,"line":687},[162,164840,164051],{"class":168},[19,164842,164843,164844,3183],{},"如果要在函数内部修改全局变量，需要 ",[71,164845,164846],{},"global",[153,164848,164850],{"className":155,"code":164849,"language":157,"meta":158,"style":158},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[71,164851,164852,164860,164864,164868,164877,164885,164893,164897,164901,164906],{"__ignoreMap":158},[162,164853,164854,164856,164858],{"class":164,"line":165},[162,164855,149749],{"class":168},[162,164857,173],{"class":172},[162,164859,902],{"class":207},[162,164861,164862],{"class":164,"line":197},[162,164863,301],{"emptyLinePlaceholder":300},[162,164865,164866],{"class":164,"line":228},[162,164867,301],{"emptyLinePlaceholder":300},[162,164869,164870,164872,164875],{"class":164,"line":252},[162,164871,35026],{"class":172},[162,164873,164874],{"class":5082}," add_count",[162,164876,35032],{"class":168},[162,164878,164879,164882],{"class":164,"line":328},[162,164880,164881],{"class":172},"    global",[162,164883,164884],{"class":168}," count\n",[162,164886,164887,164889,164891],{"class":164,"line":466},[162,164888,162462],{"class":168},[162,164890,926],{"class":172},[162,164892,58768],{"class":207},[162,164894,164895],{"class":164,"line":471},[162,164896,301],{"emptyLinePlaceholder":300},[162,164898,164899],{"class":164,"line":687},[162,164900,301],{"emptyLinePlaceholder":300},[162,164902,164903],{"class":164,"line":692},[162,164904,164905],{"class":168},"add_count()\n",[162,164907,164908,164910],{"class":164,"line":698},[162,164909,306],{"class":207},[162,164911,164912],{"class":168},"(count)\n",[19,164914,164915],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,164917,164919],{"id":164918},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,164921,164922],{},"一个函数中可以调用另一个函数。",[153,164924,164926],{"className":155,"code":164925,"language":157,"meta":158,"style":158},"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",[71,164927,164928,164937,164951,164955,164959,164968,164973,164993,165014,165018,165022,165026],{"__ignoreMap":158},[162,164929,164930,164932,164935],{"class":164,"line":165},[162,164931,35026],{"class":172},[162,164933,164934],{"class":5082}," print_line",[162,164936,35032],{"class":168},[162,164938,164939,164941,164943,164945,164947,164949],{"class":164,"line":197},[162,164940,822],{"class":207},[162,164942,604],{"class":168},[162,164944,35559],{"class":179},[162,164946,9624],{"class":172},[162,164948,81730],{"class":207},[162,164950,434],{"class":168},[162,164952,164953],{"class":164,"line":228},[162,164954,301],{"emptyLinePlaceholder":300},[162,164956,164957],{"class":164,"line":252},[162,164958,301],{"emptyLinePlaceholder":300},[162,164960,164961,164963,164966],{"class":164,"line":328},[162,164962,35026],{"class":172},[162,164964,164965],{"class":5082}," print_info",[162,164967,152431],{"class":168},[162,164969,164970],{"class":164,"line":466},[162,164971,164972],{"class":168},"    print_line()\n",[162,164974,164975,164977,164979,164981,164983,164985,164987,164989,164991],{"class":164,"line":471},[162,164976,822],{"class":207},[162,164978,604],{"class":168},[162,164980,961],{"class":172},[162,164982,159716],{"class":179},[162,164984,967],{"class":207},[162,164986,82875],{"class":168},[162,164988,976],{"class":207},[162,164990,979],{"class":179},[162,164992,434],{"class":168},[162,164994,164995,164997,164999,165001,165004,165006,165008,165010,165012],{"class":164,"line":687},[162,164996,822],{"class":207},[162,164998,604],{"class":168},[162,165000,961],{"class":172},[162,165002,165003],{"class":179},"\"年龄:",[162,165005,967],{"class":207},[162,165007,73286],{"class":168},[162,165009,976],{"class":207},[162,165011,979],{"class":179},[162,165013,434],{"class":168},[162,165015,165016],{"class":164,"line":692},[162,165017,164972],{"class":168},[162,165019,165020],{"class":164,"line":698},[162,165021,301],{"emptyLinePlaceholder":300},[162,165023,165024],{"class":164,"line":2955},[162,165025,301],{"emptyLinePlaceholder":300},[162,165027,165028,165031,165033,165035,165037],{"class":164,"line":2960},[162,165029,165030],{"class":168},"print_info(",[162,165032,180],{"class":179},[162,165034,183],{"class":168},[162,165036,242],{"class":207},[162,165038,434],{"class":168},[19,165040,165041],{},"这种方式可以把小功能组合成大功能。",[14,165043,165045],{"id":165044},"_511-参数检查","5.11 参数检查",[19,165047,165048],{},"函数内部可以检查参数是否合法。",[153,165050,165052],{"className":155,"code":165051,"language":157,"meta":158,"style":158},"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",[71,165053,165054,165063,165075,165081,165091,165095,165099,165116,165120,165132,165143,165149],{"__ignoreMap":158},[162,165055,165056,165058,165061],{"class":164,"line":165},[162,165057,35026],{"class":172},[162,165059,165060],{"class":5082}," divide",[162,165062,154144],{"class":168},[162,165064,165065,165067,165069,165071,165073],{"class":164,"line":197},[162,165066,2283],{"class":172},[162,165068,13980],{"class":168},[162,165070,2292],{"class":172},[162,165072,2717],{"class":207},[162,165074,2316],{"class":168},[162,165076,165077,165079],{"class":164,"line":228},[162,165078,17846],{"class":172},[162,165080,155218],{"class":207},[162,165082,165083,165085,165087,165089],{"class":164,"line":252},[162,165084,7203],{"class":172},[162,165086,13967],{"class":168},[162,165088,946],{"class":172},[162,165090,154155],{"class":168},[162,165092,165093],{"class":164,"line":328},[162,165094,301],{"emptyLinePlaceholder":300},[162,165096,165097],{"class":164,"line":466},[162,165098,301],{"emptyLinePlaceholder":300},[162,165100,165101,165103,165105,165108,165110,165112,165114],{"class":164,"line":471},[162,165102,164326],{"class":168},[162,165104,173],{"class":172},[162,165106,165107],{"class":168}," divide(",[162,165109,1006],{"class":207},[162,165111,183],{"class":168},[162,165113,312],{"class":207},[162,165115,434],{"class":168},[162,165117,165118],{"class":164,"line":687},[162,165119,301],{"emptyLinePlaceholder":300},[162,165121,165122,165124,165126,165128,165130],{"class":164,"line":692},[162,165123,2703],{"class":172},[162,165125,164572],{"class":168},[162,165127,42002],{"class":172},[162,165129,42008],{"class":207},[162,165131,2316],{"class":168},[162,165133,165134,165136,165138,165141],{"class":164,"line":698},[162,165135,822],{"class":207},[162,165137,604],{"class":168},[162,165139,165140],{"class":179},"\"除数不能为0\"",[162,165142,434],{"class":168},[162,165144,165145,165147],{"class":164,"line":2955},[162,165146,2313],{"class":172},[162,165148,2316],{"class":168},[162,165150,165151,165153],{"class":164,"line":2960},[162,165152,822],{"class":207},[162,165154,79650],{"class":168},[14,165156,165158],{"id":165157},"_512-类型提示","5.12 类型提示",[19,165160,165161],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[153,165163,165165],{"className":155,"code":165164,"language":157,"meta":158,"style":158},"def add(a: int, b: int) -> int:\n    return a + b\n",[71,165166,165167,165190],{"__ignoreMap":158},[162,165168,165169,165171,165173,165176,165178,165181,165183,165186,165188],{"class":164,"line":165},[162,165170,35026],{"class":172},[162,165172,8317],{"class":5082},[162,165174,165175],{"class":168},"(a: ",[162,165177,3319],{"class":207},[162,165179,165180],{"class":168},", b: ",[162,165182,3319],{"class":207},[162,165184,165185],{"class":168},") -> ",[162,165187,3319],{"class":207},[162,165189,2316],{"class":168},[162,165191,165192,165194,165196,165198],{"class":164,"line":197},[162,165193,7203],{"class":172},[162,165195,13967],{"class":168},[162,165197,3771],{"class":172},[162,165199,154155],{"class":168},[19,165201,165202],{},"字符串参数：",[153,165204,165206],{"className":155,"code":165205,"language":157,"meta":158,"style":158},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[71,165207,165208,165225],{"__ignoreMap":158},[162,165209,165210,165212,165214,165217,165219,165221,165223],{"class":164,"line":165},[162,165211,35026],{"class":172},[162,165213,164016],{"class":5082},[162,165215,165216],{"class":168},"(name: ",[162,165218,4442],{"class":207},[162,165220,165185],{"class":168},[162,165222,98751],{"class":207},[162,165224,2316],{"class":168},[162,165226,165227,165229,165231,165233,165235,165237,165239,165241,165243],{"class":164,"line":197},[162,165228,822],{"class":207},[162,165230,604],{"class":168},[162,165232,961],{"class":172},[162,165234,160088],{"class":179},[162,165236,967],{"class":207},[162,165238,82875],{"class":168},[162,165240,976],{"class":207},[162,165242,979],{"class":179},[162,165244,434],{"class":168},[19,165246,165247],{},"列表参数：",[153,165249,165251],{"className":155,"code":165250,"language":157,"meta":158,"style":158},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[71,165252,165253,165272,165280,165292,165301],{"__ignoreMap":158},[162,165254,165255,165257,165260,165263,165265,165268,165270],{"class":164,"line":165},[162,165256,35026],{"class":172},[162,165258,165259],{"class":5082}," get_total",[162,165261,165262],{"class":168},"(numbers: list[",[162,165264,3319],{"class":207},[162,165266,165267],{"class":168},"]) -> ",[162,165269,3319],{"class":207},[162,165271,2316],{"class":168},[162,165273,165274,165276,165278],{"class":164,"line":197},[162,165275,923],{"class":168},[162,165277,173],{"class":172},[162,165279,902],{"class":207},[162,165281,165282,165284,165287,165289],{"class":164,"line":228},[162,165283,6315],{"class":172},[162,165285,165286],{"class":168}," number ",[162,165288,814],{"class":172},[162,165290,165291],{"class":168}," numbers:\n",[162,165293,165294,165296,165298],{"class":164,"line":252},[162,165295,163006],{"class":168},[162,165297,926],{"class":172},[162,165299,165300],{"class":168}," number\n",[162,165302,165303,165305],{"class":164,"line":328},[162,165304,7203],{"class":172},[162,165306,165307],{"class":168}," total\n",[19,165309,165310],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,165312,165314],{"id":165313},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[153,165316,165318],{"className":155,"code":165317,"language":157,"meta":158,"style":158},"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",[71,165319,165320,165330,165334,165338,165346,165357,165367,165377,165387,165397,165401,165405,165414,165436,165440,165444,165453,165459,165479,165491,165502,165506,165515,165526,165531,165535,165539,165548,165554,165573,165585,165595,165599,165610,165620,165624,165632,165643,165647,165651,165655,165663,165668,165682,165686,165698,165703,165715,165720,165732,165737,165749,165759,165763,165769],{"__ignoreMap":158},[162,165321,165322,165325,165327],{"class":164,"line":165},[162,165323,165324],{"class":168},"balance ",[162,165326,173],{"class":172},[162,165328,165329],{"class":207}," 1000\n",[162,165331,165332],{"class":164,"line":197},[162,165333,301],{"emptyLinePlaceholder":300},[162,165335,165336],{"class":164,"line":228},[162,165337,301],{"emptyLinePlaceholder":300},[162,165339,165340,165342,165344],{"class":164,"line":252},[162,165341,35026],{"class":172},[162,165343,155083],{"class":5082},[162,165345,35032],{"class":168},[162,165347,165348,165350,165352,165355],{"class":164,"line":328},[162,165349,822],{"class":207},[162,165351,604],{"class":168},[162,165353,165354],{"class":179},"\"====== ATM ======\"",[162,165356,434],{"class":168},[162,165358,165359,165361,165363,165365],{"class":164,"line":466},[162,165360,822],{"class":207},[162,165362,604],{"class":168},[162,165364,163668],{"class":179},[162,165366,434],{"class":168},[162,165368,165369,165371,165373,165375],{"class":164,"line":471},[162,165370,822],{"class":207},[162,165372,604],{"class":168},[162,165374,163679],{"class":179},[162,165376,434],{"class":168},[162,165378,165379,165381,165383,165385],{"class":164,"line":687},[162,165380,822],{"class":207},[162,165382,604],{"class":168},[162,165384,163690],{"class":179},[162,165386,434],{"class":168},[162,165388,165389,165391,165393,165395],{"class":164,"line":692},[162,165390,822],{"class":207},[162,165392,604],{"class":168},[162,165394,163701],{"class":179},[162,165396,434],{"class":168},[162,165398,165399],{"class":164,"line":698},[162,165400,301],{"emptyLinePlaceholder":300},[162,165402,165403],{"class":164,"line":2955},[162,165404,301],{"emptyLinePlaceholder":300},[162,165406,165407,165409,165412],{"class":164,"line":2960},[162,165408,35026],{"class":172},[162,165410,165411],{"class":5082}," show_balance",[162,165413,35032],{"class":168},[162,165415,165416,165418,165420,165422,165425,165427,165430,165432,165434],{"class":164,"line":2971},[162,165417,822],{"class":207},[162,165419,604],{"class":168},[162,165421,961],{"class":172},[162,165423,165424],{"class":179},"\"当前余额:",[162,165426,967],{"class":207},[162,165428,165429],{"class":168},"balance",[162,165431,976],{"class":207},[162,165433,160046],{"class":179},[162,165435,434],{"class":168},[162,165437,165438],{"class":164,"line":2984},[162,165439,301],{"emptyLinePlaceholder":300},[162,165441,165442],{"class":164,"line":2989},[162,165443,301],{"emptyLinePlaceholder":300},[162,165445,165446,165448,165451],{"class":164,"line":3011},[162,165447,35026],{"class":172},[162,165449,165450],{"class":5082}," save_money",[162,165452,35032],{"class":168},[162,165454,165455,165457],{"class":164,"line":3022},[162,165456,164881],{"class":172},[162,165458,153152],{"class":168},[162,165460,165461,165464,165466,165468,165470,165472,165474,165477],{"class":164,"line":3027},[162,165462,165463],{"class":168},"    money ",[162,165465,173],{"class":172},[162,165467,112858],{"class":207},[162,165469,604],{"class":168},[162,165471,56891],{"class":207},[162,165473,604],{"class":168},[162,165475,165476],{"class":179},"\"请输入存款金额:\"",[162,165478,586],{"class":168},[162,165480,165481,165483,165485,165487,165489],{"class":164,"line":3046},[162,165482,2283],{"class":172},[162,165484,153195],{"class":168},[162,165486,4725],{"class":172},[162,165488,2717],{"class":207},[162,165490,2316],{"class":168},[162,165492,165493,165495,165497,165500],{"class":164,"line":3052},[162,165494,2300],{"class":207},[162,165496,604],{"class":168},[162,165498,165499],{"class":179},"\"金额必须大于0\"",[162,165501,434],{"class":168},[162,165503,165504],{"class":164,"line":3057},[162,165505,155407],{"class":172},[162,165507,165508,165511,165513],{"class":164,"line":3072},[162,165509,165510],{"class":168},"    balance ",[162,165512,926],{"class":172},[162,165514,153228],{"class":168},[162,165516,165517,165519,165521,165524],{"class":164,"line":3077},[162,165518,822],{"class":207},[162,165520,604],{"class":168},[162,165522,165523],{"class":179},"\"存款成功\"",[162,165525,434],{"class":168},[162,165527,165528],{"class":164,"line":3100},[162,165529,165530],{"class":168},"    show_balance()\n",[162,165532,165533],{"class":164,"line":3140},[162,165534,301],{"emptyLinePlaceholder":300},[162,165536,165537],{"class":164,"line":4878},[162,165538,301],{"emptyLinePlaceholder":300},[162,165540,165541,165543,165546],{"class":164,"line":4883},[162,165542,35026],{"class":172},[162,165544,165545],{"class":5082}," withdraw_money",[162,165547,35032],{"class":168},[162,165549,165550,165552],{"class":164,"line":4897},[162,165551,164881],{"class":172},[162,165553,153152],{"class":168},[162,165555,165556,165558,165560,165562,165564,165566,165568,165571],{"class":164,"line":4902},[162,165557,165463],{"class":168},[162,165559,173],{"class":172},[162,165561,112858],{"class":207},[162,165563,604],{"class":168},[162,165565,56891],{"class":207},[162,165567,604],{"class":168},[162,165569,165570],{"class":179},"\"请输入取款金额:\"",[162,165572,586],{"class":168},[162,165574,165575,165577,165579,165581,165583],{"class":164,"line":5694},[162,165576,2283],{"class":172},[162,165578,153195],{"class":168},[162,165580,4725],{"class":172},[162,165582,2717],{"class":207},[162,165584,2316],{"class":168},[162,165586,165587,165589,165591,165593],{"class":164,"line":5708},[162,165588,2300],{"class":207},[162,165590,604],{"class":168},[162,165592,165499],{"class":179},[162,165594,434],{"class":168},[162,165596,165597],{"class":164,"line":5716},[162,165598,155407],{"class":172},[162,165600,165601,165603,165605,165607],{"class":164,"line":5721},[162,165602,2283],{"class":172},[162,165604,153195],{"class":168},[162,165606,3000],{"class":172},[162,165608,165609],{"class":168}," balance:\n",[162,165611,165612,165614,165616,165618],{"class":164,"line":5727},[162,165613,2300],{"class":207},[162,165615,604],{"class":168},[162,165617,153290],{"class":179},[162,165619,434],{"class":168},[162,165621,165622],{"class":164,"line":5733},[162,165623,155407],{"class":172},[162,165625,165626,165628,165630],{"class":164,"line":5738},[162,165627,165510],{"class":168},[162,165629,153305],{"class":172},[162,165631,153228],{"class":168},[162,165633,165634,165636,165638,165641],{"class":164,"line":11052},[162,165635,822],{"class":207},[162,165637,604],{"class":168},[162,165639,165640],{"class":179},"\"取款成功\"",[162,165642,434],{"class":168},[162,165644,165645],{"class":164,"line":11076},[162,165646,165530],{"class":168},[162,165648,165649],{"class":164,"line":11081},[162,165650,301],{"emptyLinePlaceholder":300},[162,165652,165653],{"class":164,"line":11087},[162,165654,301],{"emptyLinePlaceholder":300},[162,165656,165657,165659,165661],{"class":164,"line":11114},[162,165658,111724],{"class":172},[162,165660,98357],{"class":207},[162,165662,2316],{"class":168},[162,165664,165665],{"class":164,"line":11119},[162,165666,165667],{"class":168},"    show_menu()\n",[162,165669,165670,165672,165674,165676,165678,165680],{"class":164,"line":11125},[162,165671,163712],{"class":168},[162,165673,173],{"class":172},[162,165675,2257],{"class":207},[162,165677,604],{"class":168},[162,165679,156116],{"class":179},[162,165681,434],{"class":168},[162,165683,165684],{"class":164,"line":11137},[162,165685,301],{"emptyLinePlaceholder":300},[162,165687,165688,165690,165692,165694,165696],{"class":164,"line":11149},[162,165689,2283],{"class":172},[162,165691,156129],{"class":168},[162,165693,2292],{"class":172},[162,165695,156134],{"class":179},[162,165697,2316],{"class":168},[162,165699,165700],{"class":164,"line":11161},[162,165701,165702],{"class":168},"        show_balance()\n",[162,165704,165705,165707,165709,165711,165713],{"class":164,"line":12816},[162,165706,42368],{"class":172},[162,165708,156129],{"class":168},[162,165710,2292],{"class":172},[162,165712,156153],{"class":179},[162,165714,2316],{"class":168},[162,165716,165717],{"class":164,"line":12841},[162,165718,165719],{"class":168},"        save_money()\n",[162,165721,165722,165724,165726,165728,165730],{"class":164,"line":12864},[162,165723,42368],{"class":172},[162,165725,156129],{"class":168},[162,165727,2292],{"class":172},[162,165729,156171],{"class":179},[162,165731,2316],{"class":168},[162,165733,165734],{"class":164,"line":12888},[162,165735,165736],{"class":168},"        withdraw_money()\n",[162,165738,165739,165741,165743,165745,165747],{"class":164,"line":12893},[162,165740,42368],{"class":172},[162,165742,156129],{"class":168},[162,165744,2292],{"class":172},[162,165746,156225],{"class":179},[162,165748,2316],{"class":168},[162,165750,165751,165753,165755,165757],{"class":164,"line":12898},[162,165752,2300],{"class":207},[162,165754,604],{"class":168},[162,165756,156236],{"class":179},[162,165758,434],{"class":168},[162,165760,165761],{"class":164,"line":12903},[162,165762,2308],{"class":172},[162,165764,165765,165767],{"class":164,"line":12912},[162,165766,161052],{"class":172},[162,165768,2316],{"class":168},[162,165770,165771,165773,165775,165777],{"class":164,"line":12917},[162,165772,2300],{"class":207},[162,165774,604],{"class":168},[162,165776,156257],{"class":179},[162,165778,434],{"class":168},[19,165780,165781],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,165783,165785],{"id":165784},"_514-易错点","5.14 易错点",[1452,165787,165788,165791,165794,165799,165804,165807],{},[1455,165789,165790],{},"函数定义后必须调用才会执行。",[1455,165792,165793],{},"函数名后面有括号才是调用。",[1455,165795,165796,165798],{},[71,165797,20137],{}," 后面的代码不会执行。",[1455,165800,165801,165802,3183],{},"没有返回值的函数默认返回 ",[71,165803,98751],{},[1455,165805,165806],{},"局部变量不能在函数外部访问。",[1455,165808,165809,165810,165812],{},"不要滥用 ",[71,165811,164846],{},"，更好的方式是让函数返回新值。",[19,165814,165815,165816,165818],{},"例如不用 ",[71,165817,164846],{}," 改写存款：",[153,165820,165822],{"className":155,"code":165821,"language":157,"meta":158,"style":158},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[71,165823,165824,165833,165844,165848,165852,165860,165873],{"__ignoreMap":158},[162,165825,165826,165828,165830],{"class":164,"line":165},[162,165827,35026],{"class":172},[162,165829,165450],{"class":5082},[162,165831,165832],{"class":168},"(balance, money):\n",[162,165834,165835,165837,165840,165842],{"class":164,"line":197},[162,165836,7203],{"class":172},[162,165838,165839],{"class":168}," balance ",[162,165841,3771],{"class":172},[162,165843,153228],{"class":168},[162,165845,165846],{"class":164,"line":228},[162,165847,301],{"emptyLinePlaceholder":300},[162,165849,165850],{"class":164,"line":252},[162,165851,301],{"emptyLinePlaceholder":300},[162,165853,165854,165856,165858],{"class":164,"line":328},[162,165855,165324],{"class":168},[162,165857,173],{"class":172},[162,165859,165329],{"class":207},[162,165861,165862,165864,165866,165869,165871],{"class":164,"line":466},[162,165863,165324],{"class":168},[162,165865,173],{"class":172},[162,165867,165868],{"class":168}," save_money(balance, ",[162,165870,4845],{"class":207},[162,165872,434],{"class":168},[162,165874,165875,165877],{"class":164,"line":471},[162,165876,306],{"class":207},[162,165878,165879],{"class":168},"(balance)\n",[14,165881,165883],{"id":165882},"_515-本章练习","5.15 本章练习",[1452,165885,165886,165893,165899,165905,165911],{},[1455,165887,165888,165889,165892],{},"定义函数 ",[71,165890,165891],{},"print_student(name, age)","，输出学生信息。",[1455,165894,165888,165895,165898],{},[71,165896,165897],{},"get_max(a, b, c)","，返回三个数中的最大值。",[1455,165900,165888,165901,165904],{},[71,165902,165903],{},"is_even(num)","，判断一个数是否为偶数。",[1455,165906,165888,165907,165910],{},[71,165908,165909],{},"calculate_bmi(weight, height)","，返回 BMI。",[1455,165912,165913],{},"把第 4 章的菜单程序拆分成多个函数。",[3219,165915,165916],{},"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":158,"searchDepth":197,"depth":197,"links":165918},[165919,165920,165921,165922,165923,165924,165925,165926,165927,165931,165932,165933,165934,165935,165936],{"id":163939,"depth":197,"text":163940},{"id":163980,"depth":197,"text":163981},{"id":164070,"depth":197,"text":164071},{"id":164151,"depth":197,"text":164152},{"id":164284,"depth":197,"text":164285},{"id":164406,"depth":197,"text":164407},{"id":164528,"depth":197,"text":164529},{"id":164605,"depth":197,"text":164606},{"id":164727,"depth":197,"text":164728,"children":165928},[165929,165930],{"id":164731,"depth":228,"text":164732},{"id":164789,"depth":228,"text":164790},{"id":164918,"depth":197,"text":164919},{"id":165044,"depth":197,"text":165045},{"id":165157,"depth":197,"text":165158},{"id":165313,"depth":197,"text":165314},{"id":165784,"depth":197,"text":165785},{"id":165882,"depth":197,"text":165883},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":163931,"description":3241},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":4,"title":5,"body":165943,"description":3241,"extension":3242,"meta":168674,"navigation":300,"path":3244,"seo":168675,"stem":3246,"__hash__":3247},{"type":7,"value":165944,"toc":168655},[165945,165947,165949,165951,165953,166041,166043,166045,166047,166123,166125,166127,166129,166187,166189,166221,166223,166237,166239,166305,166307,166353,166355,166421,166423,166501,166507,166561,166563,166607,166609,166631,166633,166731,166733,166735,166775,166777,166833,166835,166837,166839,166897,166899,166925,166927,166961,166963,166965,166973,166975,167085,167087,167125,167127,167129,167137,167175,167177,167191,167195,167197,167259,167261,167345,167347,167349,167393,167395,167419,167421,167445,167447,167465,167467,167495,167497,167527,167529,167531,167551,167553,167573,167575,167595,167597,167599,167727,167729,167807,167809,167881,167883,167885,167931,167933,167973,167975,167997,167999,168021,168023,168077,168079,168141,168143,168145,168147,168183,168185,168235,168237,168277,168279,168307,168309,168311,168617,168619,168639,168641,168653],[10,165946,5],{"id":12},[14,165948,17],{"id":16},[19,165950,21],{},[19,165952,24],{},[26,165954,165955,165969],{},[29,165956,165957],{},[32,165958,165959,165961,165963,165965,165967],{},[35,165960,37],{},[35,165962,40],{},[35,165964,43],{},[35,165966,46],{},[35,165968,49],{},[51,165970,165971,165985,165999,166013,166027],{},[32,165972,165973,165975,165977,165979,165981],{},[56,165974,58],{},[56,165976,61],{},[56,165978,64],{},[56,165980,67],{},[56,165982,165983],{},[71,165984,73],{},[32,165986,165987,165989,165991,165993,165995],{},[56,165988,78],{},[56,165990,61],{},[56,165992,83],{},[56,165994,67],{},[56,165996,165997],{},[71,165998,90],{},[32,166000,166001,166003,166005,166007,166009],{},[56,166002,95],{},[56,166004,61],{},[56,166006,83],{},[56,166008,67],{},[56,166010,166011],{},[71,166012,106],{},[32,166014,166015,166017,166019,166021,166023],{},[56,166016,111],{},[56,166018,114],{},[56,166020,64],{},[56,166022,119],{},[56,166024,166025],{},[71,166026,124],{},[32,166028,166029,166031,166033,166035,166037],{},[56,166030,129],{},[56,166032,61],{},[56,166034,64],{},[56,166036,136],{},[56,166038,166039],{},[71,166040,141],{},[19,166042,144],{},[14,166044,148],{"id":147},[19,166046,151],{},[153,166048,166049],{"className":155,"code":156,"language":157,"meta":158,"style":158},[71,166050,166051,166071,166095,166115],{"__ignoreMap":158},[162,166052,166053,166055,166057,166059,166061,166063,166065,166067,166069],{"class":164,"line":165},[162,166054,169],{"class":168},[162,166056,173],{"class":172},[162,166058,176],{"class":168},[162,166060,180],{"class":179},[162,166062,183],{"class":168},[162,166064,186],{"class":179},[162,166066,183],{"class":168},[162,166068,191],{"class":179},[162,166070,194],{"class":168},[162,166072,166073,166075,166077,166079,166081,166083,166085,166087,166089,166091,166093],{"class":164,"line":197},[162,166074,200],{"class":168},[162,166076,173],{"class":172},[162,166078,176],{"class":168},[162,166080,208],{"class":207},[162,166082,183],{"class":168},[162,166084,213],{"class":207},[162,166086,183],{"class":168},[162,166088,218],{"class":207},[162,166090,183],{"class":168},[162,166092,223],{"class":207},[162,166094,194],{"class":168},[162,166096,166097,166099,166101,166103,166105,166107,166109,166111,166113],{"class":164,"line":228},[162,166098,231],{"class":168},[162,166100,173],{"class":172},[162,166102,176],{"class":168},[162,166104,180],{"class":179},[162,166106,183],{"class":168},[162,166108,242],{"class":207},[162,166110,183],{"class":168},[162,166112,247],{"class":207},[162,166114,194],{"class":168},[162,166116,166117,166119,166121],{"class":164,"line":252},[162,166118,255],{"class":168},[162,166120,173],{"class":172},[162,166122,260],{"class":168},[19,166124,263],{},[14,166126,267],{"id":266},[19,166128,270],{},[153,166130,166131],{"className":155,"code":273,"language":157,"meta":158,"style":158},[71,166132,166133,166153,166157,166167,166177],{"__ignoreMap":158},[162,166134,166135,166137,166139,166141,166143,166145,166147,166149,166151],{"class":164,"line":165},[162,166136,169],{"class":168},[162,166138,173],{"class":172},[162,166140,176],{"class":168},[162,166142,180],{"class":179},[162,166144,183],{"class":168},[162,166146,186],{"class":179},[162,166148,183],{"class":168},[162,166150,191],{"class":179},[162,166152,194],{"class":168},[162,166154,166155],{"class":164,"line":197},[162,166156,301],{"emptyLinePlaceholder":300},[162,166158,166159,166161,166163,166165],{"class":164,"line":228},[162,166160,306],{"class":207},[162,166162,309],{"class":168},[162,166164,312],{"class":207},[162,166166,315],{"class":168},[162,166168,166169,166171,166173,166175],{"class":164,"line":252},[162,166170,306],{"class":207},[162,166172,309],{"class":168},[162,166174,208],{"class":207},[162,166176,315],{"class":168},[162,166178,166179,166181,166183,166185],{"class":164,"line":328},[162,166180,306],{"class":207},[162,166182,309],{"class":168},[162,166184,213],{"class":207},[162,166186,315],{"class":168},[19,166188,339],{},[153,166190,166191],{"className":155,"code":342,"language":157,"meta":158,"style":158},[71,166192,166193,166207],{"__ignoreMap":158},[162,166194,166195,166197,166199,166201,166203,166205],{"class":164,"line":165},[162,166196,306],{"class":207},[162,166198,309],{"class":168},[162,166200,353],{"class":172},[162,166202,208],{"class":207},[162,166204,358],{"class":168},[162,166206,362],{"class":361},[162,166208,166209,166211,166213,166215,166217,166219],{"class":164,"line":197},[162,166210,306],{"class":207},[162,166212,309],{"class":168},[162,166214,353],{"class":172},[162,166216,213],{"class":207},[162,166218,358],{"class":168},[162,166220,377],{"class":361},[19,166222,380],{},[153,166224,166225],{"className":155,"code":383,"language":157,"meta":158,"style":158},[71,166226,166227],{"__ignoreMap":158},[162,166228,166229,166231,166233,166235],{"class":164,"line":165},[162,166230,306],{"class":207},[162,166232,309],{"class":168},[162,166234,218],{"class":207},[162,166236,315],{"class":168},[14,166238,399],{"id":398},[153,166240,166241],{"className":155,"code":402,"language":157,"meta":158,"style":158},[71,166242,166243,166259,166263,166271,166283,166295,166299],{"__ignoreMap":158},[162,166244,166245,166247,166249,166251,166253,166255,166257],{"class":164,"line":165},[162,166246,169],{"class":168},[162,166248,173],{"class":172},[162,166250,176],{"class":168},[162,166252,180],{"class":179},[162,166254,183],{"class":168},[162,166256,186],{"class":179},[162,166258,194],{"class":168},[162,166260,166261],{"class":164,"line":197},[162,166262,301],{"emptyLinePlaceholder":300},[162,166264,166265,166267,166269],{"class":164,"line":228},[162,166266,429],{"class":168},[162,166268,191],{"class":179},[162,166270,434],{"class":168},[162,166272,166273,166275,166277,166279,166281],{"class":164,"line":252},[162,166274,439],{"class":168},[162,166276,208],{"class":207},[162,166278,183],{"class":168},[162,166280,446],{"class":179},[162,166282,434],{"class":168},[162,166284,166285,166287,166289,166291,166293],{"class":164,"line":328},[162,166286,453],{"class":168},[162,166288,456],{"class":179},[162,166290,183],{"class":168},[162,166292,461],{"class":179},[162,166294,315],{"class":168},[162,166296,166297],{"class":164,"line":466},[162,166298,301],{"emptyLinePlaceholder":300},[162,166300,166301,166303],{"class":164,"line":471},[162,166302,306],{"class":207},[162,166304,476],{"class":168},[19,166306,479],{},[153,166308,166309],{"className":155,"code":482,"language":157,"meta":158,"style":158},[71,166310,166311,166319,166327,166339,166349],{"__ignoreMap":158},[162,166312,166313,166315,166317],{"class":164,"line":165},[162,166314,489],{"class":168},[162,166316,186],{"class":179},[162,166318,434],{"class":168},[162,166320,166321,166323,166325],{"class":164,"line":197},[162,166322,498],{"class":168},[162,166324,173],{"class":172},[162,166326,503],{"class":168},[162,166328,166329,166331,166333,166335,166337],{"class":164,"line":228},[162,166330,508],{"class":168},[162,166332,173],{"class":172},[162,166334,513],{"class":168},[162,166336,312],{"class":207},[162,166338,434],{"class":168},[162,166340,166341,166343,166345,166347],{"class":164,"line":252},[162,166342,522],{"class":172},[162,166344,525],{"class":168},[162,166346,312],{"class":207},[162,166348,194],{"class":168},[162,166350,166351],{"class":164,"line":328},[162,166352,534],{"class":168},[19,166354,537],{},[153,166356,166357],{"className":155,"code":540,"language":157,"meta":158,"style":158},[71,166358,166359,166387,166391,166401,166411],{"__ignoreMap":158},[162,166360,166361,166363,166365,166367,166369,166371,166373,166375,166377,166379,166381,166383,166385],{"class":164,"line":165},[162,166362,200],{"class":168},[162,166364,173],{"class":172},[162,166366,176],{"class":168},[162,166368,208],{"class":207},[162,166370,183],{"class":168},[162,166372,213],{"class":207},[162,166374,183],{"class":168},[162,166376,218],{"class":207},[162,166378,183],{"class":168},[162,166380,213],{"class":207},[162,166382,183],{"class":168},[162,166384,223],{"class":207},[162,166386,194],{"class":168},[162,166388,166389],{"class":164,"line":197},[162,166390,301],{"emptyLinePlaceholder":300},[162,166392,166393,166395,166397,166399],{"class":164,"line":228},[162,166394,306],{"class":207},[162,166396,581],{"class":168},[162,166398,218],{"class":207},[162,166400,586],{"class":168},[162,166402,166403,166405,166407,166409],{"class":164,"line":252},[162,166404,306],{"class":207},[162,166406,593],{"class":168},[162,166408,213],{"class":207},[162,166410,586],{"class":168},[162,166412,166413,166415,166417,166419],{"class":164,"line":328},[162,166414,306],{"class":207},[162,166416,604],{"class":168},[162,166418,607],{"class":207},[162,166420,610],{"class":168},[19,166422,613],{},[153,166424,166425],{"className":155,"code":616,"language":157,"meta":158,"style":158},[71,166426,166427,166451,166455,166459,166465,166469,166481,166487,166491,166495],{"__ignoreMap":158},[162,166428,166429,166431,166433,166435,166437,166439,166441,166443,166445,166447,166449],{"class":164,"line":165},[162,166430,200],{"class":168},[162,166432,173],{"class":172},[162,166434,176],{"class":168},[162,166436,218],{"class":207},[162,166438,183],{"class":168},[162,166440,208],{"class":207},[162,166442,183],{"class":168},[162,166444,637],{"class":207},[162,166446,183],{"class":168},[162,166448,213],{"class":207},[162,166450,194],{"class":168},[162,166452,166453],{"class":164,"line":197},[162,166454,301],{"emptyLinePlaceholder":300},[162,166456,166457],{"class":164,"line":228},[162,166458,652],{"class":168},[162,166460,166461,166463],{"class":164,"line":252},[162,166462,306],{"class":207},[162,166464,659],{"class":168},[162,166466,166467],{"class":164,"line":328},[162,166468,301],{"emptyLinePlaceholder":300},[162,166470,166471,166473,166475,166477,166479],{"class":164,"line":466},[162,166472,668],{"class":168},[162,166474,672],{"class":671},[162,166476,173],{"class":172},[162,166478,247],{"class":207},[162,166480,434],{"class":168},[162,166482,166483,166485],{"class":164,"line":471},[162,166484,306],{"class":207},[162,166486,659],{"class":168},[162,166488,166489],{"class":164,"line":687},[162,166490,301],{"emptyLinePlaceholder":300},[162,166492,166493],{"class":164,"line":692},[162,166494,695],{"class":168},[162,166496,166497,166499],{"class":164,"line":698},[162,166498,306],{"class":207},[162,166500,659],{"class":168},[19,166502,166503,708,166505,712],{},[71,166504,707],{},[71,166506,711],{},[153,166508,166509],{"className":155,"code":715,"language":157,"meta":158,"style":158},[71,166510,166511,166535,166545,166549,166555],{"__ignoreMap":158},[162,166512,166513,166515,166517,166519,166521,166523,166525,166527,166529,166531,166533],{"class":164,"line":165},[162,166514,200],{"class":168},[162,166516,173],{"class":172},[162,166518,176],{"class":168},[162,166520,218],{"class":207},[162,166522,183],{"class":168},[162,166524,208],{"class":207},[162,166526,183],{"class":168},[162,166528,637],{"class":207},[162,166530,183],{"class":168},[162,166532,213],{"class":207},[162,166534,194],{"class":168},[162,166536,166537,166539,166541,166543],{"class":164,"line":197},[162,166538,746],{"class":168},[162,166540,173],{"class":172},[162,166542,751],{"class":207},[162,166544,659],{"class":168},[162,166546,166547],{"class":164,"line":228},[162,166548,301],{"emptyLinePlaceholder":300},[162,166550,166551,166553],{"class":164,"line":252},[162,166552,306],{"class":207},[162,166554,659],{"class":168},[162,166556,166557,166559],{"class":164,"line":328},[162,166558,306],{"class":207},[162,166560,770],{"class":168},[14,166562,774],{"id":773},[153,166564,166565],{"className":155,"code":777,"language":157,"meta":158,"style":158},[71,166566,166567,166587,166591,166601],{"__ignoreMap":158},[162,166568,166569,166571,166573,166575,166577,166579,166581,166583,166585],{"class":164,"line":165},[162,166570,169],{"class":168},[162,166572,173],{"class":172},[162,166574,176],{"class":168},[162,166576,180],{"class":179},[162,166578,183],{"class":168},[162,166580,186],{"class":179},[162,166582,183],{"class":168},[162,166584,191],{"class":179},[162,166586,194],{"class":168},[162,166588,166589],{"class":164,"line":197},[162,166590,301],{"emptyLinePlaceholder":300},[162,166592,166593,166595,166597,166599],{"class":164,"line":228},[162,166594,808],{"class":172},[162,166596,811],{"class":168},[162,166598,814],{"class":172},[162,166600,817],{"class":168},[162,166602,166603,166605],{"class":164,"line":252},[162,166604,822],{"class":207},[162,166606,825],{"class":168},[19,166608,828],{},[153,166610,166611],{"className":155,"code":831,"language":157,"meta":158,"style":158},[71,166612,166613,166625],{"__ignoreMap":158},[162,166614,166615,166617,166619,166621,166623],{"class":164,"line":165},[162,166616,808],{"class":172},[162,166618,840],{"class":168},[162,166620,814],{"class":172},[162,166622,845],{"class":207},[162,166624,848],{"class":168},[162,166626,166627,166629],{"class":164,"line":197},[162,166628,822],{"class":207},[162,166630,855],{"class":168},[19,166632,858],{},[153,166634,166635],{"className":155,"code":861,"language":157,"meta":158,"style":158},[71,166636,166637,166661,166669,166673,166683,166691,166695,166709],{"__ignoreMap":158},[162,166638,166639,166641,166643,166645,166647,166649,166651,166653,166655,166657,166659],{"class":164,"line":165},[162,166640,868],{"class":168},[162,166642,173],{"class":172},[162,166644,176],{"class":168},[162,166646,875],{"class":207},[162,166648,183],{"class":168},[162,166650,880],{"class":207},[162,166652,183],{"class":168},[162,166654,885],{"class":207},[162,166656,183],{"class":168},[162,166658,890],{"class":207},[162,166660,194],{"class":168},[162,166662,166663,166665,166667],{"class":164,"line":197},[162,166664,897],{"class":168},[162,166666,173],{"class":172},[162,166668,902],{"class":207},[162,166670,166671],{"class":164,"line":228},[162,166672,301],{"emptyLinePlaceholder":300},[162,166674,166675,166677,166679,166681],{"class":164,"line":252},[162,166676,808],{"class":172},[162,166678,913],{"class":168},[162,166680,814],{"class":172},[162,166682,918],{"class":168},[162,166684,166685,166687,166689],{"class":164,"line":328},[162,166686,923],{"class":168},[162,166688,926],{"class":172},[162,166690,929],{"class":168},[162,166692,166693],{"class":164,"line":466},[162,166694,301],{"emptyLinePlaceholder":300},[162,166696,166697,166699,166701,166703,166705,166707],{"class":164,"line":471},[162,166698,938],{"class":168},[162,166700,173],{"class":172},[162,166702,943],{"class":168},[162,166704,946],{"class":172},[162,166706,949],{"class":207},[162,166708,952],{"class":168},[162,166710,166711,166713,166715,166717,166719,166721,166723,166725,166727,166729],{"class":164,"line":687},[162,166712,306],{"class":207},[162,166714,604],{"class":168},[162,166716,961],{"class":172},[162,166718,964],{"class":179},[162,166720,967],{"class":207},[162,166722,970],{"class":168},[162,166724,973],{"class":172},[162,166726,976],{"class":207},[162,166728,979],{"class":179},[162,166730,434],{"class":168},[14,166732,985],{"id":984},[19,166734,988],{},[153,166736,166737],{"className":155,"code":991,"language":157,"meta":158,"style":158},[71,166738,166739,166755],{"__ignoreMap":158},[162,166740,166741,166743,166745,166747,166749,166751,166753],{"class":164,"line":165},[162,166742,998],{"class":168},[162,166744,173],{"class":172},[162,166746,1003],{"class":168},[162,166748,1006],{"class":207},[162,166750,183],{"class":168},[162,166752,1011],{"class":207},[162,166754,434],{"class":168},[162,166756,166757,166759,166761,166763,166765,166767,166769,166771,166773],{"class":164,"line":197},[162,166758,1018],{"class":168},[162,166760,173],{"class":172},[162,166762,1003],{"class":168},[162,166764,180],{"class":179},[162,166766,183],{"class":168},[162,166768,242],{"class":207},[162,166770,183],{"class":168},[162,166772,1033],{"class":179},[162,166774,434],{"class":168},[19,166776,1038],{},[153,166778,166779],{"className":155,"code":1041,"language":157,"meta":158,"style":158},[71,166780,166781,166793,166805,166809,166821],{"__ignoreMap":158},[162,166782,166783,166785,166787,166789,166791],{"class":164,"line":165},[162,166784,1048],{"class":168},[162,166786,173],{"class":172},[162,166788,1003],{"class":168},[162,166790,1006],{"class":207},[162,166792,1057],{"class":168},[162,166794,166795,166797,166799,166801,166803],{"class":164,"line":197},[162,166796,1062],{"class":168},[162,166798,173],{"class":172},[162,166800,1003],{"class":168},[162,166802,1006],{"class":207},[162,166804,434],{"class":168},[162,166806,166807],{"class":164,"line":228},[162,166808,301],{"emptyLinePlaceholder":300},[162,166810,166811,166813,166815,166817,166819],{"class":164,"line":252},[162,166812,306],{"class":207},[162,166814,604],{"class":168},[162,166816,1083],{"class":207},[162,166818,1086],{"class":168},[162,166820,1089],{"class":361},[162,166822,166823,166825,166827,166829,166831],{"class":164,"line":328},[162,166824,306],{"class":207},[162,166826,604],{"class":168},[162,166828,1083],{"class":207},[162,166830,1100],{"class":168},[162,166832,1103],{"class":361},[19,166834,1106],{},[14,166836,1110],{"id":1109},[19,166838,1113],{},[153,166840,166841],{"className":155,"code":1116,"language":157,"meta":158,"style":158},[71,166842,166843,166851,166855,166865,166877,166881,166891],{"__ignoreMap":158},[162,166844,166845,166847,166849],{"class":164,"line":165},[162,166846,1123],{"class":168},[162,166848,173],{"class":172},[162,166850,1128],{"class":179},[162,166852,166853],{"class":164,"line":197},[162,166854,301],{"emptyLinePlaceholder":300},[162,166856,166857,166859,166861,166863],{"class":164,"line":228},[162,166858,306],{"class":207},[162,166860,1139],{"class":168},[162,166862,312],{"class":207},[162,166864,315],{"class":168},[162,166866,166867,166869,166871,166873,166875],{"class":164,"line":252},[162,166868,306],{"class":207},[162,166870,1139],{"class":168},[162,166872,353],{"class":172},[162,166874,208],{"class":207},[162,166876,315],{"class":168},[162,166878,166879],{"class":164,"line":328},[162,166880,301],{"emptyLinePlaceholder":300},[162,166882,166883,166885,166887,166889],{"class":164,"line":466},[162,166884,808],{"class":172},[162,166886,1166],{"class":168},[162,166888,814],{"class":172},[162,166890,1171],{"class":168},[162,166892,166893,166895],{"class":164,"line":471},[162,166894,822],{"class":207},[162,166896,1178],{"class":168},[19,166898,1181],{},[153,166900,166901],{"className":155,"code":1184,"language":157,"meta":158,"style":158},[71,166902,166903,166911],{"__ignoreMap":158},[162,166904,166905,166907,166909],{"class":164,"line":165},[162,166906,1123],{"class":168},[162,166908,173],{"class":172},[162,166910,1128],{"class":179},[162,166912,166913,166915,166917,166919,166921,166923],{"class":164,"line":197},[162,166914,1199],{"class":168},[162,166916,312],{"class":207},[162,166918,1204],{"class":168},[162,166920,173],{"class":172},[162,166922,1209],{"class":179},[162,166924,1212],{"class":361},[19,166926,1215],{},[153,166928,166929],{"className":155,"code":1218,"language":157,"meta":158,"style":158},[71,166930,166931,166939,166955],{"__ignoreMap":158},[162,166932,166933,166935,166937],{"class":164,"line":165},[162,166934,1123],{"class":168},[162,166936,173],{"class":172},[162,166938,1128],{"class":179},[162,166940,166941,166943,166945,166947,166949,166951,166953],{"class":164,"line":197},[162,166942,1123],{"class":168},[162,166944,173],{"class":172},[162,166946,1209],{"class":179},[162,166948,1239],{"class":172},[162,166950,1242],{"class":168},[162,166952,208],{"class":207},[162,166954,1247],{"class":168},[162,166956,166957,166959],{"class":164,"line":228},[162,166958,306],{"class":207},[162,166960,1254],{"class":168},[14,166962,1258],{"id":1257},[19,166964,1261],{},[153,166966,166967],{"className":155,"code":1264,"language":157,"meta":158,"style":158},[71,166968,166969],{"__ignoreMap":158},[162,166970,166971],{"class":164,"line":165},[162,166972,1264],{"class":168},[19,166974,1273],{},[153,166976,166977],{"className":155,"code":1276,"language":157,"meta":158,"style":158},[71,166978,166979,167015,167019,167035,167047,167059,167071],{"__ignoreMap":158},[162,166980,166981,166983,166985,166987,166989,166991,166993,166995,166997,166999,167001,167003,167005,167007,167009,167011,167013],{"class":164,"line":165},[162,166982,1283],{"class":168},[162,166984,173],{"class":172},[162,166986,176],{"class":168},[162,166988,312],{"class":207},[162,166990,183],{"class":168},[162,166992,208],{"class":207},[162,166994,183],{"class":168},[162,166996,213],{"class":207},[162,166998,183],{"class":168},[162,167000,218],{"class":207},[162,167002,183],{"class":168},[162,167004,223],{"class":207},[162,167006,183],{"class":168},[162,167008,637],{"class":207},[162,167010,183],{"class":168},[162,167012,1314],{"class":207},[162,167014,194],{"class":168},[162,167016,167017],{"class":164,"line":197},[162,167018,301],{"emptyLinePlaceholder":300},[162,167020,167021,167023,167025,167027,167029,167031,167033],{"class":164,"line":228},[162,167022,306],{"class":207},[162,167024,1327],{"class":168},[162,167026,208],{"class":207},[162,167028,1332],{"class":168},[162,167030,223],{"class":207},[162,167032,1337],{"class":168},[162,167034,1340],{"class":361},[162,167036,167037,167039,167041,167043,167045],{"class":164,"line":252},[162,167038,306],{"class":207},[162,167040,1347],{"class":168},[162,167042,218],{"class":207},[162,167044,1352],{"class":168},[162,167046,1355],{"class":361},[162,167048,167049,167051,167053,167055,167057],{"class":164,"line":328},[162,167050,306],{"class":207},[162,167052,1327],{"class":168},[162,167054,218],{"class":207},[162,167056,1366],{"class":168},[162,167058,1369],{"class":361},[162,167060,167061,167063,167065,167067,167069],{"class":164,"line":466},[162,167062,306],{"class":207},[162,167064,1376],{"class":168},[162,167066,213],{"class":207},[162,167068,1337],{"class":168},[162,167070,1383],{"class":361},[162,167072,167073,167075,167077,167079,167081,167083],{"class":164,"line":471},[162,167074,306],{"class":207},[162,167076,1376],{"class":168},[162,167078,353],{"class":172},[162,167080,208],{"class":207},[162,167082,1396],{"class":168},[162,167084,1399],{"class":361},[19,167086,1402],{},[153,167088,167089],{"className":155,"code":1405,"language":157,"meta":158,"style":158},[71,167090,167091,167099,167113],{"__ignoreMap":158},[162,167092,167093,167095,167097],{"class":164,"line":165},[162,167094,1123],{"class":168},[162,167096,173],{"class":172},[162,167098,1416],{"class":179},[162,167100,167101,167103,167105,167107,167109,167111],{"class":164,"line":197},[162,167102,306],{"class":207},[162,167104,1139],{"class":168},[162,167106,208],{"class":207},[162,167108,1332],{"class":168},[162,167110,223],{"class":207},[162,167112,315],{"class":168},[162,167114,167115,167117,167119,167121,167123],{"class":164,"line":228},[162,167116,306],{"class":207},[162,167118,1437],{"class":168},[162,167120,353],{"class":172},[162,167122,208],{"class":207},[162,167124,315],{"class":168},[14,167126,1447],{"id":1446},[19,167128,1450],{},[1452,167130,167131,167133,167135],{},[1455,167132,1457],{},[1455,167134,1460],{},[1455,167136,1463],{},[153,167138,167139],{"className":155,"code":1466,"language":157,"meta":158,"style":158},[71,167140,167141,167169],{"__ignoreMap":158},[162,167142,167143,167145,167147,167149,167151,167153,167155,167157,167159,167161,167163,167165,167167],{"class":164,"line":165},[162,167144,1283],{"class":168},[162,167146,173],{"class":172},[162,167148,1477],{"class":168},[162,167150,208],{"class":207},[162,167152,183],{"class":168},[162,167154,213],{"class":207},[162,167156,183],{"class":168},[162,167158,218],{"class":207},[162,167160,183],{"class":168},[162,167162,218],{"class":207},[162,167164,183],{"class":168},[162,167166,223],{"class":207},[162,167168,1498],{"class":168},[162,167170,167171,167173],{"class":164,"line":197},[162,167172,306],{"class":207},[162,167174,1505],{"class":168},[19,167176,1508],{},[153,167178,167179],{"className":155,"code":1511,"language":157,"meta":158,"style":158},[71,167180,167181],{"__ignoreMap":158},[162,167182,167183,167185,167187,167189],{"class":164,"line":165},[162,167184,1518],{"class":168},[162,167186,173],{"class":172},[162,167188,1523],{"class":207},[162,167190,1526],{"class":168},[19,167192,1529,167193,1533],{},[71,167194,1532],{},[19,167196,1536],{},[153,167198,167199],{"className":155,"code":1539,"language":157,"meta":158,"style":158},[71,167200,167201,167221,167225,167233,167241,167249],{"__ignoreMap":158},[162,167202,167203,167205,167207,167209,167211,167213,167215,167217,167219],{"class":164,"line":165},[162,167204,1518],{"class":168},[162,167206,173],{"class":172},[162,167208,1477],{"class":168},[162,167210,208],{"class":207},[162,167212,183],{"class":168},[162,167214,213],{"class":207},[162,167216,183],{"class":168},[162,167218,218],{"class":207},[162,167220,1498],{"class":168},[162,167222,167223],{"class":164,"line":197},[162,167224,301],{"emptyLinePlaceholder":300},[162,167226,167227,167229,167231],{"class":164,"line":228},[162,167228,1570],{"class":168},[162,167230,223],{"class":207},[162,167232,434],{"class":168},[162,167234,167235,167237,167239],{"class":164,"line":252},[162,167236,1579],{"class":168},[162,167238,213],{"class":207},[162,167240,434],{"class":168},[162,167242,167243,167245,167247],{"class":164,"line":328},[162,167244,1588],{"class":168},[162,167246,1006],{"class":207},[162,167248,434],{"class":168},[162,167250,167251,167253,167255,167257],{"class":164,"line":466},[162,167252,306],{"class":207},[162,167254,604],{"class":168},[162,167256,607],{"class":207},[162,167258,1603],{"class":168},[19,167260,1606],{},[153,167262,167263],{"className":155,"code":1609,"language":157,"meta":158,"style":158},[71,167264,167265,167285,167305,167309,167321,167333],{"__ignoreMap":158},[162,167266,167267,167269,167271,167273,167275,167277,167279,167281,167283],{"class":164,"line":165},[162,167268,1616],{"class":168},[162,167270,173],{"class":172},[162,167272,1477],{"class":168},[162,167274,208],{"class":207},[162,167276,183],{"class":168},[162,167278,213],{"class":207},[162,167280,183],{"class":168},[162,167282,218],{"class":207},[162,167284,1498],{"class":168},[162,167286,167287,167289,167291,167293,167295,167297,167299,167301,167303],{"class":164,"line":197},[162,167288,1637],{"class":168},[162,167290,173],{"class":172},[162,167292,1477],{"class":168},[162,167294,218],{"class":207},[162,167296,183],{"class":168},[162,167298,223],{"class":207},[162,167300,183],{"class":168},[162,167302,637],{"class":207},[162,167304,1498],{"class":168},[162,167306,167307],{"class":164,"line":228},[162,167308,301],{"emptyLinePlaceholder":300},[162,167310,167311,167313,167315,167317,167319],{"class":164,"line":252},[162,167312,306],{"class":207},[162,167314,1664],{"class":168},[162,167316,1667],{"class":172},[162,167318,1670],{"class":168},[162,167320,1673],{"class":361},[162,167322,167323,167325,167327,167329,167331],{"class":164,"line":328},[162,167324,306],{"class":207},[162,167326,1664],{"class":168},[162,167328,1682],{"class":172},[162,167330,1670],{"class":168},[162,167332,1687],{"class":361},[162,167334,167335,167337,167339,167341,167343],{"class":164,"line":466},[162,167336,306],{"class":207},[162,167338,1664],{"class":168},[162,167340,353],{"class":172},[162,167342,1670],{"class":168},[162,167344,1700],{"class":361},[14,167346,1704],{"id":1703},[19,167348,1707],{},[153,167350,167351],{"className":155,"code":1710,"language":157,"meta":158,"style":158},[71,167352,167353,167361,167371,167381,167389],{"__ignoreMap":158},[162,167354,167355,167357,167359],{"class":164,"line":165},[162,167356,1717],{"class":168},[162,167358,173],{"class":172},[162,167360,1722],{"class":168},[162,167362,167363,167365,167367,167369],{"class":164,"line":197},[162,167364,1727],{"class":179},[162,167366,1730],{"class":168},[162,167368,180],{"class":179},[162,167370,1735],{"class":168},[162,167372,167373,167375,167377,167379],{"class":164,"line":228},[162,167374,1740],{"class":179},[162,167376,1730],{"class":168},[162,167378,242],{"class":207},[162,167380,1735],{"class":168},[162,167382,167383,167385,167387],{"class":164,"line":252},[162,167384,1751],{"class":179},[162,167386,1730],{"class":168},[162,167388,1756],{"class":207},[162,167390,167391],{"class":164,"line":328},[162,167392,1498],{"class":168},[19,167394,1763],{},[153,167396,167397],{"className":155,"code":1766,"language":157,"meta":158,"style":158},[71,167398,167399,167409],{"__ignoreMap":158},[162,167400,167401,167403,167405,167407],{"class":164,"line":165},[162,167402,306],{"class":207},[162,167404,1775],{"class":168},[162,167406,1778],{"class":179},[162,167408,315],{"class":168},[162,167410,167411,167413,167415,167417],{"class":164,"line":197},[162,167412,306],{"class":207},[162,167414,1787],{"class":168},[162,167416,1778],{"class":179},[162,167418,586],{"class":168},[19,167420,1794],{},[153,167422,167423],{"className":155,"code":1797,"language":157,"meta":158,"style":158},[71,167424,167425,167435],{"__ignoreMap":158},[162,167426,167427,167429,167431,167433],{"class":164,"line":165},[162,167428,1804],{"class":168},[162,167430,1807],{"class":179},[162,167432,1810],{"class":168},[162,167434,1813],{"class":361},[162,167436,167437,167439,167441,167443],{"class":164,"line":197},[162,167438,1818],{"class":168},[162,167440,1807],{"class":179},[162,167442,1823],{"class":168},[162,167444,1826],{"class":361},[19,167446,1829],{},[153,167448,167449],{"className":155,"code":1832,"language":157,"meta":158,"style":158},[71,167450,167451],{"__ignoreMap":158},[162,167452,167453,167455,167457,167459,167461,167463],{"class":164,"line":165},[162,167454,306],{"class":207},[162,167456,1787],{"class":168},[162,167458,1807],{"class":179},[162,167460,183],{"class":168},[162,167462,1847],{"class":179},[162,167464,586],{"class":168},[19,167466,1852],{},[153,167468,167469],{"className":155,"code":1855,"language":157,"meta":158,"style":158},[71,167470,167471,167483],{"__ignoreMap":158},[162,167472,167473,167475,167477,167479,167481],{"class":164,"line":165},[162,167474,1804],{"class":168},[162,167476,1864],{"class":179},[162,167478,1204],{"class":168},[162,167480,173],{"class":172},[162,167482,1871],{"class":207},[162,167484,167485,167487,167489,167491,167493],{"class":164,"line":197},[162,167486,1804],{"class":168},[162,167488,1807],{"class":179},[162,167490,1204],{"class":168},[162,167492,173],{"class":172},[162,167494,1884],{"class":179},[19,167496,1887],{},[153,167498,167499],{"className":155,"code":1890,"language":157,"meta":158,"style":158},[71,167500,167501,167513,167523],{"__ignoreMap":158},[162,167502,167503,167505,167507,167509,167511],{"class":164,"line":165},[162,167504,1897],{"class":168},[162,167506,173],{"class":172},[162,167508,1902],{"class":168},[162,167510,1905],{"class":179},[162,167512,434],{"class":168},[162,167514,167515,167517,167519,167521],{"class":164,"line":197},[162,167516,522],{"class":172},[162,167518,1914],{"class":168},[162,167520,1864],{"class":179},[162,167522,194],{"class":168},[162,167524,167525],{"class":164,"line":228},[162,167526,1923],{"class":168},[14,167528,1927],{"id":1926},[19,167530,1930],{},[153,167532,167533],{"className":155,"code":1933,"language":157,"meta":158,"style":158},[71,167534,167535,167545],{"__ignoreMap":158},[162,167536,167537,167539,167541,167543],{"class":164,"line":165},[162,167538,808],{"class":172},[162,167540,1942],{"class":168},[162,167542,814],{"class":172},[162,167544,1947],{"class":168},[162,167546,167547,167549],{"class":164,"line":197},[162,167548,822],{"class":207},[162,167550,1954],{"class":168},[19,167552,1957],{},[153,167554,167555],{"className":155,"code":1960,"language":157,"meta":158,"style":158},[71,167556,167557,167567],{"__ignoreMap":158},[162,167558,167559,167561,167563,167565],{"class":164,"line":165},[162,167560,808],{"class":172},[162,167562,1969],{"class":168},[162,167564,814],{"class":172},[162,167566,1974],{"class":168},[162,167568,167569,167571],{"class":164,"line":197},[162,167570,822],{"class":207},[162,167572,1981],{"class":168},[19,167574,1984],{},[153,167576,167577],{"className":155,"code":1987,"language":157,"meta":158,"style":158},[71,167578,167579,167589],{"__ignoreMap":158},[162,167580,167581,167583,167585,167587],{"class":164,"line":165},[162,167582,808],{"class":172},[162,167584,1996],{"class":168},[162,167586,814],{"class":172},[162,167588,2001],{"class":168},[162,167590,167591,167593],{"class":164,"line":197},[162,167592,822],{"class":207},[162,167594,2008],{"class":168},[14,167596,2012],{"id":2011},[19,167598,2015],{},[153,167600,167601],{"className":155,"code":2018,"language":157,"meta":158,"style":158},[71,167602,167603,167611,167639,167667,167695,167699,167703,167713],{"__ignoreMap":158},[162,167604,167605,167607,167609],{"class":164,"line":165},[162,167606,2025],{"class":168},[162,167608,173],{"class":172},[162,167610,2030],{"class":168},[162,167612,167613,167615,167617,167619,167621,167623,167625,167627,167629,167631,167633,167635,167637],{"class":164,"line":197},[162,167614,2035],{"class":168},[162,167616,1778],{"class":179},[162,167618,1730],{"class":168},[162,167620,180],{"class":179},[162,167622,183],{"class":168},[162,167624,1864],{"class":179},[162,167626,1730],{"class":168},[162,167628,242],{"class":207},[162,167630,183],{"class":168},[162,167632,1905],{"class":179},[162,167634,1730],{"class":168},[162,167636,2058],{"class":207},[162,167638,2061],{"class":168},[162,167640,167641,167643,167645,167647,167649,167651,167653,167655,167657,167659,167661,167663,167665],{"class":164,"line":228},[162,167642,2035],{"class":168},[162,167644,1778],{"class":179},[162,167646,1730],{"class":168},[162,167648,186],{"class":179},[162,167650,183],{"class":168},[162,167652,1864],{"class":179},[162,167654,1730],{"class":168},[162,167656,2080],{"class":207},[162,167658,183],{"class":168},[162,167660,1905],{"class":179},[162,167662,1730],{"class":168},[162,167664,2089],{"class":207},[162,167666,2061],{"class":168},[162,167668,167669,167671,167673,167675,167677,167679,167681,167683,167685,167687,167689,167691,167693],{"class":164,"line":252},[162,167670,2035],{"class":168},[162,167672,1778],{"class":179},[162,167674,1730],{"class":168},[162,167676,191],{"class":179},[162,167678,183],{"class":168},[162,167680,1864],{"class":179},[162,167682,1730],{"class":168},[162,167684,2110],{"class":207},[162,167686,183],{"class":168},[162,167688,1905],{"class":179},[162,167690,1730],{"class":168},[162,167692,2119],{"class":207},[162,167694,2061],{"class":168},[162,167696,167697],{"class":164,"line":328},[162,167698,194],{"class":168},[162,167700,167701],{"class":164,"line":466},[162,167702,301],{"emptyLinePlaceholder":300},[162,167704,167705,167707,167709,167711],{"class":164,"line":471},[162,167706,808],{"class":172},[162,167708,2136],{"class":168},[162,167710,814],{"class":172},[162,167712,2141],{"class":168},[162,167714,167715,167717,167719,167721,167723,167725],{"class":164,"line":687},[162,167716,822],{"class":207},[162,167718,1775],{"class":168},[162,167720,1778],{"class":179},[162,167722,2152],{"class":168},[162,167724,1905],{"class":179},[162,167726,315],{"class":168},[19,167728,2159],{},[153,167730,167731],{"className":155,"code":2162,"language":157,"meta":158,"style":158},[71,167732,167733,167741,167745,167755,167767,167771,167785],{"__ignoreMap":158},[162,167734,167735,167737,167739],{"class":164,"line":165},[162,167736,897],{"class":168},[162,167738,173],{"class":172},[162,167740,902],{"class":207},[162,167742,167743],{"class":164,"line":197},[162,167744,301],{"emptyLinePlaceholder":300},[162,167746,167747,167749,167751,167753],{"class":164,"line":228},[162,167748,808],{"class":172},[162,167750,2136],{"class":168},[162,167752,814],{"class":172},[162,167754,2141],{"class":168},[162,167756,167757,167759,167761,167763,167765],{"class":164,"line":252},[162,167758,923],{"class":168},[162,167760,926],{"class":172},[162,167762,1914],{"class":168},[162,167764,1905],{"class":179},[162,167766,194],{"class":168},[162,167768,167769],{"class":164,"line":328},[162,167770,301],{"emptyLinePlaceholder":300},[162,167772,167773,167775,167777,167779,167781,167783],{"class":164,"line":466},[162,167774,938],{"class":168},[162,167776,173],{"class":172},[162,167778,943],{"class":168},[162,167780,946],{"class":172},[162,167782,949],{"class":207},[162,167784,2217],{"class":168},[162,167786,167787,167789,167791,167793,167795,167797,167799,167801,167803,167805],{"class":164,"line":471},[162,167788,306],{"class":207},[162,167790,604],{"class":168},[162,167792,961],{"class":172},[162,167794,964],{"class":179},[162,167796,967],{"class":207},[162,167798,970],{"class":168},[162,167800,973],{"class":172},[162,167802,976],{"class":207},[162,167804,979],{"class":179},[162,167806,434],{"class":168},[19,167808,2242],{},[153,167810,167811],{"className":155,"code":2245,"language":157,"meta":158,"style":158},[71,167812,167813,167827,167831,167841,167855,167861,167865,167871],{"__ignoreMap":158},[162,167814,167815,167817,167819,167821,167823,167825],{"class":164,"line":165},[162,167816,2252],{"class":168},[162,167818,173],{"class":172},[162,167820,2257],{"class":207},[162,167822,604],{"class":168},[162,167824,2262],{"class":179},[162,167826,434],{"class":168},[162,167828,167829],{"class":164,"line":197},[162,167830,301],{"emptyLinePlaceholder":300},[162,167832,167833,167835,167837,167839],{"class":164,"line":228},[162,167834,808],{"class":172},[162,167836,2136],{"class":168},[162,167838,814],{"class":172},[162,167840,2141],{"class":168},[162,167842,167843,167845,167847,167849,167851,167853],{"class":164,"line":252},[162,167844,2283],{"class":172},[162,167846,1914],{"class":168},[162,167848,1778],{"class":179},[162,167850,1204],{"class":168},[162,167852,2292],{"class":172},[162,167854,2295],{"class":168},[162,167856,167857,167859],{"class":164,"line":328},[162,167858,2300],{"class":207},[162,167860,2303],{"class":168},[162,167862,167863],{"class":164,"line":466},[162,167864,2308],{"class":172},[162,167866,167867,167869],{"class":164,"line":471},[162,167868,2313],{"class":172},[162,167870,2316],{"class":168},[162,167872,167873,167875,167877,167879],{"class":164,"line":687},[162,167874,822],{"class":207},[162,167876,604],{"class":168},[162,167878,2325],{"class":179},[162,167880,434],{"class":168},[14,167882,2331],{"id":2330},[19,167884,2334],{},[153,167886,167887],{"className":155,"code":2337,"language":157,"meta":158,"style":158},[71,167888,167889,167907,167917],{"__ignoreMap":158},[162,167890,167891,167893,167895,167897,167899,167901,167903,167905],{"class":164,"line":165},[162,167892,607],{"class":207},[162,167894,2346],{"class":168},[162,167896,208],{"class":207},[162,167898,183],{"class":168},[162,167900,213],{"class":207},[162,167902,183],{"class":168},[162,167904,218],{"class":207},[162,167906,315],{"class":168},[162,167908,167909,167911,167913,167915],{"class":164,"line":197},[162,167910,607],{"class":207},[162,167912,604],{"class":168},[162,167914,106],{"class":179},[162,167916,434],{"class":168},[162,167918,167919,167921,167923,167925,167927,167929],{"class":164,"line":228},[162,167920,607],{"class":207},[162,167922,2375],{"class":168},[162,167924,1778],{"class":179},[162,167926,1730],{"class":168},[162,167928,180],{"class":179},[162,167930,2384],{"class":168},[19,167932,2387],{},[153,167934,167935],{"className":155,"code":2390,"language":157,"meta":158,"style":158},[71,167936,167937,167955],{"__ignoreMap":158},[162,167938,167939,167941,167943,167945,167947,167949,167951,167953],{"class":164,"line":165},[162,167940,2397],{"class":207},[162,167942,2346],{"class":168},[162,167944,208],{"class":207},[162,167946,183],{"class":168},[162,167948,213],{"class":207},[162,167950,183],{"class":168},[162,167952,218],{"class":207},[162,167954,315],{"class":168},[162,167956,167957,167959,167961,167963,167965,167967,167969,167971],{"class":164,"line":197},[162,167958,2416],{"class":207},[162,167960,2346],{"class":168},[162,167962,208],{"class":207},[162,167964,183],{"class":168},[162,167966,213],{"class":207},[162,167968,183],{"class":168},[162,167970,218],{"class":207},[162,167972,315],{"class":168},[19,167974,2433],{},[153,167976,167977],{"className":155,"code":2436,"language":157,"meta":158,"style":158},[71,167978,167979],{"__ignoreMap":158},[162,167980,167981,167983,167985,167987,167989,167991,167993,167995],{"class":164,"line":165},[162,167982,2443],{"class":207},[162,167984,2346],{"class":168},[162,167986,208],{"class":207},[162,167988,183],{"class":168},[162,167990,213],{"class":207},[162,167992,183],{"class":168},[162,167994,218],{"class":207},[162,167996,315],{"class":168},[19,167998,613],{},[153,168000,168001],{"className":155,"code":2462,"language":157,"meta":158,"style":158},[71,168002,168003],{"__ignoreMap":158},[162,168004,168005,168007,168009,168011,168013,168015,168017,168019],{"class":164,"line":165},[162,168006,2469],{"class":207},[162,168008,2346],{"class":168},[162,168010,218],{"class":207},[162,168012,183],{"class":168},[162,168014,208],{"class":207},[162,168016,183],{"class":168},[162,168018,213],{"class":207},[162,168020,315],{"class":168},[19,168022,2486],{},[153,168024,168025],{"className":155,"code":2489,"language":157,"meta":158,"style":158},[71,168026,168027,168037,168055],{"__ignoreMap":158},[162,168028,168029,168031,168033,168035],{"class":164,"line":165},[162,168030,2496],{"class":207},[162,168032,604],{"class":168},[162,168034,106],{"class":179},[162,168036,434],{"class":168},[162,168038,168039,168041,168043,168045,168047,168049,168051,168053],{"class":164,"line":197},[162,168040,2507],{"class":207},[162,168042,2346],{"class":168},[162,168044,208],{"class":207},[162,168046,183],{"class":168},[162,168048,213],{"class":207},[162,168050,183],{"class":168},[162,168052,218],{"class":207},[162,168054,315],{"class":168},[162,168056,168057,168059,168061,168063,168065,168067,168069,168071,168073,168075],{"class":164,"line":228},[162,168058,2526],{"class":207},[162,168060,2346],{"class":168},[162,168062,208],{"class":207},[162,168064,183],{"class":168},[162,168066,208],{"class":207},[162,168068,183],{"class":168},[162,168070,213],{"class":207},[162,168072,183],{"class":168},[162,168074,218],{"class":207},[162,168076,315],{"class":168},[19,168078,2547],{},[153,168080,168081],{"className":155,"code":2550,"language":157,"meta":158,"style":158},[71,168082,168083,168097,168121],{"__ignoreMap":158},[162,168084,168085,168087,168089,168091,168093,168095],{"class":164,"line":165},[162,168086,306],{"class":207},[162,168088,604],{"class":168},[162,168090,2561],{"class":179},[162,168092,2564],{"class":172},[162,168094,2567],{"class":179},[162,168096,434],{"class":168},[162,168098,168099,168101,168103,168105,168107,168109,168111,168113,168115,168117,168119],{"class":164,"line":197},[162,168100,306],{"class":207},[162,168102,604],{"class":168},[162,168104,208],{"class":207},[162,168106,2564],{"class":172},[162,168108,176],{"class":168},[162,168110,208],{"class":207},[162,168112,183],{"class":168},[162,168114,213],{"class":207},[162,168116,183],{"class":168},[162,168118,218],{"class":207},[162,168120,315],{"class":168},[162,168122,168123,168125,168127,168129,168131,168133,168135,168137,168139],{"class":164,"line":228},[162,168124,306],{"class":207},[162,168126,604],{"class":168},[162,168128,1778],{"class":179},[162,168130,2564],{"class":172},[162,168132,1477],{"class":168},[162,168134,1778],{"class":179},[162,168136,1730],{"class":168},[162,168138,180],{"class":179},[162,168140,2384],{"class":168},[14,168142,2617],{"id":2616},[19,168144,2620],{},[19,168146,2623],{},[153,168148,168149],{"className":155,"code":2626,"language":157,"meta":158,"style":158},[71,168150,168151,168177],{"__ignoreMap":158},[162,168152,168153,168155,168157,168159,168161,168163,168165,168167,168169,168171,168173,168175],{"class":164,"line":165},[162,168154,1283],{"class":168},[162,168156,173],{"class":172},[162,168158,2637],{"class":168},[162,168160,808],{"class":172},[162,168162,2642],{"class":168},[162,168164,814],{"class":172},[162,168166,2647],{"class":207},[162,168168,604],{"class":168},[162,168170,208],{"class":207},[162,168172,183],{"class":168},[162,168174,1314],{"class":207},[162,168176,2658],{"class":168},[162,168178,168179,168181],{"class":164,"line":197},[162,168180,306],{"class":207},[162,168182,1505],{"class":168},[19,168184,2667],{},[153,168186,168187],{"className":155,"code":2670,"language":157,"meta":158,"style":158},[71,168188,168189,168229],{"__ignoreMap":158},[162,168190,168191,168193,168195,168197,168199,168201,168203,168205,168207,168209,168211,168213,168215,168217,168219,168221,168223,168225,168227],{"class":164,"line":165},[162,168192,2677],{"class":168},[162,168194,173],{"class":172},[162,168196,2637],{"class":168},[162,168198,808],{"class":172},[162,168200,2642],{"class":168},[162,168202,814],{"class":172},[162,168204,2647],{"class":207},[162,168206,604],{"class":168},[162,168208,208],{"class":207},[162,168210,183],{"class":168},[162,168212,2698],{"class":207},[162,168214,1823],{"class":168},[162,168216,2703],{"class":172},[162,168218,2642],{"class":168},[162,168220,2708],{"class":172},[162,168222,2711],{"class":207},[162,168224,2714],{"class":172},[162,168226,2717],{"class":207},[162,168228,194],{"class":168},[162,168230,168231,168233],{"class":164,"line":197},[162,168232,306],{"class":207},[162,168234,2726],{"class":168},[19,168236,2729],{},[153,168238,168239],{"className":155,"code":2732,"language":157,"meta":158,"style":158},[71,168240,168241,168271],{"__ignoreMap":158},[162,168242,168243,168245,168247,168249,168251,168253,168255,168257,168259,168261,168263,168265,168267,168269],{"class":164,"line":165},[162,168244,2739],{"class":168},[162,168246,173],{"class":172},[162,168248,2744],{"class":168},[162,168250,2747],{"class":172},[162,168252,2711],{"class":207},[162,168254,2752],{"class":172},[162,168256,2642],{"class":168},[162,168258,814],{"class":172},[162,168260,2647],{"class":207},[162,168262,604],{"class":168},[162,168264,208],{"class":207},[162,168266,183],{"class":168},[162,168268,1314],{"class":207},[162,168270,2769],{"class":168},[162,168272,168273,168275],{"class":164,"line":197},[162,168274,306],{"class":207},[162,168276,2776],{"class":168},[19,168278,2779],{},[153,168280,168281],{"className":155,"code":2782,"language":157,"meta":158,"style":158},[71,168282,168283,168301],{"__ignoreMap":158},[162,168284,168285,168287,168289,168291,168293,168295,168297,168299],{"class":164,"line":165},[162,168286,2789],{"class":168},[162,168288,173],{"class":172},[162,168290,2794],{"class":168},[162,168292,808],{"class":172},[162,168294,1166],{"class":168},[162,168296,814],{"class":172},[162,168298,2803],{"class":179},[162,168300,1498],{"class":168},[162,168302,168303,168305],{"class":164,"line":197},[162,168304,306],{"class":207},[162,168306,2812],{"class":168},[19,168308,2815],{},[14,168310,2819],{"id":2818},[153,168312,168313],{"className":155,"code":2822,"language":157,"meta":158,"style":158},[71,168314,168315,168323,168343,168363,168383,168403,168407,168411,168419,168431,168439,168443,168453,168465,168469,168487,168495,168499,168515,168519,168523,168537,168541,168563,168597],{"__ignoreMap":158},[162,168316,168317,168319,168321],{"class":164,"line":165},[162,168318,2025],{"class":168},[162,168320,173],{"class":172},[162,168322,2030],{"class":168},[162,168324,168325,168327,168329,168331,168333,168335,168337,168339,168341],{"class":164,"line":197},[162,168326,2035],{"class":168},[162,168328,1778],{"class":179},[162,168330,1730],{"class":168},[162,168332,180],{"class":179},[162,168334,183],{"class":168},[162,168336,1905],{"class":179},[162,168338,1730],{"class":168},[162,168340,2058],{"class":207},[162,168342,2061],{"class":168},[162,168344,168345,168347,168349,168351,168353,168355,168357,168359,168361],{"class":164,"line":228},[162,168346,2035],{"class":168},[162,168348,1778],{"class":179},[162,168350,1730],{"class":168},[162,168352,186],{"class":179},[162,168354,183],{"class":168},[162,168356,1905],{"class":179},[162,168358,1730],{"class":168},[162,168360,2089],{"class":207},[162,168362,2061],{"class":168},[162,168364,168365,168367,168369,168371,168373,168375,168377,168379,168381],{"class":164,"line":252},[162,168366,2035],{"class":168},[162,168368,1778],{"class":179},[162,168370,1730],{"class":168},[162,168372,191],{"class":179},[162,168374,183],{"class":168},[162,168376,1905],{"class":179},[162,168378,1730],{"class":168},[162,168380,2119],{"class":207},[162,168382,2061],{"class":168},[162,168384,168385,168387,168389,168391,168393,168395,168397,168399,168401],{"class":164,"line":328},[162,168386,2035],{"class":168},[162,168388,1778],{"class":179},[162,168390,1730],{"class":168},[162,168392,446],{"class":179},[162,168394,183],{"class":168},[162,168396,1905],{"class":179},[162,168398,1730],{"class":168},[162,168400,2911],{"class":207},[162,168402,2061],{"class":168},[162,168404,168405],{"class":164,"line":466},[162,168406,194],{"class":168},[162,168408,168409],{"class":164,"line":471},[162,168410,301],{"emptyLinePlaceholder":300},[162,168412,168413,168415,168417],{"class":164,"line":687},[162,168414,897],{"class":168},[162,168416,173],{"class":172},[162,168418,902],{"class":207},[162,168420,168421,168423,168425,168427,168429],{"class":164,"line":692},[162,168422,2934],{"class":168},[162,168424,173],{"class":172},[162,168426,2939],{"class":168},[162,168428,312],{"class":207},[162,168430,194],{"class":168},[162,168432,168433,168435,168437],{"class":164,"line":698},[162,168434,2948],{"class":168},[162,168436,173],{"class":172},[162,168438,260],{"class":168},[162,168440,168441],{"class":164,"line":2955},[162,168442,301],{"emptyLinePlaceholder":300},[162,168444,168445,168447,168449,168451],{"class":164,"line":2960},[162,168446,808],{"class":172},[162,168448,2136],{"class":168},[162,168450,814],{"class":172},[162,168452,2141],{"class":168},[162,168454,168455,168457,168459,168461,168463],{"class":164,"line":2971},[162,168456,923],{"class":168},[162,168458,926],{"class":172},[162,168460,1914],{"class":168},[162,168462,1905],{"class":179},[162,168464,194],{"class":168},[162,168466,168467],{"class":164,"line":2984},[162,168468,301],{"emptyLinePlaceholder":300},[162,168470,168471,168473,168475,168477,168479,168481,168483,168485],{"class":164,"line":2989},[162,168472,2283],{"class":172},[162,168474,1914],{"class":168},[162,168476,1905],{"class":179},[162,168478,1204],{"class":168},[162,168480,3000],{"class":172},[162,168482,3003],{"class":168},[162,168484,1905],{"class":179},[162,168486,3008],{"class":168},[162,168488,168489,168491,168493],{"class":164,"line":3011},[162,168490,3014],{"class":168},[162,168492,173],{"class":172},[162,168494,3019],{"class":168},[162,168496,168497],{"class":164,"line":3022},[162,168498,301],{"emptyLinePlaceholder":300},[162,168500,168501,168503,168505,168507,168509,168511,168513],{"class":164,"line":3027},[162,168502,2283],{"class":172},[162,168504,1914],{"class":168},[162,168506,1905],{"class":179},[162,168508,1204],{"class":168},[162,168510,3038],{"class":172},[162,168512,3041],{"class":207},[162,168514,2316],{"class":168},[162,168516,168517],{"class":164,"line":3046},[162,168518,3049],{"class":168},[162,168520,168521],{"class":164,"line":3052},[162,168522,301],{"emptyLinePlaceholder":300},[162,168524,168525,168527,168529,168531,168533,168535],{"class":164,"line":3057},[162,168526,938],{"class":168},[162,168528,173],{"class":172},[162,168530,943],{"class":168},[162,168532,946],{"class":172},[162,168534,949],{"class":207},[162,168536,2217],{"class":168},[162,168538,168539],{"class":164,"line":3072},[162,168540,301],{"emptyLinePlaceholder":300},[162,168542,168543,168545,168547,168549,168551,168553,168555,168557,168559,168561],{"class":164,"line":3077},[162,168544,306],{"class":207},[162,168546,604],{"class":168},[162,168548,961],{"class":172},[162,168550,964],{"class":179},[162,168552,967],{"class":207},[162,168554,970],{"class":168},[162,168556,973],{"class":172},[162,168558,976],{"class":207},[162,168560,979],{"class":179},[162,168562,434],{"class":168},[162,168564,168565,168567,168569,168571,168573,168575,168577,168579,168581,168583,168585,168587,168589,168591,168593,168595],{"class":164,"line":3100},[162,168566,306],{"class":207},[162,168568,604],{"class":168},[162,168570,961],{"class":172},[162,168572,3109],{"class":179},[162,168574,967],{"class":207},[162,168576,3114],{"class":168},[162,168578,3117],{"class":179},[162,168580,3120],{"class":168},[162,168582,976],{"class":207},[162,168584,1477],{"class":207},[162,168586,3114],{"class":168},[162,168588,3129],{"class":179},[162,168590,3120],{"class":168},[162,168592,976],{"class":207},[162,168594,979],{"class":179},[162,168596,434],{"class":168},[162,168598,168599,168601,168603,168605,168607,168609,168611,168613,168615],{"class":164,"line":3140},[162,168600,306],{"class":207},[162,168602,604],{"class":168},[162,168604,961],{"class":172},[162,168606,3149],{"class":179},[162,168608,3152],{"class":207},[162,168610,3155],{"class":168},[162,168612,976],{"class":207},[162,168614,979],{"class":179},[162,168616,434],{"class":168},[14,168618,3165],{"id":3164},[1452,168620,168621,168623,168625,168627,168631,168637],{},[1455,168622,3170],{},[1455,168624,3173],{},[1455,168626,3176],{},[1455,168628,3179,168629,3183],{},[71,168630,3182],{},[1455,168632,3186,168633,3190,168635,3183],{},[71,168634,3189],{},[71,168636,3193],{},[1455,168638,3196],{},[14,168640,3200],{"id":3199},[1452,168642,168643,168645,168647,168649,168651],{},[1455,168644,3205],{},[1455,168646,3208],{},[1455,168648,3211],{},[1455,168650,3214],{},[1455,168652,3217],{},[3219,168654,3221],{},{"title":158,"searchDepth":197,"depth":197,"links":168656},[168657,168658,168659,168660,168661,168662,168663,168664,168665,168666,168667,168668,168669,168670,168671,168672,168673],{"id":16,"depth":197,"text":17},{"id":147,"depth":197,"text":148},{"id":266,"depth":197,"text":267},{"id":398,"depth":197,"text":399},{"id":773,"depth":197,"text":774},{"id":984,"depth":197,"text":985},{"id":1109,"depth":197,"text":1110},{"id":1257,"depth":197,"text":1258},{"id":1446,"depth":197,"text":1447},{"id":1703,"depth":197,"text":1704},{"id":1926,"depth":197,"text":1927},{"id":2011,"depth":197,"text":2012},{"id":2330,"depth":197,"text":2331},{"id":2616,"depth":197,"text":2617},{"id":2818,"depth":197,"text":2819},{"id":3164,"depth":197,"text":3165},{"id":3199,"depth":197,"text":3200},{},{"title":5,"description":3241},{"id":168677,"title":168678,"body":168679,"description":3241,"extension":3242,"meta":170851,"navigation":300,"path":170852,"seo":170853,"stem":170854,"__hash__":170855},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":168680,"toc":170826},[168681,168684,168688,168691,168771,168774,168795,168798,168802,168805,168867,168870,168887,168891,168894,168939,168941,168949,168953,168956,169038,169041,169044,169069,169072,169095,169099,169102,169104,169166,169169,169171,169222,169226,169230,169236,169341,169345,169351,169422,169426,169429,169497,169500,169580,169584,169590,169626,169629,169632,169742,169748,169752,169755,169827,169830,169834,169838,169843,169905,169909,169914,169982,169986,169991,170107,170111,170114,170194,170197,170201,170204,170308,170310,170325,170328,170332,170470,170478,170482,170484,170495,170497,170755,170759,170791,170795,170823],[10,168682,168678],{"id":168683},"_7-函数进阶",[14,168685,168687],{"id":168686},"_71-多返回值","7.1 多返回值",[19,168689,168690],{},"Python 函数可以返回多个值，本质上返回的是元组。",[153,168692,168694],{"className":155,"code":168693,"language":157,"meta":158,"style":158},"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",[71,168695,168696,168705,168713,168721,168730,168737,168741,168745,168754,168760],{"__ignoreMap":158},[162,168697,168698,168700,168703],{"class":164,"line":165},[162,168699,35026],{"class":172},[162,168701,168702],{"class":5082}," get_info",[162,168704,35032],{"class":168},[162,168706,168707,168709,168711],{"class":164,"line":197},[162,168708,155416],{"class":168},[162,168710,173],{"class":172},[162,168712,152409],{"class":179},[162,168714,168715,168717,168719],{"class":164,"line":228},[162,168716,155432],{"class":168},[162,168718,173],{"class":172},[162,168720,149609],{"class":207},[162,168722,168723,168725,168727],{"class":164,"line":252},[162,168724,155447],{"class":168},[162,168726,173],{"class":172},[162,168728,168729],{"class":207}," 95\n",[162,168731,168732,168734],{"class":164,"line":328},[162,168733,7203],{"class":172},[162,168735,168736],{"class":168}," name, age, score\n",[162,168738,168739],{"class":164,"line":466},[162,168740,301],{"emptyLinePlaceholder":300},[162,168742,168743],{"class":164,"line":471},[162,168744,301],{"emptyLinePlaceholder":300},[162,168746,168747,168749,168751],{"class":164,"line":687},[162,168748,164326],{"class":168},[162,168750,173],{"class":172},[162,168752,168753],{"class":168}," get_info()\n",[162,168755,168756,168758],{"class":164,"line":692},[162,168757,306],{"class":207},[162,168759,79650],{"class":168},[162,168761,168762,168764,168766,168768],{"class":164,"line":698},[162,168763,306],{"class":207},[162,168765,604],{"class":168},[162,168767,1083],{"class":207},[162,168769,168770],{"class":168},"(result))\n",[19,168772,168773],{},"可以直接解包：",[153,168775,168777],{"className":155,"code":168776,"language":157,"meta":158,"style":158},"name, age, score = get_info()\nprint(name, age, score)\n",[71,168778,168779,168788],{"__ignoreMap":158},[162,168780,168781,168784,168786],{"class":164,"line":165},[162,168782,168783],{"class":168},"name, age, score ",[162,168785,173],{"class":172},[162,168787,168753],{"class":168},[162,168789,168790,168792],{"class":164,"line":197},[162,168791,306],{"class":207},[162,168793,168794],{"class":168},"(name, age, score)\n",[19,168796,168797],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,168799,168801],{"id":168800},"_72-位置参数","7.2 位置参数",[19,168803,168804],{},"位置参数按顺序传递。",[153,168806,168808],{"className":155,"code":168807,"language":157,"meta":158,"style":158},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[71,168809,168810,168818,168846,168850,168854],{"__ignoreMap":158},[162,168811,168812,168814,168816],{"class":164,"line":165},[162,168813,35026],{"class":172},[162,168815,152428],{"class":5082},[162,168817,152431],{"class":168},[162,168819,168820,168822,168824,168826,168828,168830,168832,168834,168836,168838,168840,168842,168844],{"class":164,"line":197},[162,168821,822],{"class":207},[162,168823,604],{"class":168},[162,168825,961],{"class":172},[162,168827,152442],{"class":179},[162,168829,967],{"class":207},[162,168831,82875],{"class":168},[162,168833,976],{"class":207},[162,168835,152451],{"class":179},[162,168837,967],{"class":207},[162,168839,73286],{"class":168},[162,168841,976],{"class":207},[162,168843,152460],{"class":179},[162,168845,434],{"class":168},[162,168847,168848],{"class":164,"line":228},[162,168849,301],{"emptyLinePlaceholder":300},[162,168851,168852],{"class":164,"line":252},[162,168853,301],{"emptyLinePlaceholder":300},[162,168855,168856,168859,168861,168863,168865],{"class":164,"line":328},[162,168857,168858],{"class":168},"introduce(",[162,168860,180],{"class":179},[162,168862,183],{"class":168},[162,168864,242],{"class":207},[162,168866,434],{"class":168},[19,168868,168869],{},"顺序错了就会得到错误含义：",[153,168871,168873],{"className":155,"code":168872,"language":157,"meta":158,"style":158},"introduce(18, \"小明\")\n",[71,168874,168875],{"__ignoreMap":158},[162,168876,168877,168879,168881,168883,168885],{"class":164,"line":165},[162,168878,168858],{"class":168},[162,168880,242],{"class":207},[162,168882,183],{"class":168},[162,168884,180],{"class":179},[162,168886,434],{"class":168},[14,168888,168890],{"id":168889},"_73-关键字参数","7.3 关键字参数",[19,168892,168893],{},"关键字参数按参数名传递。",[153,168895,168897],{"className":155,"code":168896,"language":157,"meta":158,"style":158},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[71,168898,168899,168919],{"__ignoreMap":158},[162,168900,168901,168903,168905,168907,168909,168911,168913,168915,168917],{"class":164,"line":165},[162,168902,168858],{"class":168},[162,168904,82875],{"class":671},[162,168906,173],{"class":172},[162,168908,180],{"class":179},[162,168910,183],{"class":168},[162,168912,73286],{"class":671},[162,168914,173],{"class":172},[162,168916,242],{"class":207},[162,168918,434],{"class":168},[162,168920,168921,168923,168925,168927,168929,168931,168933,168935,168937],{"class":164,"line":197},[162,168922,168858],{"class":168},[162,168924,73286],{"class":671},[162,168926,173],{"class":172},[162,168928,242],{"class":207},[162,168930,183],{"class":168},[162,168932,82875],{"class":671},[162,168934,173],{"class":172},[162,168936,180],{"class":179},[162,168938,434],{"class":168},[19,168940,120993],{},[1452,168942,168943,168946],{},[1455,168944,168945],{},"顺序不容易错。",[1455,168947,168948],{},"调用时可读性更强。",[14,168950,168952],{"id":168951},"_74-默认参数","7.4 默认参数",[19,168954,168955],{},"默认参数给参数设置默认值。",[153,168957,168959],{"className":155,"code":168958,"language":157,"meta":158,"style":158},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[71,168960,168961,168977,169007,169011,169015,169025],{"__ignoreMap":158},[162,168962,168963,168965,168967,168970,168972,168975],{"class":164,"line":165},[162,168964,35026],{"class":172},[162,168966,125151],{"class":5082},[162,168968,168969],{"class":168},"(host, port",[162,168971,173],{"class":172},[162,168973,168974],{"class":207},"3306",[162,168976,33870],{"class":168},[162,168978,168979,168981,168983,168985,168988,168990,168992,168994,168996,168998,169001,169003,169005],{"class":164,"line":197},[162,168980,822],{"class":207},[162,168982,604],{"class":168},[162,168984,961],{"class":172},[162,168986,168987],{"class":179},"\"连接",[162,168989,967],{"class":207},[162,168991,30485],{"class":168},[162,168993,976],{"class":207},[162,168995,1332],{"class":179},[162,168997,967],{"class":207},[162,168999,169000],{"class":168},"port",[162,169002,976],{"class":207},[162,169004,979],{"class":179},[162,169006,434],{"class":168},[162,169008,169009],{"class":164,"line":228},[162,169010,301],{"emptyLinePlaceholder":300},[162,169012,169013],{"class":164,"line":252},[162,169014,301],{"emptyLinePlaceholder":300},[162,169016,169017,169020,169023],{"class":164,"line":328},[162,169018,169019],{"class":168},"connect(",[162,169021,169022],{"class":179},"\"localhost\"",[162,169024,434],{"class":168},[162,169026,169027,169029,169031,169033,169036],{"class":164,"line":466},[162,169028,169019],{"class":168},[162,169030,169022],{"class":179},[162,169032,183],{"class":168},[162,169034,169035],{"class":207},"6379",[162,169037,434],{"class":168},[19,169039,169040],{},"注意：默认参数必须放在非默认参数后面。",[19,169042,169043],{},"错误：",[153,169045,169047],{"className":155,"code":169046,"language":157,"meta":158,"style":158},"def connect(port=3306, host):\n    pass\n",[71,169048,169049,169065],{"__ignoreMap":158},[162,169050,169051,169053,169055,169058,169060,169062],{"class":164,"line":165},[162,169052,35026],{"class":172},[162,169054,125151],{"class":5082},[162,169056,169057],{"class":168},"(port",[162,169059,173],{"class":172},[162,169061,168974],{"class":207},[162,169063,169064],{"class":168},", host):\n",[162,169066,169067],{"class":164,"line":197},[162,169068,152592],{"class":172},[19,169070,169071],{},"正确：",[153,169073,169075],{"className":155,"code":169074,"language":157,"meta":158,"style":158},"def connect(host, port=3306):\n    pass\n",[71,169076,169077,169091],{"__ignoreMap":158},[162,169078,169079,169081,169083,169085,169087,169089],{"class":164,"line":165},[162,169080,35026],{"class":172},[162,169082,125151],{"class":5082},[162,169084,168969],{"class":168},[162,169086,173],{"class":172},[162,169088,168974],{"class":207},[162,169090,33870],{"class":168},[162,169092,169093],{"class":164,"line":197},[162,169094,152592],{"class":172},[14,169096,169098],{"id":169097},"_75-默认参数的坑","7.5 默认参数的坑",[19,169100,169101],{},"不要使用可变对象作为默认参数。",[19,169103,160655],{},[153,169105,169107],{"className":155,"code":169106,"language":157,"meta":158,"style":158},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[71,169108,169109,169124,169129,169136,169140,169144,169155],{"__ignoreMap":158},[162,169110,169111,169113,169116,169119,169121],{"class":164,"line":165},[162,169112,35026],{"class":172},[162,169114,169115],{"class":5082}," add_item",[162,169117,169118],{"class":168},"(item, items",[162,169120,173],{"class":172},[162,169122,169123],{"class":168},"[]):\n",[162,169125,169126],{"class":164,"line":197},[162,169127,169128],{"class":168},"    items.append(item)\n",[162,169130,169131,169133],{"class":164,"line":228},[162,169132,7203],{"class":172},[162,169134,169135],{"class":168}," items\n",[162,169137,169138],{"class":164,"line":252},[162,169139,301],{"emptyLinePlaceholder":300},[162,169141,169142],{"class":164,"line":328},[162,169143,301],{"emptyLinePlaceholder":300},[162,169145,169146,169148,169151,169153],{"class":164,"line":466},[162,169147,306],{"class":207},[162,169149,169150],{"class":168},"(add_item(",[162,169152,2561],{"class":179},[162,169154,586],{"class":168},[162,169156,169157,169159,169161,169164],{"class":164,"line":471},[162,169158,306],{"class":207},[162,169160,169150],{"class":168},[162,169162,169163],{"class":179},"\"b\"",[162,169165,586],{"class":168},[19,169167,169168],{},"第二次调用会复用第一次的列表。",[19,169170,158923],{},[153,169172,169174],{"className":155,"code":169173,"language":157,"meta":158,"style":158},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[71,169175,169176,169190,169203,169212,169216],{"__ignoreMap":158},[162,169177,169178,169180,169182,169184,169186,169188],{"class":164,"line":165},[162,169179,35026],{"class":172},[162,169181,169115],{"class":5082},[162,169183,169118],{"class":168},[162,169185,173],{"class":172},[162,169187,98751],{"class":207},[162,169189,33870],{"class":168},[162,169191,169192,169194,169197,169199,169201],{"class":164,"line":197},[162,169193,2283],{"class":172},[162,169195,169196],{"class":168}," items ",[162,169198,42002],{"class":172},[162,169200,42008],{"class":207},[162,169202,2316],{"class":168},[162,169204,169205,169208,169210],{"class":164,"line":228},[162,169206,169207],{"class":168},"        items ",[162,169209,173],{"class":172},[162,169211,260],{"class":168},[162,169213,169214],{"class":164,"line":252},[162,169215,169128],{"class":168},[162,169217,169218,169220],{"class":164,"line":328},[162,169219,7203],{"class":172},[162,169221,169135],{"class":168},[14,169223,169225],{"id":169224},"_76-不定长参数","7.6 不定长参数",[3284,169227,169229],{"id":169228},"_761-args","7.6.1 *args",[19,169231,169232,169235],{},[71,169233,169234],{},"*args"," 接收任意数量的位置参数，得到元组。",[153,169237,169239],{"className":155,"code":169238,"language":157,"meta":158,"style":158},"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",[71,169240,169241,169254,169262,169273,169282,169288,169292,169296,169315],{"__ignoreMap":158},[162,169242,169243,169245,169247,169249,169251],{"class":164,"line":165},[162,169244,35026],{"class":172},[162,169246,8317],{"class":5082},[162,169248,604],{"class":168},[162,169250,3745],{"class":172},[162,169252,169253],{"class":168},"args):\n",[162,169255,169256,169258,169260],{"class":164,"line":197},[162,169257,923],{"class":168},[162,169259,173],{"class":172},[162,169261,902],{"class":207},[162,169263,169264,169266,169268,169270],{"class":164,"line":228},[162,169265,6315],{"class":172},[162,169267,159215],{"class":168},[162,169269,814],{"class":172},[162,169271,169272],{"class":168}," args:\n",[162,169274,169275,169277,169279],{"class":164,"line":252},[162,169276,163006],{"class":168},[162,169278,926],{"class":172},[162,169280,169281],{"class":168}," num\n",[162,169283,169284,169286],{"class":164,"line":328},[162,169285,7203],{"class":172},[162,169287,165307],{"class":168},[162,169289,169290],{"class":164,"line":466},[162,169291,301],{"emptyLinePlaceholder":300},[162,169293,169294],{"class":164,"line":471},[162,169295,301],{"emptyLinePlaceholder":300},[162,169297,169298,169300,169303,169305,169307,169309,169311,169313],{"class":164,"line":687},[162,169299,306],{"class":207},[162,169301,169302],{"class":168},"(add(",[162,169304,208],{"class":207},[162,169306,183],{"class":168},[162,169308,213],{"class":207},[162,169310,183],{"class":168},[162,169312,218],{"class":207},[162,169314,586],{"class":168},[162,169316,169317,169319,169321,169323,169325,169327,169329,169331,169333,169335,169337,169339],{"class":164,"line":692},[162,169318,306],{"class":207},[162,169320,169302],{"class":168},[162,169322,208],{"class":207},[162,169324,183],{"class":168},[162,169326,213],{"class":207},[162,169328,183],{"class":168},[162,169330,218],{"class":207},[162,169332,183],{"class":168},[162,169334,223],{"class":207},[162,169336,183],{"class":168},[162,169338,637],{"class":207},[162,169340,586],{"class":168},[3284,169342,169344],{"id":169343},"_762-kwargs","7.6.2 **kwargs",[19,169346,169347,169350],{},[71,169348,169349],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[153,169352,169354],{"className":155,"code":169353,"language":157,"meta":158,"style":158},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[71,169355,169356,169369,169380,169386,169390,169394],{"__ignoreMap":158},[162,169357,169358,169360,169362,169364,169366],{"class":164,"line":165},[162,169359,35026],{"class":172},[162,169361,164965],{"class":5082},[162,169363,604],{"class":168},[162,169365,2747],{"class":172},[162,169367,169368],{"class":168},"kwargs):\n",[162,169370,169371,169373,169375,169377],{"class":164,"line":197},[162,169372,6315],{"class":172},[162,169374,1996],{"class":168},[162,169376,814],{"class":172},[162,169378,169379],{"class":168}," kwargs.items():\n",[162,169381,169382,169384],{"class":164,"line":228},[162,169383,2300],{"class":207},[162,169385,2008],{"class":168},[162,169387,169388],{"class":164,"line":252},[162,169389,301],{"emptyLinePlaceholder":300},[162,169391,169392],{"class":164,"line":328},[162,169393,301],{"emptyLinePlaceholder":300},[162,169395,169396,169398,169400,169402,169404,169406,169408,169410,169412,169414,169416,169418,169420],{"class":164,"line":466},[162,169397,165030],{"class":168},[162,169399,82875],{"class":671},[162,169401,173],{"class":172},[162,169403,180],{"class":179},[162,169405,183],{"class":168},[162,169407,73286],{"class":671},[162,169409,173],{"class":172},[162,169411,242],{"class":207},[162,169413,183],{"class":168},[162,169415,73337],{"class":671},[162,169417,173],{"class":172},[162,169419,1033],{"class":179},[162,169421,434],{"class":168},[14,169423,169425],{"id":169424},"_77-参数解包","7.7 参数解包",[19,169427,169428],{},"列表或元组解包为位置参数：",[153,169430,169432],{"className":155,"code":169431,"language":157,"meta":158,"style":158},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[71,169433,169434,169443,169458,169462,169466,169486],{"__ignoreMap":158},[162,169435,169436,169438,169440],{"class":164,"line":165},[162,169437,35026],{"class":172},[162,169439,8317],{"class":5082},[162,169441,169442],{"class":168},"(a, b, c):\n",[162,169444,169445,169447,169449,169451,169453,169455],{"class":164,"line":197},[162,169446,7203],{"class":172},[162,169448,13967],{"class":168},[162,169450,3771],{"class":172},[162,169452,13980],{"class":168},[162,169454,3771],{"class":172},[162,169456,169457],{"class":168}," c\n",[162,169459,169460],{"class":164,"line":228},[162,169461,301],{"emptyLinePlaceholder":300},[162,169463,169464],{"class":164,"line":252},[162,169465,301],{"emptyLinePlaceholder":300},[162,169467,169468,169470,169472,169474,169476,169478,169480,169482,169484],{"class":164,"line":328},[162,169469,1283],{"class":168},[162,169471,173],{"class":172},[162,169473,176],{"class":168},[162,169475,208],{"class":207},[162,169477,183],{"class":168},[162,169479,213],{"class":207},[162,169481,183],{"class":168},[162,169483,218],{"class":207},[162,169485,194],{"class":168},[162,169487,169488,169490,169492,169494],{"class":164,"line":466},[162,169489,306],{"class":207},[162,169491,169302],{"class":168},[162,169493,3745],{"class":172},[162,169495,169496],{"class":168},"nums))\n",[19,169498,169499],{},"字典解包为关键字参数：",[153,169501,169503],{"className":155,"code":169502,"language":157,"meta":158,"style":158},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[71,169504,169505,169513,169539,169543,169547,169571],{"__ignoreMap":158},[162,169506,169507,169509,169511],{"class":164,"line":165},[162,169508,35026],{"class":172},[162,169510,152428],{"class":5082},[162,169512,152431],{"class":168},[162,169514,169515,169517,169519,169521,169523,169525,169527,169529,169531,169533,169535,169537],{"class":164,"line":197},[162,169516,822],{"class":207},[162,169518,604],{"class":168},[162,169520,961],{"class":172},[162,169522,979],{"class":179},[162,169524,967],{"class":207},[162,169526,82875],{"class":168},[162,169528,976],{"class":207},[162,169530,1477],{"class":207},[162,169532,73286],{"class":168},[162,169534,976],{"class":207},[162,169536,979],{"class":179},[162,169538,434],{"class":168},[162,169540,169541],{"class":164,"line":228},[162,169542,301],{"emptyLinePlaceholder":300},[162,169544,169545],{"class":164,"line":252},[162,169546,301],{"emptyLinePlaceholder":300},[162,169548,169549,169551,169553,169555,169557,169559,169561,169563,169565,169567,169569],{"class":164,"line":328},[162,169550,1018],{"class":168},[162,169552,173],{"class":172},[162,169554,1477],{"class":168},[162,169556,1778],{"class":179},[162,169558,1730],{"class":168},[162,169560,180],{"class":179},[162,169562,183],{"class":168},[162,169564,1864],{"class":179},[162,169566,1730],{"class":168},[162,169568,242],{"class":207},[162,169570,1498],{"class":168},[162,169572,169573,169575,169577],{"class":164,"line":466},[162,169574,168858],{"class":168},[162,169576,2747],{"class":172},[162,169578,169579],{"class":168},"info)\n",[14,169581,169583],{"id":169582},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,169585,169586,169589],{},[71,169587,169588],{},"lambda"," 用于定义简单匿名函数。",[153,169591,169593],{"className":155,"code":169592,"language":157,"meta":158,"style":158},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[71,169594,169595,169612],{"__ignoreMap":158},[162,169596,169597,169600,169602,169605,169608,169610],{"class":164,"line":165},[162,169598,169599],{"class":168},"add ",[162,169601,173],{"class":172},[162,169603,169604],{"class":172}," lambda",[162,169606,169607],{"class":168}," a, b: a ",[162,169609,3771],{"class":172},[162,169611,154155],{"class":168},[162,169613,169614,169616,169618,169620,169622,169624],{"class":164,"line":197},[162,169615,306],{"class":207},[162,169617,169302],{"class":168},[162,169619,208],{"class":207},[162,169621,183],{"class":168},[162,169623,213],{"class":207},[162,169625,586],{"class":168},[19,169627,169628],{},"常和排序、过滤等函数一起使用。",[19,169630,169631],{},"按分数排序：",[153,169633,169635],{"className":155,"code":169634,"language":157,"meta":158,"style":158},"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",[71,169636,169637,169645,169665,169685,169705,169709,169713,169736],{"__ignoreMap":158},[162,169638,169639,169641,169643],{"class":164,"line":165},[162,169640,2025],{"class":168},[162,169642,173],{"class":172},[162,169644,2030],{"class":168},[162,169646,169647,169649,169651,169653,169655,169657,169659,169661,169663],{"class":164,"line":197},[162,169648,2035],{"class":168},[162,169650,1778],{"class":179},[162,169652,1730],{"class":168},[162,169654,180],{"class":179},[162,169656,183],{"class":168},[162,169658,1905],{"class":179},[162,169660,1730],{"class":168},[162,169662,2058],{"class":207},[162,169664,2061],{"class":168},[162,169666,169667,169669,169671,169673,169675,169677,169679,169681,169683],{"class":164,"line":228},[162,169668,2035],{"class":168},[162,169670,1778],{"class":179},[162,169672,1730],{"class":168},[162,169674,186],{"class":179},[162,169676,183],{"class":168},[162,169678,1905],{"class":179},[162,169680,1730],{"class":168},[162,169682,2089],{"class":207},[162,169684,2061],{"class":168},[162,169686,169687,169689,169691,169693,169695,169697,169699,169701,169703],{"class":164,"line":252},[162,169688,2035],{"class":168},[162,169690,1778],{"class":179},[162,169692,1730],{"class":168},[162,169694,191],{"class":179},[162,169696,183],{"class":168},[162,169698,1905],{"class":179},[162,169700,1730],{"class":168},[162,169702,2119],{"class":207},[162,169704,2061],{"class":168},[162,169706,169707],{"class":164,"line":328},[162,169708,194],{"class":168},[162,169710,169711],{"class":164,"line":466},[162,169712,301],{"emptyLinePlaceholder":300},[162,169714,169715,169718,169720,169722,169724,169726,169728,169730,169732,169734],{"class":164,"line":471},[162,169716,169717],{"class":168},"students.sort(",[162,169719,156989],{"class":671},[162,169721,156992],{"class":172},[162,169723,156995],{"class":168},[162,169725,1905],{"class":179},[162,169727,115262],{"class":168},[162,169729,672],{"class":671},[162,169731,173],{"class":172},[162,169733,247],{"class":207},[162,169735,434],{"class":168},[162,169737,169738,169740],{"class":164,"line":687},[162,169739,306],{"class":207},[162,169741,2217],{"class":168},[19,169743,169744,169745,169747],{},"如果逻辑复杂，不要硬写 ",[71,169746,169588],{},"，定义普通函数更清晰。",[14,169749,169751],{"id":169750},"_79-函数作为参数","7.9 函数作为参数",[19,169753,169754],{},"函数可以作为参数传给另一个函数。",[153,169756,169758],{"className":155,"code":169757,"language":157,"meta":158,"style":158},"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",[71,169759,169760,169768,169778,169782,169786,169796,169803,169807,169811],{"__ignoreMap":158},[162,169761,169762,169764,169766],{"class":164,"line":165},[162,169763,35026],{"class":172},[162,169765,8317],{"class":5082},[162,169767,154144],{"class":168},[162,169769,169770,169772,169774,169776],{"class":164,"line":197},[162,169771,7203],{"class":172},[162,169773,13967],{"class":168},[162,169775,3771],{"class":172},[162,169777,154155],{"class":168},[162,169779,169780],{"class":164,"line":228},[162,169781,301],{"emptyLinePlaceholder":300},[162,169783,169784],{"class":164,"line":252},[162,169785,301],{"emptyLinePlaceholder":300},[162,169787,169788,169790,169793],{"class":164,"line":328},[162,169789,35026],{"class":172},[162,169791,169792],{"class":5082}," calculate",[162,169794,169795],{"class":168},"(a, b, func):\n",[162,169797,169798,169800],{"class":164,"line":466},[162,169799,7203],{"class":172},[162,169801,169802],{"class":168}," func(a, b)\n",[162,169804,169805],{"class":164,"line":471},[162,169806,301],{"emptyLinePlaceholder":300},[162,169808,169809],{"class":164,"line":687},[162,169810,301],{"emptyLinePlaceholder":300},[162,169812,169813,169815,169818,169820,169822,169824],{"class":164,"line":692},[162,169814,306],{"class":207},[162,169816,169817],{"class":168},"(calculate(",[162,169819,1006],{"class":207},[162,169821,183],{"class":168},[162,169823,1011],{"class":207},[162,169825,169826],{"class":168},", add))\n",[19,169828,169829],{},"这种思想在排序、回调、框架中经常出现。",[14,169831,169833],{"id":169832},"_710-mapfiltersorted","7.10 map、filter、sorted",[3284,169835,169837],{"id":169836},"_7101-map","7.10.1 map",[19,169839,169840,169842],{},[71,169841,77109],{}," 对每个元素执行函数。",[153,169844,169846],{"className":155,"code":169845,"language":157,"meta":158,"style":158},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[71,169847,169848,169872,169895],{"__ignoreMap":158},[162,169849,169850,169852,169854,169856,169858,169860,169862,169864,169866,169868,169870],{"class":164,"line":165},[162,169851,1283],{"class":168},[162,169853,173],{"class":172},[162,169855,176],{"class":168},[162,169857,208],{"class":207},[162,169859,183],{"class":168},[162,169861,213],{"class":207},[162,169863,183],{"class":168},[162,169865,218],{"class":207},[162,169867,183],{"class":168},[162,169869,223],{"class":207},[162,169871,194],{"class":168},[162,169873,169874,169876,169878,169881,169883,169885,169888,169890,169892],{"class":164,"line":197},[162,169875,164326],{"class":168},[162,169877,173],{"class":172},[162,169879,169880],{"class":207}," map",[162,169882,604],{"class":168},[162,169884,169588],{"class":172},[162,169886,169887],{"class":168}," x: x ",[162,169889,3745],{"class":172},[162,169891,2711],{"class":207},[162,169893,169894],{"class":168},", nums)\n",[162,169896,169897,169899,169901,169903],{"class":164,"line":228},[162,169898,306],{"class":207},[162,169900,604],{"class":168},[162,169902,2496],{"class":207},[162,169904,168770],{"class":168},[3284,169906,169908],{"id":169907},"_7102-filter","7.10.2 filter",[19,169910,169911,169913],{},[71,169912,83116],{}," 保留满足条件的元素。",[153,169915,169917],{"className":155,"code":169916,"language":157,"meta":158,"style":158},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[71,169918,169919,169947,169972],{"__ignoreMap":158},[162,169920,169921,169923,169925,169927,169929,169931,169933,169935,169937,169939,169941,169943,169945],{"class":164,"line":165},[162,169922,1283],{"class":168},[162,169924,173],{"class":172},[162,169926,176],{"class":168},[162,169928,208],{"class":207},[162,169930,183],{"class":168},[162,169932,213],{"class":207},[162,169934,183],{"class":168},[162,169936,218],{"class":207},[162,169938,183],{"class":168},[162,169940,223],{"class":207},[162,169942,183],{"class":168},[162,169944,637],{"class":207},[162,169946,194],{"class":168},[162,169948,169949,169951,169953,169956,169958,169960,169962,169964,169966,169968,169970],{"class":164,"line":197},[162,169950,164326],{"class":168},[162,169952,173],{"class":172},[162,169954,169955],{"class":207}," filter",[162,169957,604],{"class":168},[162,169959,169588],{"class":172},[162,169961,169887],{"class":168},[162,169963,2708],{"class":172},[162,169965,2711],{"class":207},[162,169967,2714],{"class":172},[162,169969,2717],{"class":207},[162,169971,169894],{"class":168},[162,169973,169974,169976,169978,169980],{"class":164,"line":228},[162,169975,306],{"class":207},[162,169977,604],{"class":168},[162,169979,2496],{"class":207},[162,169981,168770],{"class":168},[3284,169983,169985],{"id":169984},"_7103-sorted","7.10.3 sorted",[19,169987,169988,169990],{},[71,169989,2469],{}," 返回排序后的新列表。",[153,169992,169994],{"className":155,"code":169993,"language":157,"meta":158,"style":158},"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",[71,169995,169996,170004,170024,170044,170064,170068,170072,170101],{"__ignoreMap":158},[162,169997,169998,170000,170002],{"class":164,"line":165},[162,169999,2025],{"class":168},[162,170001,173],{"class":172},[162,170003,2030],{"class":168},[162,170005,170006,170008,170010,170012,170014,170016,170018,170020,170022],{"class":164,"line":197},[162,170007,2035],{"class":168},[162,170009,1778],{"class":179},[162,170011,1730],{"class":168},[162,170013,180],{"class":179},[162,170015,183],{"class":168},[162,170017,1905],{"class":179},[162,170019,1730],{"class":168},[162,170021,2058],{"class":207},[162,170023,2061],{"class":168},[162,170025,170026,170028,170030,170032,170034,170036,170038,170040,170042],{"class":164,"line":228},[162,170027,2035],{"class":168},[162,170029,1778],{"class":179},[162,170031,1730],{"class":168},[162,170033,186],{"class":179},[162,170035,183],{"class":168},[162,170037,1905],{"class":179},[162,170039,1730],{"class":168},[162,170041,2089],{"class":207},[162,170043,2061],{"class":168},[162,170045,170046,170048,170050,170052,170054,170056,170058,170060,170062],{"class":164,"line":252},[162,170047,2035],{"class":168},[162,170049,1778],{"class":179},[162,170051,1730],{"class":168},[162,170053,191],{"class":179},[162,170055,183],{"class":168},[162,170057,1905],{"class":179},[162,170059,1730],{"class":168},[162,170061,2119],{"class":207},[162,170063,2061],{"class":168},[162,170065,170066],{"class":164,"line":328},[162,170067,194],{"class":168},[162,170069,170070],{"class":164,"line":466},[162,170071,301],{"emptyLinePlaceholder":300},[162,170073,170074,170076,170078,170080,170083,170085,170087,170089,170091,170093,170095,170097,170099],{"class":164,"line":471},[162,170075,164326],{"class":168},[162,170077,173],{"class":172},[162,170079,751],{"class":207},[162,170081,170082],{"class":168},"(students, ",[162,170084,156989],{"class":671},[162,170086,156992],{"class":172},[162,170088,156995],{"class":168},[162,170090,1905],{"class":179},[162,170092,115262],{"class":168},[162,170094,672],{"class":671},[162,170096,173],{"class":172},[162,170098,247],{"class":207},[162,170100,434],{"class":168},[162,170102,170103,170105],{"class":164,"line":687},[162,170104,306],{"class":207},[162,170106,79650],{"class":168},[14,170108,170110],{"id":170109},"_711-闭包入门","7.11 闭包入门",[19,170112,170113],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[153,170115,170117],{"className":155,"code":170116,"language":157,"meta":158,"style":158},"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",[71,170118,170119,170129,170139,170150,170154,170161,170165,170169,170183],{"__ignoreMap":158},[162,170120,170121,170123,170126],{"class":164,"line":165},[162,170122,35026],{"class":172},[162,170124,170125],{"class":5082}," outer",[162,170127,170128],{"class":168},"(base):\n",[162,170130,170131,170133,170136],{"class":164,"line":197},[162,170132,33885],{"class":172},[162,170134,170135],{"class":5082}," inner",[162,170137,170138],{"class":168},"(num):\n",[162,170140,170141,170143,170146,170148],{"class":164,"line":228},[162,170142,17846],{"class":172},[162,170144,170145],{"class":168}," base ",[162,170147,3771],{"class":172},[162,170149,169281],{"class":168},[162,170151,170152],{"class":164,"line":252},[162,170153,301],{"emptyLinePlaceholder":300},[162,170155,170156,170158],{"class":164,"line":328},[162,170157,7203],{"class":172},[162,170159,170160],{"class":168}," inner\n",[162,170162,170163],{"class":164,"line":466},[162,170164,301],{"emptyLinePlaceholder":300},[162,170166,170167],{"class":164,"line":471},[162,170168,301],{"emptyLinePlaceholder":300},[162,170170,170171,170174,170176,170179,170181],{"class":164,"line":687},[162,170172,170173],{"class":168},"add_10 ",[162,170175,173],{"class":172},[162,170177,170178],{"class":168}," outer(",[162,170180,1006],{"class":207},[162,170182,434],{"class":168},[162,170184,170185,170187,170190,170192],{"class":164,"line":692},[162,170186,306],{"class":207},[162,170188,170189],{"class":168},"(add_10(",[162,170191,637],{"class":207},[162,170193,586],{"class":168},[19,170195,170196],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,170198,170200],{"id":170199},"_712-装饰器入门","7.12 装饰器入门",[19,170202,170203],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[153,170205,170207],{"className":155,"code":170206,"language":157,"meta":158,"style":158},"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",[71,170208,170209,170218,170227,170238,170243,170254,170258,170265,170269,170273,170278,170286,170296,170300,170304],{"__ignoreMap":158},[162,170210,170211,170213,170215],{"class":164,"line":165},[162,170212,35026],{"class":172},[162,170214,90256],{"class":5082},[162,170216,170217],{"class":168},"(func):\n",[162,170219,170220,170222,170225],{"class":164,"line":197},[162,170221,33885],{"class":172},[162,170223,170224],{"class":5082}," wrapper",[162,170226,35032],{"class":168},[162,170228,170229,170231,170233,170236],{"class":164,"line":228},[162,170230,2300],{"class":207},[162,170232,604],{"class":168},[162,170234,170235],{"class":179},"\"函数开始执行\"",[162,170237,434],{"class":168},[162,170239,170240],{"class":164,"line":252},[162,170241,170242],{"class":168},"        func()\n",[162,170244,170245,170247,170249,170252],{"class":164,"line":328},[162,170246,2300],{"class":207},[162,170248,604],{"class":168},[162,170250,170251],{"class":179},"\"函数执行结束\"",[162,170253,434],{"class":168},[162,170255,170256],{"class":164,"line":466},[162,170257,301],{"emptyLinePlaceholder":300},[162,170259,170260,170262],{"class":164,"line":471},[162,170261,7203],{"class":172},[162,170263,170264],{"class":168}," wrapper\n",[162,170266,170267],{"class":164,"line":687},[162,170268,301],{"emptyLinePlaceholder":300},[162,170270,170271],{"class":164,"line":692},[162,170272,301],{"emptyLinePlaceholder":300},[162,170274,170275],{"class":164,"line":698},[162,170276,170277],{"class":5082},"@log\n",[162,170279,170280,170282,170284],{"class":164,"line":2955},[162,170281,35026],{"class":172},[162,170283,164016],{"class":5082},[162,170285,35032],{"class":168},[162,170287,170288,170290,170292,170294],{"class":164,"line":2960},[162,170289,822],{"class":207},[162,170291,604],{"class":168},[162,170293,8951],{"class":179},[162,170295,434],{"class":168},[162,170297,170298],{"class":164,"line":2971},[162,170299,301],{"emptyLinePlaceholder":300},[162,170301,170302],{"class":164,"line":2984},[162,170303,301],{"emptyLinePlaceholder":300},[162,170305,170306],{"class":164,"line":2989},[162,170307,164051],{"class":168},[19,170309,161304],{},[153,170311,170313],{"className":155,"code":170312,"language":157,"meta":158,"style":158},"say_hello = log(say_hello)\n",[71,170314,170315],{"__ignoreMap":158},[162,170316,170317,170320,170322],{"class":164,"line":165},[162,170318,170319],{"class":168},"say_hello ",[162,170321,173],{"class":172},[162,170323,170324],{"class":168}," log(say_hello)\n",[19,170326,170327],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,170329,170331],{"id":170330},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[153,170333,170335],{"className":155,"code":170334,"language":157,"meta":158,"style":158},"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",[71,170336,170337,170345,170362,170372,170391,170401,170408,170412,170418,170422,170426,170430,170438,170448,170452,170456],{"__ignoreMap":158},[162,170338,170339,170341,170343],{"class":164,"line":165},[162,170340,35026],{"class":172},[162,170342,90256],{"class":5082},[162,170344,170217],{"class":168},[162,170346,170347,170349,170351,170353,170355,170358,170360],{"class":164,"line":197},[162,170348,33885],{"class":172},[162,170350,170224],{"class":5082},[162,170352,604],{"class":168},[162,170354,3745],{"class":172},[162,170356,170357],{"class":168},"args, ",[162,170359,2747],{"class":172},[162,170361,169368],{"class":168},[162,170363,170364,170366,170368,170370],{"class":164,"line":228},[162,170365,2300],{"class":207},[162,170367,604],{"class":168},[162,170369,170235],{"class":179},[162,170371,434],{"class":168},[162,170373,170374,170377,170379,170382,170384,170386,170388],{"class":164,"line":252},[162,170375,170376],{"class":168},"        result ",[162,170378,173],{"class":172},[162,170380,170381],{"class":168}," func(",[162,170383,3745],{"class":172},[162,170385,170357],{"class":168},[162,170387,2747],{"class":172},[162,170389,170390],{"class":168},"kwargs)\n",[162,170392,170393,170395,170397,170399],{"class":164,"line":328},[162,170394,2300],{"class":207},[162,170396,604],{"class":168},[162,170398,170251],{"class":179},[162,170400,434],{"class":168},[162,170402,170403,170405],{"class":164,"line":466},[162,170404,17846],{"class":172},[162,170406,170407],{"class":168}," result\n",[162,170409,170410],{"class":164,"line":471},[162,170411,301],{"emptyLinePlaceholder":300},[162,170413,170414,170416],{"class":164,"line":687},[162,170415,7203],{"class":172},[162,170417,170264],{"class":168},[162,170419,170420],{"class":164,"line":692},[162,170421,301],{"emptyLinePlaceholder":300},[162,170423,170424],{"class":164,"line":698},[162,170425,301],{"emptyLinePlaceholder":300},[162,170427,170428],{"class":164,"line":2955},[162,170429,170277],{"class":5082},[162,170431,170432,170434,170436],{"class":164,"line":2960},[162,170433,35026],{"class":172},[162,170435,8317],{"class":5082},[162,170437,154144],{"class":168},[162,170439,170440,170442,170444,170446],{"class":164,"line":2971},[162,170441,7203],{"class":172},[162,170443,13967],{"class":168},[162,170445,3771],{"class":172},[162,170447,154155],{"class":168},[162,170449,170450],{"class":164,"line":2984},[162,170451,301],{"emptyLinePlaceholder":300},[162,170453,170454],{"class":164,"line":2989},[162,170455,301],{"emptyLinePlaceholder":300},[162,170457,170458,170460,170462,170464,170466,170468],{"class":164,"line":3011},[162,170459,306],{"class":207},[162,170461,169302],{"class":168},[162,170463,1006],{"class":207},[162,170465,183],{"class":168},[162,170467,1011],{"class":207},[162,170469,586],{"class":168},[19,170471,170472,170473,104082,170475,170477],{},"这个写法使用 ",[71,170474,169234],{},[71,170476,169349],{}," 接收原函数的所有参数。",[14,170479,170481],{"id":170480},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,170483,126350],{},[1452,170485,170486,170489,170492],{},[1455,170487,170488],{},"给定一组学生数据。",[1455,170490,170491],{},"封装函数，根据传入规则筛选学生。",[1455,170493,170494],{},"筛选及格、优秀、未成年学生。",[19,170496,13135],{},[153,170498,170500],{"className":155,"code":170499,"language":157,"meta":158,"style":158},"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",[71,170501,170502,170510,170538,170566,170594,170598,170602,170606,170616,170624,170634,170641,170646,170652,170656,170660,170684,170707,170730,170734,170741,170748],{"__ignoreMap":158},[162,170503,170504,170506,170508],{"class":164,"line":165},[162,170505,2025],{"class":168},[162,170507,173],{"class":172},[162,170509,2030],{"class":168},[162,170511,170512,170514,170516,170518,170520,170522,170524,170526,170528,170530,170532,170534,170536],{"class":164,"line":197},[162,170513,2035],{"class":168},[162,170515,1778],{"class":179},[162,170517,1730],{"class":168},[162,170519,180],{"class":179},[162,170521,183],{"class":168},[162,170523,1864],{"class":179},[162,170525,1730],{"class":168},[162,170527,242],{"class":207},[162,170529,183],{"class":168},[162,170531,1905],{"class":179},[162,170533,1730],{"class":168},[162,170535,2058],{"class":207},[162,170537,2061],{"class":168},[162,170539,170540,170542,170544,170546,170548,170550,170552,170554,170556,170558,170560,170562,170564],{"class":164,"line":228},[162,170541,2035],{"class":168},[162,170543,1778],{"class":179},[162,170545,1730],{"class":168},[162,170547,186],{"class":179},[162,170549,183],{"class":168},[162,170551,1864],{"class":179},[162,170553,1730],{"class":168},[162,170555,2080],{"class":207},[162,170557,183],{"class":168},[162,170559,1905],{"class":179},[162,170561,1730],{"class":168},[162,170563,2089],{"class":207},[162,170565,2061],{"class":168},[162,170567,170568,170570,170572,170574,170576,170578,170580,170582,170584,170586,170588,170590,170592],{"class":164,"line":252},[162,170569,2035],{"class":168},[162,170571,1778],{"class":179},[162,170573,1730],{"class":168},[162,170575,191],{"class":179},[162,170577,183],{"class":168},[162,170579,1864],{"class":179},[162,170581,1730],{"class":168},[162,170583,2110],{"class":207},[162,170585,183],{"class":168},[162,170587,1905],{"class":179},[162,170589,1730],{"class":168},[162,170591,2911],{"class":207},[162,170593,2061],{"class":168},[162,170595,170596],{"class":164,"line":328},[162,170597,194],{"class":168},[162,170599,170600],{"class":164,"line":466},[162,170601,301],{"emptyLinePlaceholder":300},[162,170603,170604],{"class":164,"line":471},[162,170605,301],{"emptyLinePlaceholder":300},[162,170607,170608,170610,170613],{"class":164,"line":687},[162,170609,35026],{"class":172},[162,170611,170612],{"class":5082}," filter_students",[162,170614,170615],{"class":168},"(students, condition):\n",[162,170617,170618,170620,170622],{"class":164,"line":692},[162,170619,164243],{"class":168},[162,170621,173],{"class":172},[162,170623,260],{"class":168},[162,170625,170626,170628,170630,170632],{"class":164,"line":698},[162,170627,6315],{"class":172},[162,170629,2136],{"class":168},[162,170631,814],{"class":172},[162,170633,2141],{"class":168},[162,170635,170636,170638],{"class":164,"line":2955},[162,170637,5614],{"class":172},[162,170639,170640],{"class":168}," condition(student):\n",[162,170642,170643],{"class":164,"line":2960},[162,170644,170645],{"class":168},"            result.append(student)\n",[162,170647,170648,170650],{"class":164,"line":2971},[162,170649,7203],{"class":172},[162,170651,170407],{"class":168},[162,170653,170654],{"class":164,"line":2984},[162,170655,301],{"emptyLinePlaceholder":300},[162,170657,170658],{"class":164,"line":2989},[162,170659,301],{"emptyLinePlaceholder":300},[162,170661,170662,170664,170666,170669,170671,170674,170676,170678,170680,170682],{"class":164,"line":3011},[162,170663,2948],{"class":168},[162,170665,173],{"class":172},[162,170667,170668],{"class":168}," filter_students(students, ",[162,170670,169588],{"class":172},[162,170672,170673],{"class":168}," s: s[",[162,170675,1905],{"class":179},[162,170677,1204],{"class":168},[162,170679,3038],{"class":172},[162,170681,3041],{"class":207},[162,170683,434],{"class":168},[162,170685,170686,170689,170691,170693,170695,170697,170699,170701,170703,170705],{"class":164,"line":3022},[162,170687,170688],{"class":168},"excellent ",[162,170690,173],{"class":172},[162,170692,170668],{"class":168},[162,170694,169588],{"class":172},[162,170696,170673],{"class":168},[162,170698,1905],{"class":179},[162,170700,1204],{"class":168},[162,170702,3038],{"class":172},[162,170704,160819],{"class":207},[162,170706,434],{"class":168},[162,170708,170709,170712,170714,170716,170718,170720,170722,170724,170726,170728],{"class":164,"line":3027},[162,170710,170711],{"class":168},"under_age ",[162,170713,173],{"class":172},[162,170715,170668],{"class":168},[162,170717,169588],{"class":172},[162,170719,170673],{"class":168},[162,170721,1864],{"class":179},[162,170723,1204],{"class":168},[162,170725,4187],{"class":172},[162,170727,159320],{"class":207},[162,170729,434],{"class":168},[162,170731,170732],{"class":164,"line":3046},[162,170733,301],{"emptyLinePlaceholder":300},[162,170735,170736,170738],{"class":164,"line":3052},[162,170737,306],{"class":207},[162,170739,170740],{"class":168},"(passed)\n",[162,170742,170743,170745],{"class":164,"line":3057},[162,170744,306],{"class":207},[162,170746,170747],{"class":168},"(excellent)\n",[162,170749,170750,170752],{"class":164,"line":3072},[162,170751,306],{"class":207},[162,170753,170754],{"class":168},"(under_age)\n",[14,170756,170758],{"id":170757},"_715-易错点","7.15 易错点",[1452,170760,170761,170764,170772,170777,170788],{},[1455,170762,170763],{},"默认参数不要写可变对象。",[1455,170765,170766,170768,170769,170771],{},[71,170767,169234],{}," 是元组，",[71,170770,169349],{}," 是字典。",[1455,170773,170774,170776],{},[71,170775,169588],{}," 只适合简单表达式。",[1455,170778,170779,104082,170781,170783,170784,170787],{},[71,170780,77109],{},[71,170782,83116],{}," 的结果是迭代器，常用 ",[71,170785,170786],{},"list()"," 转换查看。",[1455,170789,170790],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,170792,170794],{"id":170793},"_716-本章练习","7.16 本章练习",[1452,170796,170797,170804,170810,170815,170820],{},[1455,170798,170799,170800,170803],{},"写函数 ",[71,170801,170802],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[1455,170805,170799,170806,170809],{},[71,170807,170808],{},"print_user(**kwargs)","，输出用户所有字段。",[1455,170811,3186,170812,170814],{},[71,170813,169588],{}," 对学生列表按年龄排序。",[1455,170816,3186,170817,170819],{},[71,170818,83116],{}," 找出成绩不及格的学生。",[1455,170821,170822],{},"写一个装饰器，统计函数执行前后的提示信息。",[3219,170824,170825],{},"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":158,"searchDepth":197,"depth":197,"links":170827},[170828,170829,170830,170831,170832,170833,170837,170838,170839,170840,170845,170846,170847,170848,170849,170850],{"id":168686,"depth":197,"text":168687},{"id":168800,"depth":197,"text":168801},{"id":168889,"depth":197,"text":168890},{"id":168951,"depth":197,"text":168952},{"id":169097,"depth":197,"text":169098},{"id":169224,"depth":197,"text":169225,"children":170834},[170835,170836],{"id":169228,"depth":228,"text":169229},{"id":169343,"depth":228,"text":169344},{"id":169424,"depth":197,"text":169425},{"id":169582,"depth":197,"text":169583},{"id":169750,"depth":197,"text":169751},{"id":169832,"depth":197,"text":169833,"children":170841},[170842,170843,170844],{"id":169836,"depth":228,"text":169837},{"id":169907,"depth":228,"text":169908},{"id":169984,"depth":228,"text":169985},{"id":170109,"depth":197,"text":170110},{"id":170199,"depth":197,"text":170200},{"id":170330,"depth":197,"text":170331},{"id":170480,"depth":197,"text":170481},{"id":170757,"depth":197,"text":170758},{"id":170793,"depth":197,"text":170794},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":168678,"description":3241},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":170857,"title":170858,"body":170859,"description":3241,"extension":3242,"meta":173378,"navigation":300,"path":173379,"seo":173380,"stem":173381,"__hash__":173382},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":170860,"toc":173353},[170861,170864,170868,170871,170874,170905,170909,170913,170916,170943,170947,170950,171001,171004,171019,171022,171057,171061,171063,171087,171090,171150,171154,171158,171161,171218,171221,171241,171245,171248,171311,171315,171318,171374,171381,171405,171409,171412,171475,171479,171484,171535,171538,171542,171547,171614,171617,171699,171703,171708,171759,171762,171766,171769,171772,171780,171783,171829,171832,171878,171882,171888,171932,171935,171981,171984,172024,172027,172088,172092,172095,172185,172188,172330,172333,172400,172404,172407,172410,172551,172554,172632,172635,172811,172815,172817,172828,172830,173029,173033,173277,173281,173315,173319,173350],[10,170862,170858],{"id":170863},"_8-文件操作",[14,170865,170867],{"id":170866},"_81-文件操作的意义","8.1 文件操作的意义",[19,170869,170870],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,170872,170873],{},"常见文件类型：",[1452,170875,170876,170882,170888,170894,170900],{},[1455,170877,170878,170881],{},[71,170879,170880],{},".txt","：普通文本。",[1455,170883,170884,170887],{},[71,170885,170886],{},".csv","：表格文本。",[1455,170889,170890,170893],{},[71,170891,170892],{},".json","：结构化数据。",[1455,170895,170896,170899],{},[71,170897,170898],{},".log","：日志文件。",[1455,170901,170902,170904],{},[71,170903,149410],{},"：Python 源代码。",[14,170906,170908],{"id":170907},"_82-路径","8.2 路径",[3284,170910,170912],{"id":170911},"_821-相对路径","8.2.1 相对路径",[19,170914,170915],{},"相对当前运行目录：",[153,170917,170919],{"className":155,"code":170918,"language":157,"meta":158,"style":158},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[71,170920,170921],{"__ignoreMap":158},[162,170922,170923,170925,170927,170929,170931,170933,170935,170937,170939,170941],{"class":164,"line":165},[162,170924,89980],{"class":207},[162,170926,604],{"class":168},[162,170928,149854],{"class":179},[162,170930,183],{"class":168},[162,170932,149859],{"class":179},[162,170934,183],{"class":168},[162,170936,149864],{"class":671},[162,170938,173],{"class":172},[162,170940,149869],{"class":179},[162,170942,434],{"class":168},[3284,170944,170946],{"id":170945},"_822-绝对路径","8.2.2 绝对路径",[19,170948,170949],{},"从根目录或盘符开始：",[153,170951,170953],{"className":155,"code":170952,"language":157,"meta":158,"style":158},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[71,170954,170955,170978],{"__ignoreMap":158},[162,170956,170957,170959,170961,170964,170966,170968,170970,170972,170974,170976],{"class":164,"line":165},[162,170958,89980],{"class":207},[162,170960,604],{"class":168},[162,170962,170963],{"class":179},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[162,170965,183],{"class":168},[162,170967,149859],{"class":179},[162,170969,183],{"class":168},[162,170971,149864],{"class":671},[162,170973,173],{"class":172},[162,170975,149869],{"class":179},[162,170977,434],{"class":168},[162,170979,170980,170982,170984,170987,170989,170991,170993,170995,170997,170999],{"class":164,"line":197},[162,170981,89980],{"class":207},[162,170983,604],{"class":168},[162,170985,170986],{"class":179},"\"D:\u002Fdata\u002Fdata.txt\"",[162,170988,183],{"class":168},[162,170990,149859],{"class":179},[162,170992,183],{"class":168},[162,170994,149864],{"class":671},[162,170996,173],{"class":172},[162,170998,149869],{"class":179},[162,171000,434],{"class":168},[19,171002,171003],{},"Windows 路径建议写成：",[153,171005,171007],{"className":155,"code":171006,"language":157,"meta":158,"style":158},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[71,171008,171009],{"__ignoreMap":158},[162,171010,171011,171014,171016],{"class":164,"line":165},[162,171012,171013],{"class":168},"path ",[162,171015,173],{"class":172},[162,171017,171018],{"class":179}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,171020,171021],{},"或原始字符串：",[153,171023,171025],{"className":155,"code":171024,"language":157,"meta":158,"style":158},"path = r\"D:\\data\\data.txt\"\n",[71,171026,171027],{"__ignoreMap":158},[162,171028,171029,171031,171033,171035,171037,171040,171043,171046,171048,171050,171052,171055],{"class":164,"line":165},[162,171030,171013],{"class":168},[162,171032,173],{"class":172},[162,171034,20212],{"class":172},[162,171036,979],{"class":179},[162,171038,171039],{"class":51050},"D:",[162,171041,171042],{"class":207},"\\d",[162,171044,171045],{"class":51050},"ata",[162,171047,171042],{"class":207},[162,171049,171045],{"class":51050},[162,171051,3847],{"class":207},[162,171053,171054],{"class":51050},"txt",[162,171056,28225],{"class":179},[14,171058,171060],{"id":171059},"_83-open函数","8.3 open函数",[19,171062,8289],{},[153,171064,171066],{"className":155,"code":171065,"language":157,"meta":158,"style":158},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[71,171067,171068],{"__ignoreMap":158},[162,171069,171070,171072,171074,171076,171079,171081,171083,171085],{"class":164,"line":165},[162,171071,48429],{"class":671},[162,171073,16659],{"class":172},[162,171075,149849],{"class":207},[162,171077,171078],{"class":168},"(文件路径, 打开模式, ",[162,171080,149864],{"class":671},[162,171082,173],{"class":172},[162,171084,149869],{"class":179},[162,171086,434],{"class":168},[19,171088,171089],{},"常见模式：",[26,171091,171092,171101],{},[29,171093,171094],{},[32,171095,171096,171099],{},[35,171097,171098],{},"模式",[35,171100,28960],{},[51,171102,171103,171112,171121,171130,171140],{},[32,171104,171105,171109],{},[56,171106,171107],{},[71,171108,3955],{},[56,171110,171111],{},"只读，文件不存在会报错",[32,171113,171114,171118],{},[56,171115,171116],{},[71,171117,4077],{},[56,171119,171120],{},"只写，文件不存在会创建，存在会清空",[32,171122,171123,171127],{},[56,171124,171125],{},[71,171126,3538],{},[56,171128,171129],{},"追加，文件不存在会创建",[32,171131,171132,171137],{},[56,171133,171134],{},[71,171135,171136],{},"rb",[56,171138,171139],{},"二进制只读",[32,171141,171142,171147],{},[56,171143,171144],{},[71,171145,171146],{},"wb",[56,171148,171149],{},"二进制只写",[14,171151,171153],{"id":171152},"_84-读取文件","8.4 读取文件",[3284,171155,171157],{"id":171156},"_841-read","8.4.1 read",[19,171159,171160],{},"一次读取全部内容：",[153,171162,171164],{"className":155,"code":171163,"language":157,"meta":158,"style":158},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[71,171165,171166,171192,171204,171211],{"__ignoreMap":158},[162,171167,171168,171170,171172,171174,171176,171178,171180,171182,171184,171186,171188,171190],{"class":164,"line":165},[162,171169,48429],{"class":671},[162,171171,16659],{"class":172},[162,171173,149849],{"class":207},[162,171175,604],{"class":168},[162,171177,149854],{"class":179},[162,171179,183],{"class":168},[162,171181,149859],{"class":179},[162,171183,183],{"class":168},[162,171185,149864],{"class":671},[162,171187,173],{"class":172},[162,171189,149869],{"class":179},[162,171191,434],{"class":168},[162,171193,171194,171197,171199,171201],{"class":164,"line":197},[162,171195,171196],{"class":168},"content ",[162,171198,173],{"class":172},[162,171200,151210],{"class":671},[162,171202,171203],{"class":168},".read()\n",[162,171205,171206,171208],{"class":164,"line":228},[162,171207,306],{"class":207},[162,171209,171210],{"class":168},"(content)\n",[162,171212,171213,171215],{"class":164,"line":252},[162,171214,48429],{"class":671},[162,171216,171217],{"class":168},".close()\n",[19,171219,171220],{},"可以指定读取字符数：",[153,171222,171224],{"className":155,"code":171223,"language":157,"meta":158,"style":158},"content = file.read(10)\n",[71,171225,171226],{"__ignoreMap":158},[162,171227,171228,171230,171232,171234,171237,171239],{"class":164,"line":165},[162,171229,171196],{"class":168},[162,171231,173],{"class":172},[162,171233,151210],{"class":671},[162,171235,171236],{"class":168},".read(",[162,171238,1006],{"class":207},[162,171240,434],{"class":168},[3284,171242,171244],{"id":171243},"_842-readline","8.4.2 readline",[19,171246,171247],{},"一次读取一行：",[153,171249,171251],{"className":155,"code":171250,"language":157,"meta":158,"style":158},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[71,171252,171253,171279,171283,171294,171301,171305],{"__ignoreMap":158},[162,171254,171255,171257,171259,171261,171263,171265,171267,171269,171271,171273,171275,171277],{"class":164,"line":165},[162,171256,48429],{"class":671},[162,171258,16659],{"class":172},[162,171260,149849],{"class":207},[162,171262,604],{"class":168},[162,171264,149854],{"class":179},[162,171266,183],{"class":168},[162,171268,149859],{"class":179},[162,171270,183],{"class":168},[162,171272,149864],{"class":671},[162,171274,173],{"class":172},[162,171276,149869],{"class":179},[162,171278,434],{"class":168},[162,171280,171281],{"class":164,"line":197},[162,171282,301],{"emptyLinePlaceholder":300},[162,171284,171285,171287,171289,171291],{"class":164,"line":228},[162,171286,150309],{"class":168},[162,171288,173],{"class":172},[162,171290,151210],{"class":671},[162,171292,171293],{"class":168},".readline()\n",[162,171295,171296,171298],{"class":164,"line":252},[162,171297,306],{"class":207},[162,171299,171300],{"class":168},"(line)\n",[162,171302,171303],{"class":164,"line":328},[162,171304,301],{"emptyLinePlaceholder":300},[162,171306,171307,171309],{"class":164,"line":466},[162,171308,48429],{"class":671},[162,171310,171217],{"class":168},[3284,171312,171314],{"id":171313},"_843-readlines","8.4.3 readlines",[19,171316,171317],{},"读取所有行，返回列表：",[153,171319,171321],{"className":155,"code":171320,"language":157,"meta":158,"style":158},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[71,171322,171323,171349,171361,171368],{"__ignoreMap":158},[162,171324,171325,171327,171329,171331,171333,171335,171337,171339,171341,171343,171345,171347],{"class":164,"line":165},[162,171326,48429],{"class":671},[162,171328,16659],{"class":172},[162,171330,149849],{"class":207},[162,171332,604],{"class":168},[162,171334,149854],{"class":179},[162,171336,183],{"class":168},[162,171338,149859],{"class":179},[162,171340,183],{"class":168},[162,171342,149864],{"class":671},[162,171344,173],{"class":172},[162,171346,149869],{"class":179},[162,171348,434],{"class":168},[162,171350,171351,171354,171356,171358],{"class":164,"line":197},[162,171352,171353],{"class":168},"lines ",[162,171355,173],{"class":172},[162,171357,151210],{"class":671},[162,171359,171360],{"class":168},".readlines()\n",[162,171362,171363,171365],{"class":164,"line":228},[162,171364,306],{"class":207},[162,171366,171367],{"class":168},"(lines)\n",[162,171369,171370,171372],{"class":164,"line":252},[162,171371,48429],{"class":671},[162,171373,171217],{"class":168},[19,171375,171376,171377,171380],{},"每一行通常带有换行符，可以用 ",[71,171378,171379],{},"strip()"," 去掉：",[153,171382,171384],{"className":155,"code":171383,"language":157,"meta":158,"style":158},"for line in lines:\n    print(line.strip())\n",[71,171385,171386,171398],{"__ignoreMap":158},[162,171387,171388,171390,171393,171395],{"class":164,"line":165},[162,171389,808],{"class":172},[162,171391,171392],{"class":168}," line ",[162,171394,814],{"class":172},[162,171396,171397],{"class":168}," lines:\n",[162,171399,171400,171402],{"class":164,"line":197},[162,171401,822],{"class":207},[162,171403,171404],{"class":168},"(line.strip())\n",[3284,171406,171408],{"id":171407},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,171410,171411],{},"推荐读取大文件时使用：",[153,171413,171415],{"className":155,"code":171414,"language":157,"meta":158,"style":158},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[71,171416,171417,171443,171447,171459,171465,171469],{"__ignoreMap":158},[162,171418,171419,171421,171423,171425,171427,171429,171431,171433,171435,171437,171439,171441],{"class":164,"line":165},[162,171420,48429],{"class":671},[162,171422,16659],{"class":172},[162,171424,149849],{"class":207},[162,171426,604],{"class":168},[162,171428,149854],{"class":179},[162,171430,183],{"class":168},[162,171432,149859],{"class":179},[162,171434,183],{"class":168},[162,171436,149864],{"class":671},[162,171438,173],{"class":172},[162,171440,149869],{"class":179},[162,171442,434],{"class":168},[162,171444,171445],{"class":164,"line":197},[162,171446,301],{"emptyLinePlaceholder":300},[162,171448,171449,171451,171453,171455,171457],{"class":164,"line":228},[162,171450,808],{"class":172},[162,171452,171392],{"class":168},[162,171454,814],{"class":172},[162,171456,151210],{"class":671},[162,171458,2316],{"class":168},[162,171460,171461,171463],{"class":164,"line":252},[162,171462,822],{"class":207},[162,171464,171404],{"class":168},[162,171466,171467],{"class":164,"line":328},[162,171468,301],{"emptyLinePlaceholder":300},[162,171470,171471,171473],{"class":164,"line":466},[162,171472,48429],{"class":671},[162,171474,171217],{"class":168},[14,171476,171478],{"id":171477},"_85-with语句","8.5 with语句",[19,171480,171481,171483],{},[71,171482,110894],{}," 会自动关闭文件，推荐使用。",[153,171485,171487],{"className":155,"code":171486,"language":157,"meta":158,"style":158},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[71,171488,171489,171519,171529],{"__ignoreMap":158},[162,171490,171491,171493,171495,171497,171499,171501,171503,171505,171507,171509,171511,171513,171515,171517],{"class":164,"line":165},[162,171492,110894],{"class":172},[162,171494,149849],{"class":207},[162,171496,604],{"class":168},[162,171498,149854],{"class":179},[162,171500,183],{"class":168},[162,171502,149859],{"class":179},[162,171504,183],{"class":168},[162,171506,149864],{"class":671},[162,171508,173],{"class":172},[162,171510,149869],{"class":179},[162,171512,1823],{"class":168},[162,171514,34466],{"class":172},[162,171516,151210],{"class":671},[162,171518,2316],{"class":168},[162,171520,171521,171523,171525,171527],{"class":164,"line":197},[162,171522,149881],{"class":168},[162,171524,173],{"class":172},[162,171526,151210],{"class":671},[162,171528,171203],{"class":168},[162,171530,171531,171533],{"class":164,"line":228},[162,171532,822],{"class":207},[162,171534,171210],{"class":168},[19,171536,171537],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,171539,171541],{"id":171540},"_86-写入文件","8.6 写入文件",[19,171543,171544,171546],{},[71,171545,4077],{}," 模式会清空原文件。",[153,171548,171550],{"className":155,"code":171549,"language":157,"meta":158,"style":158},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[71,171551,171552,171582,171599],{"__ignoreMap":158},[162,171553,171554,171556,171558,171560,171562,171564,171566,171568,171570,171572,171574,171576,171578,171580],{"class":164,"line":165},[162,171555,110894],{"class":172},[162,171557,149849],{"class":207},[162,171559,604],{"class":168},[162,171561,149854],{"class":179},[162,171563,183],{"class":168},[162,171565,155026],{"class":179},[162,171567,183],{"class":168},[162,171569,149864],{"class":671},[162,171571,173],{"class":172},[162,171573,149869],{"class":179},[162,171575,1823],{"class":168},[162,171577,34466],{"class":172},[162,171579,151210],{"class":671},[162,171581,2316],{"class":168},[162,171583,171584,171587,171590,171593,171595,171597],{"class":164,"line":197},[162,171585,171586],{"class":671},"    file",[162,171588,171589],{"class":168},".write(",[162,171591,171592],{"class":179},"\"hello",[162,171594,159559],{"class":207},[162,171596,979],{"class":179},[162,171598,434],{"class":168},[162,171600,171601,171603,171605,171608,171610,171612],{"class":164,"line":228},[162,171602,171586],{"class":671},[162,171604,171589],{"class":168},[162,171606,171607],{"class":179},"\"python",[162,171609,159559],{"class":207},[162,171611,979],{"class":179},[162,171613,434],{"class":168},[19,171615,171616],{},"写入多行：",[153,171618,171620],{"className":155,"code":171619,"language":157,"meta":158,"style":158},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[71,171621,171622,171657,171661,171692],{"__ignoreMap":158},[162,171623,171624,171626,171628,171630,171633,171635,171637,171639,171642,171644,171646,171648,171651,171653,171655],{"class":164,"line":165},[162,171625,171353],{"class":168},[162,171627,173],{"class":172},[162,171629,176],{"class":168},[162,171631,171632],{"class":179},"\"小明,18",[162,171634,159559],{"class":207},[162,171636,979],{"class":179},[162,171638,183],{"class":168},[162,171640,171641],{"class":179},"\"小红,17",[162,171643,159559],{"class":207},[162,171645,979],{"class":179},[162,171647,183],{"class":168},[162,171649,171650],{"class":179},"\"小刚,19",[162,171652,159559],{"class":207},[162,171654,979],{"class":179},[162,171656,194],{"class":168},[162,171658,171659],{"class":164,"line":197},[162,171660,301],{"emptyLinePlaceholder":300},[162,171662,171663,171665,171667,171669,171672,171674,171676,171678,171680,171682,171684,171686,171688,171690],{"class":164,"line":228},[162,171664,110894],{"class":172},[162,171666,149849],{"class":207},[162,171668,604],{"class":168},[162,171670,171671],{"class":179},"\"students.txt\"",[162,171673,183],{"class":168},[162,171675,155026],{"class":179},[162,171677,183],{"class":168},[162,171679,149864],{"class":671},[162,171681,173],{"class":172},[162,171683,149869],{"class":179},[162,171685,1823],{"class":168},[162,171687,34466],{"class":172},[162,171689,151210],{"class":671},[162,171691,2316],{"class":168},[162,171693,171694,171696],{"class":164,"line":252},[162,171695,171586],{"class":671},[162,171697,171698],{"class":168},".writelines(lines)\n",[14,171700,171702],{"id":171701},"_87-追加文件","8.7 追加文件",[19,171704,171705,171707],{},[71,171706,3538],{}," 模式不会清空原内容，而是在末尾追加。",[153,171709,171711],{"className":155,"code":171710,"language":157,"meta":158,"style":158},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[71,171712,171713,171744],{"__ignoreMap":158},[162,171714,171715,171717,171719,171721,171724,171726,171728,171730,171732,171734,171736,171738,171740,171742],{"class":164,"line":165},[162,171716,110894],{"class":172},[162,171718,149849],{"class":207},[162,171720,604],{"class":168},[162,171722,171723],{"class":179},"\"log.txt\"",[162,171725,183],{"class":168},[162,171727,2561],{"class":179},[162,171729,183],{"class":168},[162,171731,149864],{"class":671},[162,171733,173],{"class":172},[162,171735,149869],{"class":179},[162,171737,1823],{"class":168},[162,171739,34466],{"class":172},[162,171741,151210],{"class":671},[162,171743,2316],{"class":168},[162,171745,171746,171748,171750,171753,171755,171757],{"class":164,"line":197},[162,171747,171586],{"class":671},[162,171749,171589],{"class":168},[162,171751,171752],{"class":179},"\"程序启动",[162,171754,159559],{"class":207},[162,171756,979],{"class":179},[162,171758,434],{"class":168},[19,171760,171761],{},"日志类文件常用追加模式。",[14,171763,171765],{"id":171764},"_88-文件编码","8.8 文件编码",[19,171767,171768],{},"编码决定文字如何保存为字节。",[19,171770,171771],{},"常见编码：",[1452,171773,171774,171777],{},[1455,171775,171776],{},"UTF-8：推荐。",[1455,171778,171779],{},"GBK：部分 Windows 中文文件常见。",[19,171781,171782],{},"读取文件乱码时，可以尝试：",[153,171784,171786],{"className":155,"code":171785,"language":157,"meta":158,"style":158},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[71,171787,171788,171819],{"__ignoreMap":158},[162,171789,171790,171792,171794,171796,171798,171800,171802,171804,171806,171808,171811,171813,171815,171817],{"class":164,"line":165},[162,171791,110894],{"class":172},[162,171793,149849],{"class":207},[162,171795,604],{"class":168},[162,171797,149854],{"class":179},[162,171799,183],{"class":168},[162,171801,149859],{"class":179},[162,171803,183],{"class":168},[162,171805,149864],{"class":671},[162,171807,173],{"class":172},[162,171809,171810],{"class":179},"\"gbk\"",[162,171812,1823],{"class":168},[162,171814,34466],{"class":172},[162,171816,151210],{"class":671},[162,171818,2316],{"class":168},[162,171820,171821,171823,171825,171827],{"class":164,"line":197},[162,171822,149881],{"class":168},[162,171824,173],{"class":172},[162,171826,151210],{"class":671},[162,171828,171203],{"class":168},[19,171830,171831],{},"写文件时建议统一 UTF-8：",[153,171833,171835],{"className":155,"code":171834,"language":157,"meta":158,"style":158},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[71,171836,171837,171867],{"__ignoreMap":158},[162,171838,171839,171841,171843,171845,171847,171849,171851,171853,171855,171857,171859,171861,171863,171865],{"class":164,"line":165},[162,171840,110894],{"class":172},[162,171842,149849],{"class":207},[162,171844,604],{"class":168},[162,171846,149854],{"class":179},[162,171848,183],{"class":168},[162,171850,155026],{"class":179},[162,171852,183],{"class":168},[162,171854,149864],{"class":671},[162,171856,173],{"class":172},[162,171858,149869],{"class":179},[162,171860,1823],{"class":168},[162,171862,34466],{"class":172},[162,171864,151210],{"class":671},[162,171866,2316],{"class":168},[162,171868,171869,171871,171873,171876],{"class":164,"line":197},[162,171870,171586],{"class":671},[162,171872,171589],{"class":168},[162,171874,171875],{"class":179},"\"中文内容\"",[162,171877,434],{"class":168},[14,171879,171881],{"id":171880},"_89-pathlib","8.9 pathlib",[19,171883,171884,171887],{},[71,171885,171886],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[153,171889,171891],{"className":155,"code":171890,"language":157,"meta":158,"style":158},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[71,171892,171893,171903,171907,171925],{"__ignoreMap":158},[162,171894,171895,171897,171899,171901],{"class":164,"line":165},[162,171896,33821],{"class":172},[162,171898,111372],{"class":168},[162,171900,33478],{"class":172},[162,171902,111377],{"class":168},[162,171904,171905],{"class":164,"line":197},[162,171906,301],{"emptyLinePlaceholder":300},[162,171908,171909,171911,171913,171915,171918,171920,171922],{"class":164,"line":228},[162,171910,171013],{"class":168},[162,171912,173],{"class":172},[162,171914,111606],{"class":168},[162,171916,171917],{"class":179},"\"data\"",[162,171919,1823],{"class":168},[162,171921,946],{"class":172},[162,171923,171924],{"class":179}," \"students.txt\"\n",[162,171926,171927,171929],{"class":164,"line":252},[162,171928,306],{"class":207},[162,171930,171931],{"class":168},"(path)\n",[19,171933,171934],{},"创建目录：",[153,171936,171938],{"className":155,"code":171937,"language":157,"meta":158,"style":158},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[71,171939,171940,171950,171954,171967],{"__ignoreMap":158},[162,171941,171942,171944,171946,171948],{"class":164,"line":165},[162,171943,33821],{"class":172},[162,171945,111372],{"class":168},[162,171947,33478],{"class":172},[162,171949,111377],{"class":168},[162,171951,171952],{"class":164,"line":197},[162,171953,301],{"emptyLinePlaceholder":300},[162,171955,171956,171959,171961,171963,171965],{"class":164,"line":228},[162,171957,171958],{"class":168},"data_dir ",[162,171960,173],{"class":172},[162,171962,111606],{"class":168},[162,171964,171917],{"class":179},[162,171966,434],{"class":168},[162,171968,171969,171972,171975,171977,171979],{"class":164,"line":252},[162,171970,171971],{"class":168},"data_dir.mkdir(",[162,171973,171974],{"class":671},"exist_ok",[162,171976,173],{"class":172},[162,171978,247],{"class":207},[162,171980,434],{"class":168},[19,171982,171983],{},"判断文件是否存在：",[153,171985,171987],{"className":155,"code":171986,"language":157,"meta":158,"style":158},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[71,171988,171989,172002,172006,172013],{"__ignoreMap":158},[162,171990,171991,171993,171995,171997,172000],{"class":164,"line":165},[162,171992,171013],{"class":168},[162,171994,173],{"class":172},[162,171996,111606],{"class":168},[162,171998,171999],{"class":179},"\"data\u002Fstudents.txt\"",[162,172001,434],{"class":168},[162,172003,172004],{"class":164,"line":197},[162,172005,301],{"emptyLinePlaceholder":300},[162,172007,172008,172010],{"class":164,"line":228},[162,172009,2703],{"class":172},[162,172011,172012],{"class":168}," path.exists():\n",[162,172014,172015,172017,172019,172022],{"class":164,"line":252},[162,172016,822],{"class":207},[162,172018,604],{"class":168},[162,172020,172021],{"class":179},"\"文件存在\"",[162,172023,434],{"class":168},[19,172025,172026],{},"读写文本：",[153,172028,172030],{"className":155,"code":172029,"language":157,"meta":158,"style":158},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[71,172031,172032,172044,172048,172065,172082],{"__ignoreMap":158},[162,172033,172034,172036,172038,172040,172042],{"class":164,"line":165},[162,172035,171013],{"class":168},[162,172037,173],{"class":172},[162,172039,111606],{"class":168},[162,172041,149854],{"class":179},[162,172043,434],{"class":168},[162,172045,172046],{"class":164,"line":197},[162,172047,301],{"emptyLinePlaceholder":300},[162,172049,172050,172053,172055,172057,172059,172061,172063],{"class":164,"line":228},[162,172051,172052],{"class":168},"path.write_text(",[162,172054,148934],{"class":179},[162,172056,183],{"class":168},[162,172058,149864],{"class":671},[162,172060,173],{"class":172},[162,172062,149869],{"class":179},[162,172064,434],{"class":168},[162,172066,172067,172069,172071,172074,172076,172078,172080],{"class":164,"line":252},[162,172068,171196],{"class":168},[162,172070,173],{"class":172},[162,172072,172073],{"class":168}," path.read_text(",[162,172075,149864],{"class":671},[162,172077,173],{"class":172},[162,172079,149869],{"class":179},[162,172081,434],{"class":168},[162,172083,172084,172086],{"class":164,"line":328},[162,172085,306],{"class":207},[162,172087,171210],{"class":168},[14,172089,172091],{"id":172090},"_810-json文件","8.10 JSON文件",[19,172093,172094],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[153,172096,172098],{"className":155,"code":172097,"language":157,"meta":158,"style":158},"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",[71,172099,172100,172106,172110,172118,172128,172138,172146,172150,172154,172179],{"__ignoreMap":158},[162,172101,172102,172104],{"class":164,"line":165},[162,172103,33478],{"class":172},[162,172105,150148],{"class":168},[162,172107,172108],{"class":164,"line":197},[162,172109,301],{"emptyLinePlaceholder":300},[162,172111,172112,172114,172116],{"class":164,"line":228},[162,172113,1717],{"class":168},[162,172115,173],{"class":172},[162,172117,1722],{"class":168},[162,172119,172120,172122,172124,172126],{"class":164,"line":252},[162,172121,1727],{"class":179},[162,172123,1730],{"class":168},[162,172125,180],{"class":179},[162,172127,1735],{"class":168},[162,172129,172130,172132,172134,172136],{"class":164,"line":328},[162,172131,1740],{"class":179},[162,172133,1730],{"class":168},[162,172135,242],{"class":207},[162,172137,1735],{"class":168},[162,172139,172140,172142,172144],{"class":164,"line":466},[162,172141,1751],{"class":179},[162,172143,1730],{"class":168},[162,172145,1756],{"class":207},[162,172147,172148],{"class":164,"line":471},[162,172149,1498],{"class":168},[162,172151,172152],{"class":164,"line":687},[162,172153,301],{"emptyLinePlaceholder":300},[162,172155,172156,172158,172160,172163,172165,172167,172169,172171,172173,172175,172177],{"class":164,"line":692},[162,172157,1123],{"class":168},[162,172159,173],{"class":172},[162,172161,172162],{"class":168}," json.dumps(student, ",[162,172164,150194],{"class":671},[162,172166,173],{"class":172},[162,172168,37062],{"class":207},[162,172170,183],{"class":168},[162,172172,155062],{"class":671},[162,172174,173],{"class":172},[162,172176,213],{"class":207},[162,172178,434],{"class":168},[162,172180,172181,172183],{"class":164,"line":698},[162,172182,306],{"class":207},[162,172184,1254],{"class":168},[19,172186,172187],{},"写入 JSON 文件：",[153,172189,172191],{"className":155,"code":172190,"language":157,"meta":158,"style":158},"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",[71,172192,172193,172199,172203,172211,172239,172267,172271,172275,172305],{"__ignoreMap":158},[162,172194,172195,172197],{"class":164,"line":165},[162,172196,33478],{"class":172},[162,172198,150148],{"class":168},[162,172200,172201],{"class":164,"line":197},[162,172202,301],{"emptyLinePlaceholder":300},[162,172204,172205,172207,172209],{"class":164,"line":228},[162,172206,2025],{"class":168},[162,172208,173],{"class":172},[162,172210,2030],{"class":168},[162,172212,172213,172215,172217,172219,172221,172223,172225,172227,172229,172231,172233,172235,172237],{"class":164,"line":252},[162,172214,2035],{"class":168},[162,172216,1778],{"class":179},[162,172218,1730],{"class":168},[162,172220,180],{"class":179},[162,172222,183],{"class":168},[162,172224,1864],{"class":179},[162,172226,1730],{"class":168},[162,172228,242],{"class":207},[162,172230,183],{"class":168},[162,172232,1905],{"class":179},[162,172234,1730],{"class":168},[162,172236,2058],{"class":207},[162,172238,2061],{"class":168},[162,172240,172241,172243,172245,172247,172249,172251,172253,172255,172257,172259,172261,172263,172265],{"class":164,"line":328},[162,172242,2035],{"class":168},[162,172244,1778],{"class":179},[162,172246,1730],{"class":168},[162,172248,186],{"class":179},[162,172250,183],{"class":168},[162,172252,1864],{"class":179},[162,172254,1730],{"class":168},[162,172256,2080],{"class":207},[162,172258,183],{"class":168},[162,172260,1905],{"class":179},[162,172262,1730],{"class":168},[162,172264,2089],{"class":207},[162,172266,2061],{"class":168},[162,172268,172269],{"class":164,"line":466},[162,172270,194],{"class":168},[162,172272,172273],{"class":164,"line":471},[162,172274,301],{"emptyLinePlaceholder":300},[162,172276,172277,172279,172281,172283,172285,172287,172289,172291,172293,172295,172297,172299,172301,172303],{"class":164,"line":687},[162,172278,110894],{"class":172},[162,172280,149849],{"class":207},[162,172282,604],{"class":168},[162,172284,154881],{"class":179},[162,172286,183],{"class":168},[162,172288,155026],{"class":179},[162,172290,183],{"class":168},[162,172292,149864],{"class":671},[162,172294,173],{"class":172},[162,172296,149869],{"class":179},[162,172298,1823],{"class":168},[162,172300,34466],{"class":172},[162,172302,151210],{"class":671},[162,172304,2316],{"class":168},[162,172306,172307,172310,172312,172314,172316,172318,172320,172322,172324,172326,172328],{"class":164,"line":692},[162,172308,172309],{"class":168},"    json.dump(students, ",[162,172311,48429],{"class":671},[162,172313,183],{"class":168},[162,172315,150194],{"class":671},[162,172317,173],{"class":172},[162,172319,37062],{"class":207},[162,172321,183],{"class":168},[162,172323,155062],{"class":671},[162,172325,173],{"class":172},[162,172327,213],{"class":207},[162,172329,434],{"class":168},[19,172331,172332],{},"读取 JSON 文件：",[153,172334,172336],{"className":155,"code":172335,"language":157,"meta":158,"style":158},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[71,172337,172338,172344,172348,172378,172390,172394],{"__ignoreMap":158},[162,172339,172340,172342],{"class":164,"line":165},[162,172341,33478],{"class":172},[162,172343,150148],{"class":168},[162,172345,172346],{"class":164,"line":197},[162,172347,301],{"emptyLinePlaceholder":300},[162,172349,172350,172352,172354,172356,172358,172360,172362,172364,172366,172368,172370,172372,172374,172376],{"class":164,"line":228},[162,172351,110894],{"class":172},[162,172353,149849],{"class":207},[162,172355,604],{"class":168},[162,172357,154881],{"class":179},[162,172359,183],{"class":168},[162,172361,149859],{"class":179},[162,172363,183],{"class":168},[162,172365,149864],{"class":671},[162,172367,173],{"class":172},[162,172369,149869],{"class":179},[162,172371,1823],{"class":168},[162,172373,34466],{"class":172},[162,172375,151210],{"class":671},[162,172377,2316],{"class":168},[162,172379,172380,172382,172384,172386,172388],{"class":164,"line":252},[162,172381,156080],{"class":168},[162,172383,173],{"class":172},[162,172385,151221],{"class":168},[162,172387,48429],{"class":671},[162,172389,434],{"class":168},[162,172391,172392],{"class":164,"line":328},[162,172393,301],{"emptyLinePlaceholder":300},[162,172395,172396,172398],{"class":164,"line":466},[162,172397,306],{"class":207},[162,172399,2217],{"class":168},[14,172401,172403],{"id":172402},"_811-csv文件","8.11 CSV文件",[19,172405,172406],{},"CSV 是逗号分隔值，常用于表格数据。",[19,172408,172409],{},"写入 CSV：",[153,172411,172413],{"className":155,"code":172412,"language":157,"meta":158,"style":158},"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",[71,172414,172415,172422,172426,172434,172452,172468,172484,172488,172492,172532,172546],{"__ignoreMap":158},[162,172416,172417,172419],{"class":164,"line":165},[162,172418,33478],{"class":172},[162,172420,172421],{"class":168}," csv\n",[162,172423,172424],{"class":164,"line":197},[162,172425,301],{"emptyLinePlaceholder":300},[162,172427,172428,172430,172432],{"class":164,"line":228},[162,172429,2025],{"class":168},[162,172431,173],{"class":172},[162,172433,2030],{"class":168},[162,172435,172436,172439,172441,172443,172445,172447,172450],{"class":164,"line":252},[162,172437,172438],{"class":168},"    [",[162,172440,76164],{"class":179},[162,172442,183],{"class":168},[162,172444,76197],{"class":179},[162,172446,183],{"class":168},[162,172448,172449],{"class":179},"\"成绩\"",[162,172451,90901],{"class":168},[162,172453,172454,172456,172458,172460,172462,172464,172466],{"class":164,"line":328},[162,172455,172438],{"class":168},[162,172457,180],{"class":179},[162,172459,183],{"class":168},[162,172461,242],{"class":207},[162,172463,183],{"class":168},[162,172465,2058],{"class":207},[162,172467,90901],{"class":168},[162,172469,172470,172472,172474,172476,172478,172480,172482],{"class":164,"line":466},[162,172471,172438],{"class":168},[162,172473,186],{"class":179},[162,172475,183],{"class":168},[162,172477,2080],{"class":207},[162,172479,183],{"class":168},[162,172481,2089],{"class":207},[162,172483,90901],{"class":168},[162,172485,172486],{"class":164,"line":471},[162,172487,194],{"class":168},[162,172489,172490],{"class":164,"line":687},[162,172491,301],{"emptyLinePlaceholder":300},[162,172493,172494,172496,172498,172500,172503,172505,172507,172509,172511,172513,172515,172517,172520,172522,172524,172526,172528,172530],{"class":164,"line":692},[162,172495,110894],{"class":172},[162,172497,149849],{"class":207},[162,172499,604],{"class":168},[162,172501,172502],{"class":179},"\"students.csv\"",[162,172504,183],{"class":168},[162,172506,155026],{"class":179},[162,172508,183],{"class":168},[162,172510,149864],{"class":671},[162,172512,173],{"class":172},[162,172514,149869],{"class":179},[162,172516,183],{"class":168},[162,172518,172519],{"class":671},"newline",[162,172521,173],{"class":172},[162,172523,10756],{"class":179},[162,172525,1823],{"class":168},[162,172527,34466],{"class":172},[162,172529,151210],{"class":671},[162,172531,2316],{"class":168},[162,172533,172534,172537,172539,172542,172544],{"class":164,"line":698},[162,172535,172536],{"class":168},"    writer ",[162,172538,173],{"class":172},[162,172540,172541],{"class":168}," csv.writer(",[162,172543,48429],{"class":671},[162,172545,434],{"class":168},[162,172547,172548],{"class":164,"line":2955},[162,172549,172550],{"class":168},"    writer.writerows(students)\n",[19,172552,172553],{},"读取 CSV：",[153,172555,172557],{"className":155,"code":172556,"language":157,"meta":158,"style":158},"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",[71,172558,172559,172565,172569,172599,172613,172625],{"__ignoreMap":158},[162,172560,172561,172563],{"class":164,"line":165},[162,172562,33478],{"class":172},[162,172564,172421],{"class":168},[162,172566,172567],{"class":164,"line":197},[162,172568,301],{"emptyLinePlaceholder":300},[162,172570,172571,172573,172575,172577,172579,172581,172583,172585,172587,172589,172591,172593,172595,172597],{"class":164,"line":228},[162,172572,110894],{"class":172},[162,172574,149849],{"class":207},[162,172576,604],{"class":168},[162,172578,172502],{"class":179},[162,172580,183],{"class":168},[162,172582,149859],{"class":179},[162,172584,183],{"class":168},[162,172586,149864],{"class":671},[162,172588,173],{"class":172},[162,172590,149869],{"class":179},[162,172592,1823],{"class":168},[162,172594,34466],{"class":172},[162,172596,151210],{"class":671},[162,172598,2316],{"class":168},[162,172600,172601,172604,172606,172609,172611],{"class":164,"line":252},[162,172602,172603],{"class":168},"    reader ",[162,172605,173],{"class":172},[162,172607,172608],{"class":168}," csv.reader(",[162,172610,48429],{"class":671},[162,172612,434],{"class":168},[162,172614,172615,172617,172620,172622],{"class":164,"line":328},[162,172616,6315],{"class":172},[162,172618,172619],{"class":168}," row ",[162,172621,814],{"class":172},[162,172623,172624],{"class":168}," reader:\n",[162,172626,172627,172629],{"class":164,"line":466},[162,172628,2300],{"class":207},[162,172630,172631],{"class":168},"(row)\n",[19,172633,172634],{},"使用字典写入：",[153,172636,172638],{"className":155,"code":172637,"language":157,"meta":158,"style":158},"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",[71,172639,172640,172646,172650,172658,172686,172714,172718,172722,172760,172781,172802,172807],{"__ignoreMap":158},[162,172641,172642,172644],{"class":164,"line":165},[162,172643,33478],{"class":172},[162,172645,172421],{"class":168},[162,172647,172648],{"class":164,"line":197},[162,172649,301],{"emptyLinePlaceholder":300},[162,172651,172652,172654,172656],{"class":164,"line":228},[162,172653,2025],{"class":168},[162,172655,173],{"class":172},[162,172657,2030],{"class":168},[162,172659,172660,172662,172664,172666,172668,172670,172672,172674,172676,172678,172680,172682,172684],{"class":164,"line":252},[162,172661,2035],{"class":168},[162,172663,1778],{"class":179},[162,172665,1730],{"class":168},[162,172667,180],{"class":179},[162,172669,183],{"class":168},[162,172671,1864],{"class":179},[162,172673,1730],{"class":168},[162,172675,242],{"class":207},[162,172677,183],{"class":168},[162,172679,1905],{"class":179},[162,172681,1730],{"class":168},[162,172683,2058],{"class":207},[162,172685,2061],{"class":168},[162,172687,172688,172690,172692,172694,172696,172698,172700,172702,172704,172706,172708,172710,172712],{"class":164,"line":328},[162,172689,2035],{"class":168},[162,172691,1778],{"class":179},[162,172693,1730],{"class":168},[162,172695,186],{"class":179},[162,172697,183],{"class":168},[162,172699,1864],{"class":179},[162,172701,1730],{"class":168},[162,172703,2080],{"class":207},[162,172705,183],{"class":168},[162,172707,1905],{"class":179},[162,172709,1730],{"class":168},[162,172711,2089],{"class":207},[162,172713,2061],{"class":168},[162,172715,172716],{"class":164,"line":466},[162,172717,194],{"class":168},[162,172719,172720],{"class":164,"line":471},[162,172721,301],{"emptyLinePlaceholder":300},[162,172723,172724,172726,172728,172730,172732,172734,172736,172738,172740,172742,172744,172746,172748,172750,172752,172754,172756,172758],{"class":164,"line":687},[162,172725,110894],{"class":172},[162,172727,149849],{"class":207},[162,172729,604],{"class":168},[162,172731,172502],{"class":179},[162,172733,183],{"class":168},[162,172735,155026],{"class":179},[162,172737,183],{"class":168},[162,172739,149864],{"class":671},[162,172741,173],{"class":172},[162,172743,149869],{"class":179},[162,172745,183],{"class":168},[162,172747,172519],{"class":671},[162,172749,173],{"class":172},[162,172751,10756],{"class":179},[162,172753,1823],{"class":168},[162,172755,34466],{"class":172},[162,172757,151210],{"class":671},[162,172759,2316],{"class":168},[162,172761,172762,172765,172767,172769,172771,172773,172775,172777,172779],{"class":164,"line":692},[162,172763,172764],{"class":168},"    fieldnames ",[162,172766,173],{"class":172},[162,172768,176],{"class":168},[162,172770,1778],{"class":179},[162,172772,183],{"class":168},[162,172774,1864],{"class":179},[162,172776,183],{"class":168},[162,172778,1905],{"class":179},[162,172780,194],{"class":168},[162,172782,172783,172785,172787,172790,172792,172794,172797,172799],{"class":164,"line":698},[162,172784,172536],{"class":168},[162,172786,173],{"class":172},[162,172788,172789],{"class":168}," csv.DictWriter(",[162,172791,48429],{"class":671},[162,172793,183],{"class":168},[162,172795,172796],{"class":671},"fieldnames",[162,172798,173],{"class":172},[162,172800,172801],{"class":168},"fieldnames)\n",[162,172803,172804],{"class":164,"line":2955},[162,172805,172806],{"class":168},"    writer.writeheader()\n",[162,172808,172809],{"class":164,"line":2960},[162,172810,172550],{"class":168},[14,172812,172814],{"id":172813},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,172816,126350],{},[1452,172818,172819,172822,172825],{},[1455,172820,172821],{},"读取文本文件。",[1455,172823,172824],{},"统计每个单词出现次数。",[1455,172826,172827],{},"输出出现次数最多的前 10 个单词。",[19,172829,13135],{},[153,172831,172833],{"className":155,"code":172832,"language":157,"meta":158,"style":158},"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",[71,172834,172835,172845,172849,172862,172878,172882,172892,172901,172905,172917,172937,172946,172950,172968,172972,173002,173006,173022],{"__ignoreMap":158},[162,172836,172837,172839,172841,172843],{"class":164,"line":165},[162,172838,33821],{"class":172},[162,172840,111372],{"class":168},[162,172842,33478],{"class":172},[162,172844,111377],{"class":168},[162,172846,172847],{"class":164,"line":197},[162,172848,301],{"emptyLinePlaceholder":300},[162,172850,172851,172853,172855,172857,172860],{"class":164,"line":228},[162,172852,171013],{"class":168},[162,172854,173],{"class":172},[162,172856,111606],{"class":168},[162,172858,172859],{"class":179},"\"article.txt\"",[162,172861,434],{"class":168},[162,172863,172864,172866,172868,172870,172872,172874,172876],{"class":164,"line":252},[162,172865,171196],{"class":168},[162,172867,173],{"class":172},[162,172869,172073],{"class":168},[162,172871,149864],{"class":671},[162,172873,173],{"class":172},[162,172875,149869],{"class":179},[162,172877,434],{"class":168},[162,172879,172880],{"class":164,"line":328},[162,172881,301],{"emptyLinePlaceholder":300},[162,172883,172884,172887,172889],{"class":164,"line":466},[162,172885,172886],{"class":168},"words ",[162,172888,173],{"class":172},[162,172890,172891],{"class":168}," content.lower().split()\n",[162,172893,172894,172897,172899],{"class":164,"line":471},[162,172895,172896],{"class":168},"counter ",[162,172898,173],{"class":172},[162,172900,90933],{"class":168},[162,172902,172903],{"class":164,"line":687},[162,172904,301],{"emptyLinePlaceholder":300},[162,172906,172907,172909,172912,172914],{"class":164,"line":692},[162,172908,808],{"class":172},[162,172910,172911],{"class":168}," word ",[162,172913,814],{"class":172},[162,172915,172916],{"class":168}," words:\n",[162,172918,172919,172922,172924,172927,172930,172932,172935],{"class":164,"line":698},[162,172920,172921],{"class":168},"    word ",[162,172923,173],{"class":172},[162,172925,172926],{"class":168}," word.strip(",[162,172928,172929],{"class":179},"\".,!?;:",[162,172931,159529],{"class":207},[162,172933,172934],{"class":179},"'()[]\"",[162,172936,434],{"class":168},[162,172938,172939,172941,172943],{"class":164,"line":2955},[162,172940,2283],{"class":172},[162,172942,42005],{"class":172},[162,172944,172945],{"class":168}," word:\n",[162,172947,172948],{"class":164,"line":2960},[162,172949,151568],{"class":172},[162,172951,172952,172955,172957,172960,172962,172964,172966],{"class":164,"line":2971},[162,172953,172954],{"class":168},"    counter[word] ",[162,172956,173],{"class":172},[162,172958,172959],{"class":168}," counter.get(word, ",[162,172961,312],{"class":207},[162,172963,1823],{"class":168},[162,172965,3771],{"class":172},[162,172967,58768],{"class":207},[162,172969,172970],{"class":164,"line":2984},[162,172971,301],{"emptyLinePlaceholder":300},[162,172973,172974,172977,172979,172981,172984,172986,172988,172990,172992,172994,172996,172998,173000],{"class":164,"line":2989},[162,172975,172976],{"class":168},"items ",[162,172978,173],{"class":172},[162,172980,751],{"class":207},[162,172982,172983],{"class":168},"(counter.items(), ",[162,172985,156989],{"class":671},[162,172987,156992],{"class":172},[162,172989,156995],{"class":168},[162,172991,208],{"class":207},[162,172993,115262],{"class":168},[162,172995,672],{"class":671},[162,172997,173],{"class":172},[162,172999,247],{"class":207},[162,173001,434],{"class":168},[162,173003,173004],{"class":164,"line":3011},[162,173005,301],{"emptyLinePlaceholder":300},[162,173007,173008,173010,173013,173015,173018,173020],{"class":164,"line":3022},[162,173009,808],{"class":172},[162,173011,173012],{"class":168}," word, count ",[162,173014,814],{"class":172},[162,173016,173017],{"class":168}," items[:",[162,173019,1006],{"class":207},[162,173021,3008],{"class":168},[162,173023,173024,173026],{"class":164,"line":3027},[162,173025,822],{"class":207},[162,173027,173028],{"class":168},"(word, count)\n",[14,173030,173032],{"id":173031},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[153,173034,173036],{"className":155,"code":173035,"language":157,"meta":158,"style":158},"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",[71,173037,173038,173044,173054,173058,173070,173074,173078,173086,173096,173102,173106,173136,173146,173150,173154,173162,173192,173216,173220,173224,173232,173261,173266],{"__ignoreMap":158},[162,173039,173040,173042],{"class":164,"line":165},[162,173041,33478],{"class":172},[162,173043,150148],{"class":168},[162,173045,173046,173048,173050,173052],{"class":164,"line":197},[162,173047,33821],{"class":172},[162,173049,111372],{"class":168},[162,173051,33478],{"class":172},[162,173053,111377],{"class":168},[162,173055,173056],{"class":164,"line":228},[162,173057,301],{"emptyLinePlaceholder":300},[162,173059,173060,173062,173064,173066,173068],{"class":164,"line":252},[162,173061,154874],{"class":207},[162,173063,16659],{"class":172},[162,173065,111606],{"class":168},[162,173067,154881],{"class":179},[162,173069,434],{"class":168},[162,173071,173072],{"class":164,"line":328},[162,173073,301],{"emptyLinePlaceholder":300},[162,173075,173076],{"class":164,"line":466},[162,173077,301],{"emptyLinePlaceholder":300},[162,173079,173080,173082,173084],{"class":164,"line":471},[162,173081,35026],{"class":172},[162,173083,154898],{"class":5082},[162,173085,35032],{"class":168},[162,173087,173088,173090,173092,173094],{"class":164,"line":687},[162,173089,2283],{"class":172},[162,173091,42005],{"class":172},[162,173093,154909],{"class":207},[162,173095,154912],{"class":168},[162,173097,173098,173100],{"class":164,"line":692},[162,173099,17846],{"class":172},[162,173101,260],{"class":168},[162,173103,173104],{"class":164,"line":698},[162,173105,301],{"emptyLinePlaceholder":300},[162,173107,173108,173110,173112,173114,173116,173118,173120,173122,173124,173126,173128,173130,173132,173134],{"class":164,"line":2955},[162,173109,37253],{"class":172},[162,173111,149849],{"class":207},[162,173113,604],{"class":168},[162,173115,154874],{"class":207},[162,173117,183],{"class":168},[162,173119,149859],{"class":179},[162,173121,183],{"class":168},[162,173123,149864],{"class":671},[162,173125,173],{"class":172},[162,173127,149869],{"class":179},[162,173129,1823],{"class":168},[162,173131,34466],{"class":172},[162,173133,151210],{"class":671},[162,173135,2316],{"class":168},[162,173137,173138,173140,173142,173144],{"class":164,"line":2960},[162,173139,17846],{"class":172},[162,173141,151221],{"class":168},[162,173143,48429],{"class":671},[162,173145,434],{"class":168},[162,173147,173148],{"class":164,"line":2971},[162,173149,301],{"emptyLinePlaceholder":300},[162,173151,173152],{"class":164,"line":2984},[162,173153,301],{"emptyLinePlaceholder":300},[162,173155,173156,173158,173160],{"class":164,"line":2989},[162,173157,35026],{"class":172},[162,173159,155008],{"class":5082},[162,173161,155011],{"class":168},[162,173163,173164,173166,173168,173170,173172,173174,173176,173178,173180,173182,173184,173186,173188,173190],{"class":164,"line":3011},[162,173165,37253],{"class":172},[162,173167,149849],{"class":207},[162,173169,604],{"class":168},[162,173171,154874],{"class":207},[162,173173,183],{"class":168},[162,173175,155026],{"class":179},[162,173177,183],{"class":168},[162,173179,149864],{"class":671},[162,173181,173],{"class":172},[162,173183,149869],{"class":179},[162,173185,1823],{"class":168},[162,173187,34466],{"class":172},[162,173189,151210],{"class":671},[162,173191,2316],{"class":168},[162,173193,173194,173196,173198,173200,173202,173204,173206,173208,173210,173212,173214],{"class":164,"line":3022},[162,173195,155047],{"class":168},[162,173197,48429],{"class":671},[162,173199,183],{"class":168},[162,173201,150194],{"class":671},[162,173203,173],{"class":172},[162,173205,37062],{"class":207},[162,173207,183],{"class":168},[162,173209,155062],{"class":671},[162,173211,173],{"class":172},[162,173213,213],{"class":207},[162,173215,434],{"class":168},[162,173217,173218],{"class":164,"line":3027},[162,173219,301],{"emptyLinePlaceholder":300},[162,173221,173222],{"class":164,"line":3046},[162,173223,301],{"emptyLinePlaceholder":300},[162,173225,173226,173228,173230],{"class":164,"line":3052},[162,173227,2025],{"class":168},[162,173229,173],{"class":172},[162,173231,156085],{"class":168},[162,173233,173234,173237,173239,173241,173243,173245,173247,173249,173251,173253,173255,173257,173259],{"class":164,"line":3057},[162,173235,173236],{"class":168},"students.append({",[162,173238,1778],{"class":179},[162,173240,1730],{"class":168},[162,173242,180],{"class":179},[162,173244,183],{"class":168},[162,173246,1864],{"class":179},[162,173248,1730],{"class":168},[162,173250,242],{"class":207},[162,173252,183],{"class":168},[162,173254,1905],{"class":179},[162,173256,1730],{"class":168},[162,173258,2058],{"class":207},[162,173260,2384],{"class":168},[162,173262,173263],{"class":164,"line":3072},[162,173264,173265],{"class":168},"save_students(students)\n",[162,173267,173268,173270,173272,173275],{"class":164,"line":3077},[162,173269,306],{"class":207},[162,173271,604],{"class":168},[162,173273,173274],{"class":179},"\"保存成功\"",[162,173276,434],{"class":168},[14,173278,173280],{"id":173279},"_814-易错点","8.14 易错点",[1452,173282,173283,173287,173293,173298,173305,173312],{},[1455,173284,173285,171546],{},[71,173286,4077],{},[1455,173288,173289,173290,3183],{},"读写中文要指定 ",[71,173291,173292],{},"encoding=\"utf-8\"",[1455,173294,173295,173296,3183],{},"打开文件后要关闭，推荐使用 ",[71,173297,110894],{},[1455,173299,173300,173301,173304],{},"读取大文件不要直接 ",[71,173302,173303],{},"read()"," 全部内容。",[1455,173306,173307,173308,173311],{},"Windows 写 CSV 时建议加 ",[71,173309,173310],{},"newline=\"\"","，避免空行。",[1455,173313,173314],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,173316,173318],{"id":173317},"_815-本章练习","8.15 本章练习",[1452,173320,173321,173328,173333,173336,173339],{},[1455,173322,173323,173324,173327],{},"写入一个 ",[71,173325,173326],{},"students.txt","，每行保存一个学生姓名。",[1455,173329,107417,173330,173332],{},[71,173331,173326],{}," 并输出所有学生。",[1455,173334,173335],{},"把学生列表保存为 JSON 文件。",[1455,173337,173338],{},"从 JSON 文件读取学生数据，计算平均分。",[1455,173340,173341,173342,173345,173346,173349],{},"写一个日志函数 ",[71,173343,173344],{},"write_log(message)","，每次调用向 ",[71,173347,173348],{},"app.log"," 追加一行。",[3219,173351,173352],{},"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":158,"searchDepth":197,"depth":197,"links":173354},[173355,173356,173360,173361,173367,173368,173369,173370,173371,173372,173373,173374,173375,173376,173377],{"id":170866,"depth":197,"text":170867},{"id":170907,"depth":197,"text":170908,"children":173357},[173358,173359],{"id":170911,"depth":228,"text":170912},{"id":170945,"depth":228,"text":170946},{"id":171059,"depth":197,"text":171060},{"id":171152,"depth":197,"text":171153,"children":173362},[173363,173364,173365,173366],{"id":171156,"depth":228,"text":171157},{"id":171243,"depth":228,"text":171244},{"id":171313,"depth":228,"text":171314},{"id":171407,"depth":228,"text":171408},{"id":171477,"depth":197,"text":171478},{"id":171540,"depth":197,"text":171541},{"id":171701,"depth":197,"text":171702},{"id":171764,"depth":197,"text":171765},{"id":171880,"depth":197,"text":171881},{"id":172090,"depth":197,"text":172091},{"id":172402,"depth":197,"text":172403},{"id":172813,"depth":197,"text":172814},{"id":173031,"depth":197,"text":173032},{"id":173279,"depth":197,"text":173280},{"id":173317,"depth":197,"text":173318},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":170858,"description":3241},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":173384,"title":173385,"body":173386,"description":3241,"extension":3242,"meta":175572,"navigation":300,"path":175573,"seo":175574,"stem":175575,"__hash__":175576},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":173387,"toc":175539},[173388,173391,173395,173398,173401,173493,173495,173514,173519,173523,173526,173529,173558,173565,173568,173572,173575,173604,173606,173658,173664,173717,173721,173819,173822,173889,173893,173950,173952,173958,173962,173967,173973,174064,174069,174073,174076,174154,174157,174195,174199,174317,174320,174324,174327,174372,174375,174379,174384,174390,174440,174443,174474,174478,174482,174512,174516,174551,174555,174590,174630,174634,174650,174653,174657,174661,174740,174744,174785,174789,174844,174848,174882,174886,174916,174925,174932,174938,174995,174998,175006,175009,175013,175020,175023,175029,175032,175049,175054,175058,175064,175077,175080,175117,175120,175131,175134,175148,175151,175165,175169,175176,175209,175212,175214,175220,175223,175227,175229,175235,175240,175413,175417,175480,175484,175508,175512,175536],[10,173389,173385],{"id":173390},"_9-异常模块与包",[14,173392,173394],{"id":173393},"_91-什么是异常","9.1 什么是异常",[19,173396,173397],{},"异常是程序运行过程中出现的错误。",[19,173399,173400],{},"常见异常：",[26,173402,173403,173412],{},[29,173404,173405],{},[32,173406,173407,173410],{},[35,173408,173409],{},"异常",[35,173411,28960],{},[51,173413,173414,173424,173434,173443,173453,173463,173473,173483],{},[32,173415,173416,173421],{},[56,173417,173418],{},[71,173419,173420],{},"NameError",[56,173422,173423],{},"使用了未定义变量",[32,173425,173426,173431],{},[56,173427,173428],{},[71,173429,173430],{},"TypeError",[56,173432,173433],{},"类型不匹配",[32,173435,173436,173440],{},[56,173437,173438],{},[71,173439,157876],{},[56,173441,173442],{},"值不合法",[32,173444,173445,173450],{},[56,173446,173447],{},[71,173448,173449],{},"IndexError",[56,173451,173452],{},"列表索引越界",[32,173454,173455,173460],{},[56,173456,173457],{},[71,173458,173459],{},"KeyError",[56,173461,173462],{},"字典 key 不存在",[32,173464,173465,173470],{},[56,173466,173467],{},[71,173468,173469],{},"FileNotFoundError",[56,173471,173472],{},"文件不存在",[32,173474,173475,173480],{},[56,173476,173477],{},[71,173478,173479],{},"ZeroDivisionError",[56,173481,173482],{},"除数为 0",[32,173484,173485,173490],{},[56,173486,173487],{},[71,173488,173489],{},"ImportError",[56,173491,173492],{},"导入失败",[19,173494,18228],{},[153,173496,173498],{"className":155,"code":173497,"language":157,"meta":158,"style":158},"num = int(\"abc\")\n",[71,173499,173500],{"__ignoreMap":158},[162,173501,173502,173504,173506,173508,173510,173512],{"class":164,"line":165},[162,173503,158823],{"class":168},[162,173505,173],{"class":172},[162,173507,5500],{"class":207},[162,173509,604],{"class":168},[162,173511,106],{"class":179},[162,173513,434],{"class":168},[19,173515,173516,173517,3183],{},"会触发 ",[71,173518,157876],{},[14,173520,173522],{"id":173521},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,173524,173525],{},"如果不处理异常，程序会直接终止。",[19,173527,173528],{},"例如用户输入年龄：",[153,173530,173532],{"className":155,"code":173531,"language":157,"meta":158,"style":158},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[71,173533,173534,173552],{"__ignoreMap":158},[162,173535,173536,173538,173540,173542,173544,173546,173548,173550],{"class":164,"line":165},[162,173537,149604],{"class":168},[162,173539,173],{"class":172},[162,173541,5500],{"class":207},[162,173543,604],{"class":168},[162,173545,56891],{"class":207},[162,173547,604],{"class":168},[162,173549,155440],{"class":179},[162,173551,586],{"class":168},[162,173553,173554,173556],{"class":164,"line":197},[162,173555,306],{"class":207},[162,173557,158797],{"class":168},[19,173559,173560,173561,173564],{},"用户输入 ",[71,173562,173563],{},"abc","，程序就会报错退出。",[19,173566,173567],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,173569,173571],{"id":173570},"_93-try-except","9.3 try except",[19,173573,173574],{},"基础语法：",[153,173576,173578],{"className":155,"code":173577,"language":157,"meta":158,"style":158},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[71,173579,173580,173587,173592,173599],{"__ignoreMap":158},[162,173581,173582,173585],{"class":164,"line":165},[162,173583,173584],{"class":172},"try",[162,173586,2316],{"class":168},[162,173588,173589],{"class":164,"line":197},[162,173590,173591],{"class":168},"    可能出错的代码\n",[162,173593,173594,173597],{"class":164,"line":228},[162,173595,173596],{"class":172},"except",[162,173598,2316],{"class":168},[162,173600,173601],{"class":164,"line":252},[162,173602,173603],{"class":168},"    出错后的处理代码\n",[19,173605,18228],{},[153,173607,173609],{"className":155,"code":173608,"language":157,"meta":158,"style":158},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[71,173610,173611,173617,173635,173641,173647],{"__ignoreMap":158},[162,173612,173613,173615],{"class":164,"line":165},[162,173614,173584],{"class":172},[162,173616,2316],{"class":168},[162,173618,173619,173621,173623,173625,173627,173629,173631,173633],{"class":164,"line":197},[162,173620,155432],{"class":168},[162,173622,173],{"class":172},[162,173624,5500],{"class":207},[162,173626,604],{"class":168},[162,173628,56891],{"class":207},[162,173630,604],{"class":168},[162,173632,155440],{"class":179},[162,173634,586],{"class":168},[162,173636,173637,173639],{"class":164,"line":228},[162,173638,822],{"class":207},[162,173640,158797],{"class":168},[162,173642,173643,173645],{"class":164,"line":252},[162,173644,173596],{"class":172},[162,173646,2316],{"class":168},[162,173648,173649,173651,173653,173656],{"class":164,"line":328},[162,173650,822],{"class":207},[162,173652,604],{"class":168},[162,173654,173655],{"class":179},"\"年龄必须是数字\"",[162,173657,434],{"class":168},[19,173659,173660,173661,173663],{},"不建议裸写 ",[71,173662,173596],{},"，最好指定异常类型。",[153,173665,173667],{"className":155,"code":173666,"language":157,"meta":158,"style":158},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[71,173668,173669,173675,173693,173699,173707],{"__ignoreMap":158},[162,173670,173671,173673],{"class":164,"line":165},[162,173672,173584],{"class":172},[162,173674,2316],{"class":168},[162,173676,173677,173679,173681,173683,173685,173687,173689,173691],{"class":164,"line":197},[162,173678,155432],{"class":168},[162,173680,173],{"class":172},[162,173682,5500],{"class":207},[162,173684,604],{"class":168},[162,173686,56891],{"class":207},[162,173688,604],{"class":168},[162,173690,155440],{"class":179},[162,173692,586],{"class":168},[162,173694,173695,173697],{"class":164,"line":228},[162,173696,822],{"class":207},[162,173698,158797],{"class":168},[162,173700,173701,173703,173705],{"class":164,"line":252},[162,173702,173596],{"class":172},[162,173704,155272],{"class":207},[162,173706,2316],{"class":168},[162,173708,173709,173711,173713,173715],{"class":164,"line":328},[162,173710,822],{"class":207},[162,173712,604],{"class":168},[162,173714,173655],{"class":179},[162,173716,434],{"class":168},[14,173718,173720],{"id":173719},"_94-捕获多个异常","9.4 捕获多个异常",[153,173722,173724],{"className":155,"code":173723,"language":157,"meta":158,"style":158},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[71,173725,173726,173732,173753,173773,173780,173788,173799,173808],{"__ignoreMap":158},[162,173727,173728,173730],{"class":164,"line":165},[162,173729,173584],{"class":172},[162,173731,2316],{"class":168},[162,173733,173734,173737,173739,173741,173743,173745,173747,173749,173751],{"class":164,"line":197},[162,173735,173736],{"class":168},"    nums ",[162,173738,173],{"class":172},[162,173740,176],{"class":168},[162,173742,208],{"class":207},[162,173744,183],{"class":168},[162,173746,213],{"class":207},[162,173748,183],{"class":168},[162,173750,218],{"class":207},[162,173752,194],{"class":168},[162,173754,173755,173758,173760,173762,173764,173766,173768,173771],{"class":164,"line":228},[162,173756,173757],{"class":168},"    index ",[162,173759,173],{"class":172},[162,173761,5500],{"class":207},[162,173763,604],{"class":168},[162,173765,56891],{"class":207},[162,173767,604],{"class":168},[162,173769,173770],{"class":179},"\"请输入索引:\"",[162,173772,586],{"class":168},[162,173774,173775,173777],{"class":164,"line":252},[162,173776,822],{"class":207},[162,173778,173779],{"class":168},"(nums[index])\n",[162,173781,173782,173784,173786],{"class":164,"line":328},[162,173783,173596],{"class":172},[162,173785,155272],{"class":207},[162,173787,2316],{"class":168},[162,173789,173790,173792,173794,173797],{"class":164,"line":466},[162,173791,822],{"class":207},[162,173793,604],{"class":168},[162,173795,173796],{"class":179},"\"索引必须是整数\"",[162,173798,434],{"class":168},[162,173800,173801,173803,173806],{"class":164,"line":471},[162,173802,173596],{"class":172},[162,173804,173805],{"class":207}," IndexError",[162,173807,2316],{"class":168},[162,173809,173810,173812,173814,173817],{"class":164,"line":687},[162,173811,822],{"class":207},[162,173813,604],{"class":168},[162,173815,173816],{"class":179},"\"索引越界\"",[162,173818,434],{"class":168},[19,173820,173821],{},"多个异常使用相同处理逻辑：",[153,173823,173825],{"className":155,"code":173824,"language":157,"meta":158,"style":158},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[71,173826,173827,173833,173851,173864,173878],{"__ignoreMap":158},[162,173828,173829,173831],{"class":164,"line":165},[162,173830,173584],{"class":172},[162,173832,2316],{"class":168},[162,173834,173835,173837,173839,173841,173843,173845,173847,173849],{"class":164,"line":197},[162,173836,48667],{"class":168},[162,173838,173],{"class":172},[162,173840,5500],{"class":207},[162,173842,604],{"class":168},[162,173844,56891],{"class":207},[162,173846,604],{"class":168},[162,173848,158832],{"class":179},[162,173850,586],{"class":168},[162,173852,173853,173855,173857,173859,173861],{"class":164,"line":228},[162,173854,822],{"class":207},[162,173856,604],{"class":168},[162,173858,1006],{"class":207},[162,173860,159081],{"class":172},[162,173862,173863],{"class":168}," num)\n",[162,173865,173866,173868,173870,173872,173874,173876],{"class":164,"line":252},[162,173867,173596],{"class":172},[162,173869,1003],{"class":168},[162,173871,157876],{"class":207},[162,173873,183],{"class":168},[162,173875,173479],{"class":207},[162,173877,33870],{"class":168},[162,173879,173880,173882,173884,173887],{"class":164,"line":328},[162,173881,822],{"class":207},[162,173883,604],{"class":168},[162,173885,173886],{"class":179},"\"输入不合法\"",[162,173888,434],{"class":168},[14,173890,173892],{"id":173891},"_95-获取异常信息","9.5 获取异常信息",[153,173894,173896],{"className":155,"code":173895,"language":157,"meta":158,"style":158},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[71,173897,173898,173904,173918,173929],{"__ignoreMap":158},[162,173899,173900,173902],{"class":164,"line":165},[162,173901,173584],{"class":172},[162,173903,2316],{"class":168},[162,173905,173906,173908,173910,173912,173914,173916],{"class":164,"line":197},[162,173907,48667],{"class":168},[162,173909,173],{"class":172},[162,173911,5500],{"class":207},[162,173913,604],{"class":168},[162,173915,106],{"class":179},[162,173917,434],{"class":168},[162,173919,173920,173922,173924,173926],{"class":164,"line":228},[162,173921,173596],{"class":172},[162,173923,155272],{"class":207},[162,173925,67671],{"class":172},[162,173927,173928],{"class":168}," e:\n",[162,173930,173931,173933,173935,173937,173940,173942,173944,173946,173948],{"class":164,"line":252},[162,173932,822],{"class":207},[162,173934,604],{"class":168},[162,173936,961],{"class":172},[162,173938,173939],{"class":179},"\"出错了:",[162,173941,967],{"class":207},[162,173943,3384],{"class":168},[162,173945,976],{"class":207},[162,173947,979],{"class":179},[162,173949,434],{"class":168},[19,173951,149515],{},[153,173953,173956],{"className":173954,"code":173955,"language":8295,"meta":158},[8293],"出错了:invalid literal for int() with base 10: 'abc'\n",[71,173957,173955],{"__ignoreMap":158},[14,173959,173961],{"id":173960},"_96-else和finally","9.6 else和finally",[19,173963,173964,173966],{},[71,173965,2313],{},"：没有异常时执行。",[19,173968,173969,173972],{},[71,173970,173971],{},"finally","：无论是否异常都会执行。",[153,173974,173976],{"className":155,"code":173975,"language":157,"meta":158,"style":158},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[71,173977,173978,173984,174002,174010,174020,174026,174047,174053],{"__ignoreMap":158},[162,173979,173980,173982],{"class":164,"line":165},[162,173981,173584],{"class":172},[162,173983,2316],{"class":168},[162,173985,173986,173988,173990,173992,173994,173996,173998,174000],{"class":164,"line":197},[162,173987,48667],{"class":168},[162,173989,173],{"class":172},[162,173991,5500],{"class":207},[162,173993,604],{"class":168},[162,173995,56891],{"class":207},[162,173997,604],{"class":168},[162,173999,158832],{"class":179},[162,174001,586],{"class":168},[162,174003,174004,174006,174008],{"class":164,"line":228},[162,174005,173596],{"class":172},[162,174007,155272],{"class":207},[162,174009,2316],{"class":168},[162,174011,174012,174014,174016,174018],{"class":164,"line":252},[162,174013,822],{"class":207},[162,174015,604],{"class":168},[162,174017,156257],{"class":179},[162,174019,434],{"class":168},[162,174021,174022,174024],{"class":164,"line":328},[162,174023,2313],{"class":172},[162,174025,2316],{"class":168},[162,174027,174028,174030,174032,174034,174037,174039,174041,174043,174045],{"class":164,"line":466},[162,174029,822],{"class":207},[162,174031,604],{"class":168},[162,174033,961],{"class":172},[162,174035,174036],{"class":179},"\"输入正确:",[162,174038,967],{"class":207},[162,174040,4794],{"class":168},[162,174042,976],{"class":207},[162,174044,979],{"class":179},[162,174046,434],{"class":168},[162,174048,174049,174051],{"class":164,"line":471},[162,174050,173971],{"class":172},[162,174052,2316],{"class":168},[162,174054,174055,174057,174059,174062],{"class":164,"line":687},[162,174056,822],{"class":207},[162,174058,604],{"class":168},[162,174060,174061],{"class":179},"\"程序结束\"",[162,174063,434],{"class":168},[19,174065,174066,174068],{},[71,174067,173971],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,174070,174072],{"id":174071},"_97-抛出异常","9.7 抛出异常",[19,174074,174075],{},"程序可以主动抛出异常。",[153,174077,174079],{"className":155,"code":174078,"language":157,"meta":158,"style":158},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[71,174080,174081,174090,174102,174115,174135,174139,174143],{"__ignoreMap":158},[162,174082,174083,174085,174088],{"class":164,"line":165},[162,174084,35026],{"class":172},[162,174086,174087],{"class":5082}," set_age",[162,174089,164435],{"class":168},[162,174091,174092,174094,174096,174098,174100],{"class":164,"line":197},[162,174093,2283],{"class":172},[162,174095,18798],{"class":168},[162,174097,4187],{"class":172},[162,174099,2717],{"class":207},[162,174101,2316],{"class":168},[162,174103,174104,174106,174108,174110,174113],{"class":164,"line":228},[162,174105,106494],{"class":172},[162,174107,155272],{"class":207},[162,174109,604],{"class":168},[162,174111,174112],{"class":179},"\"年龄不能为负数\"",[162,174114,434],{"class":168},[162,174116,174117,174119,174121,174123,174125,174127,174129,174131,174133],{"class":164,"line":252},[162,174118,822],{"class":207},[162,174120,604],{"class":168},[162,174122,961],{"class":172},[162,174124,165003],{"class":179},[162,174126,967],{"class":207},[162,174128,73286],{"class":168},[162,174130,976],{"class":207},[162,174132,979],{"class":179},[162,174134,434],{"class":168},[162,174136,174137],{"class":164,"line":328},[162,174138,301],{"emptyLinePlaceholder":300},[162,174140,174141],{"class":164,"line":466},[162,174142,301],{"emptyLinePlaceholder":300},[162,174144,174145,174148,174150,174152],{"class":164,"line":471},[162,174146,174147],{"class":168},"set_age(",[162,174149,353],{"class":172},[162,174151,208],{"class":207},[162,174153,434],{"class":168},[19,174155,174156],{},"调用者可以捕获：",[153,174158,174160],{"className":155,"code":174159,"language":157,"meta":158,"style":158},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[71,174161,174162,174168,174179,174189],{"__ignoreMap":158},[162,174163,174164,174166],{"class":164,"line":165},[162,174165,173584],{"class":172},[162,174167,2316],{"class":168},[162,174169,174170,174173,174175,174177],{"class":164,"line":197},[162,174171,174172],{"class":168},"    set_age(",[162,174174,353],{"class":172},[162,174176,208],{"class":207},[162,174178,434],{"class":168},[162,174180,174181,174183,174185,174187],{"class":164,"line":228},[162,174182,173596],{"class":172},[162,174184,155272],{"class":207},[162,174186,67671],{"class":172},[162,174188,173928],{"class":168},[162,174190,174191,174193],{"class":164,"line":252},[162,174192,822],{"class":207},[162,174194,70066],{"class":168},[14,174196,174198],{"id":174197},"_98-自定义异常","9.8 自定义异常",[153,174200,174202],{"className":155,"code":174201,"language":157,"meta":158,"style":158},"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",[71,174203,174204,174218,174222,174226,174230,174238,174248,174259,174269,174273,174277,174283,174300,174311],{"__ignoreMap":158},[162,174205,174206,174208,174211,174213,174216],{"class":164,"line":165},[162,174207,17788],{"class":172},[162,174209,174210],{"class":5082}," BalanceNotEnoughError",[162,174212,604],{"class":168},[162,174214,174215],{"class":207},"Exception",[162,174217,33870],{"class":168},[162,174219,174220],{"class":164,"line":197},[162,174221,152592],{"class":172},[162,174223,174224],{"class":164,"line":228},[162,174225,301],{"emptyLinePlaceholder":300},[162,174227,174228],{"class":164,"line":252},[162,174229,301],{"emptyLinePlaceholder":300},[162,174231,174232,174234,174236],{"class":164,"line":328},[162,174233,35026],{"class":172},[162,174235,153239],{"class":5082},[162,174237,165832],{"class":168},[162,174239,174240,174242,174244,174246],{"class":164,"line":466},[162,174241,2283],{"class":172},[162,174243,153195],{"class":168},[162,174245,3000],{"class":172},[162,174247,165609],{"class":168},[162,174249,174250,174252,174255,174257],{"class":164,"line":471},[162,174251,106494],{"class":172},[162,174253,174254],{"class":168}," BalanceNotEnoughError(",[162,174256,153290],{"class":179},[162,174258,434],{"class":168},[162,174260,174261,174263,174265,174267],{"class":164,"line":687},[162,174262,7203],{"class":172},[162,174264,165839],{"class":168},[162,174266,353],{"class":172},[162,174268,153228],{"class":168},[162,174270,174271],{"class":164,"line":692},[162,174272,301],{"emptyLinePlaceholder":300},[162,174274,174275],{"class":164,"line":698},[162,174276,301],{"emptyLinePlaceholder":300},[162,174278,174279,174281],{"class":164,"line":2955},[162,174280,173584],{"class":172},[162,174282,2316],{"class":168},[162,174284,174285,174287,174289,174292,174294,174296,174298],{"class":164,"line":2960},[162,174286,165510],{"class":168},[162,174288,173],{"class":172},[162,174290,174291],{"class":168}," withdraw(",[162,174293,3608],{"class":207},[162,174295,183],{"class":168},[162,174297,4845],{"class":207},[162,174299,434],{"class":168},[162,174301,174302,174304,174307,174309],{"class":164,"line":2971},[162,174303,173596],{"class":172},[162,174305,174306],{"class":168}," BalanceNotEnoughError ",[162,174308,34466],{"class":172},[162,174310,173928],{"class":168},[162,174312,174313,174315],{"class":164,"line":2984},[162,174314,822],{"class":207},[162,174316,70066],{"class":168},[19,174318,174319],{},"入门阶段大多数情况使用内置异常即可。",[14,174321,174323],{"id":174322},"_99-traceback","9.9 traceback",[19,174325,174326],{},"调试时可以输出完整异常堆栈。",[153,174328,174330],{"className":155,"code":174329,"language":157,"meta":158,"style":158},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[71,174331,174332,174339,174343,174349,174359,174367],{"__ignoreMap":158},[162,174333,174334,174336],{"class":164,"line":165},[162,174335,33478],{"class":172},[162,174337,174338],{"class":168}," traceback\n",[162,174340,174341],{"class":164,"line":197},[162,174342,301],{"emptyLinePlaceholder":300},[162,174344,174345,174347],{"class":164,"line":228},[162,174346,173584],{"class":172},[162,174348,2316],{"class":168},[162,174350,174351,174353,174355,174357],{"class":164,"line":252},[162,174352,5103],{"class":207},[162,174354,604],{"class":168},[162,174356,106],{"class":179},[162,174358,434],{"class":168},[162,174360,174361,174363,174365],{"class":164,"line":328},[162,174362,173596],{"class":172},[162,174364,155272],{"class":207},[162,174366,2316],{"class":168},[162,174368,174369],{"class":164,"line":466},[162,174370,174371],{"class":168},"    traceback.print_exc()\n",[19,174373,174374],{},"日志系统中常把异常堆栈记录到文件。",[14,174376,174378],{"id":174377},"_910-什么是模块","9.10 什么是模块",[19,174380,174381,174382,129041],{},"模块就是一个 ",[71,174383,149410],{},[19,174385,174386,174387,27710],{},"例如创建 ",[71,174388,174389],{},"my_math.py",[153,174391,174393],{"className":155,"code":174392,"language":157,"meta":158,"style":158},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[71,174394,174395,174403,174413,174417,174421,174430],{"__ignoreMap":158},[162,174396,174397,174399,174401],{"class":164,"line":165},[162,174398,35026],{"class":172},[162,174400,8317],{"class":5082},[162,174402,154144],{"class":168},[162,174404,174405,174407,174409,174411],{"class":164,"line":197},[162,174406,7203],{"class":172},[162,174408,13967],{"class":168},[162,174410,3771],{"class":172},[162,174412,154155],{"class":168},[162,174414,174415],{"class":164,"line":228},[162,174416,301],{"emptyLinePlaceholder":300},[162,174418,174419],{"class":164,"line":252},[162,174420,301],{"emptyLinePlaceholder":300},[162,174422,174423,174425,174428],{"class":164,"line":328},[162,174424,35026],{"class":172},[162,174426,174427],{"class":5082}," sub",[162,174429,154144],{"class":168},[162,174431,174432,174434,174436,174438],{"class":164,"line":466},[162,174433,7203],{"class":172},[162,174435,13967],{"class":168},[162,174437,353],{"class":172},[162,174439,154155],{"class":168},[19,174441,174442],{},"在另一个文件中导入：",[153,174444,174446],{"className":155,"code":174445,"language":157,"meta":158,"style":158},"import my_math\n\nprint(my_math.add(1, 2))\n",[71,174447,174448,174455,174459],{"__ignoreMap":158},[162,174449,174450,174452],{"class":164,"line":165},[162,174451,33478],{"class":172},[162,174453,174454],{"class":168}," my_math\n",[162,174456,174457],{"class":164,"line":197},[162,174458,301],{"emptyLinePlaceholder":300},[162,174460,174461,174463,174466,174468,174470,174472],{"class":164,"line":228},[162,174462,306],{"class":207},[162,174464,174465],{"class":168},"(my_math.add(",[162,174467,208],{"class":207},[162,174469,183],{"class":168},[162,174471,213],{"class":207},[162,174473,586],{"class":168},[14,174475,174477],{"id":174476},"_911-import导入","9.11 import导入",[3284,174479,174481],{"id":174480},"_9111-导入模块","9.11.1 导入模块",[153,174483,174485],{"className":155,"code":174484,"language":157,"meta":158,"style":158},"import random\n\nprint(random.randint(1, 10))\n",[71,174486,174487,174493,174497],{"__ignoreMap":158},[162,174488,174489,174491],{"class":164,"line":165},[162,174490,33478],{"class":172},[162,174492,48403],{"class":168},[162,174494,174495],{"class":164,"line":197},[162,174496,301],{"emptyLinePlaceholder":300},[162,174498,174499,174501,174504,174506,174508,174510],{"class":164,"line":228},[162,174500,306],{"class":207},[162,174502,174503],{"class":168},"(random.randint(",[162,174505,208],{"class":207},[162,174507,183],{"class":168},[162,174509,1006],{"class":207},[162,174511,586],{"class":168},[3284,174513,174515],{"id":174514},"_9112-导入指定内容","9.11.2 导入指定内容",[153,174517,174519],{"className":155,"code":174518,"language":157,"meta":158,"style":158},"from random import randint\n\nprint(randint(1, 10))\n",[71,174520,174521,174532,174536],{"__ignoreMap":158},[162,174522,174523,174525,174527,174529],{"class":164,"line":165},[162,174524,33821],{"class":172},[162,174526,60865],{"class":168},[162,174528,33478],{"class":172},[162,174530,174531],{"class":168}," randint\n",[162,174533,174534],{"class":164,"line":197},[162,174535,301],{"emptyLinePlaceholder":300},[162,174537,174538,174540,174543,174545,174547,174549],{"class":164,"line":228},[162,174539,306],{"class":207},[162,174541,174542],{"class":168},"(randint(",[162,174544,208],{"class":207},[162,174546,183],{"class":168},[162,174548,1006],{"class":207},[162,174550,586],{"class":168},[3284,174552,174554],{"id":174553},"_9113-起别名","9.11.3 起别名",[153,174556,174558],{"className":155,"code":174557,"language":157,"meta":158,"style":158},"import random as rd\n\nprint(rd.randint(1, 10))\n",[71,174559,174560,174571,174575],{"__ignoreMap":158},[162,174561,174562,174564,174566,174568],{"class":164,"line":165},[162,174563,33478],{"class":172},[162,174565,60865],{"class":168},[162,174567,34466],{"class":172},[162,174569,174570],{"class":168}," rd\n",[162,174572,174573],{"class":164,"line":197},[162,174574,301],{"emptyLinePlaceholder":300},[162,174576,174577,174579,174582,174584,174586,174588],{"class":164,"line":228},[162,174578,306],{"class":207},[162,174580,174581],{"class":168},"(rd.randint(",[162,174583,208],{"class":207},[162,174585,183],{"class":168},[162,174587,1006],{"class":207},[162,174589,586],{"class":168},[153,174591,174593],{"className":155,"code":174592,"language":157,"meta":158,"style":158},"from random import randint as rint\n\nprint(rint(1, 10))\n",[71,174594,174595,174611,174615],{"__ignoreMap":158},[162,174596,174597,174599,174601,174603,174606,174608],{"class":164,"line":165},[162,174598,33821],{"class":172},[162,174600,60865],{"class":168},[162,174602,33478],{"class":172},[162,174604,174605],{"class":168}," randint ",[162,174607,34466],{"class":172},[162,174609,174610],{"class":168}," rint\n",[162,174612,174613],{"class":164,"line":197},[162,174614,301],{"emptyLinePlaceholder":300},[162,174616,174617,174619,174622,174624,174626,174628],{"class":164,"line":228},[162,174618,306],{"class":207},[162,174620,174621],{"class":168},"(rint(",[162,174623,208],{"class":207},[162,174625,183],{"class":168},[162,174627,1006],{"class":207},[162,174629,586],{"class":168},[3284,174631,174633],{"id":174632},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[153,174635,174637],{"className":155,"code":174636,"language":157,"meta":158,"style":158},"from random import *\n",[71,174638,174639],{"__ignoreMap":158},[162,174640,174641,174643,174645,174647],{"class":164,"line":165},[162,174642,33821],{"class":172},[162,174644,60865],{"class":168},[162,174646,33478],{"class":172},[162,174648,174649],{"class":172}," *\n",[19,174651,174652],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,174654,174656],{"id":174655},"_912-常用内置模块","9.12 常用内置模块",[3284,174658,174660],{"id":174659},"_9121-random","9.12.1 random",[153,174662,174664],{"className":155,"code":174663,"language":157,"meta":158,"style":158},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[71,174665,174666,174672,174676,174690,174709],{"__ignoreMap":158},[162,174667,174668,174670],{"class":164,"line":165},[162,174669,33478],{"class":172},[162,174671,48403],{"class":168},[162,174673,174674],{"class":164,"line":197},[162,174675,301],{"emptyLinePlaceholder":300},[162,174677,174678,174680,174682,174684,174686,174688],{"class":164,"line":228},[162,174679,306],{"class":207},[162,174681,174503],{"class":168},[162,174683,208],{"class":207},[162,174685,183],{"class":168},[162,174687,1006],{"class":207},[162,174689,586],{"class":168},[162,174691,174692,174694,174697,174699,174701,174703,174705,174707],{"class":164,"line":252},[162,174693,306],{"class":207},[162,174695,174696],{"class":168},"(random.choice([",[162,174698,180],{"class":179},[162,174700,183],{"class":168},[162,174702,186],{"class":179},[162,174704,183],{"class":168},[162,174706,191],{"class":179},[162,174708,36219],{"class":168},[162,174710,174711,174713,174716,174718,174720,174722,174724,174726,174728,174730,174732,174734,174736,174738],{"class":164,"line":328},[162,174712,306],{"class":207},[162,174714,174715],{"class":168},"(random.sample([",[162,174717,208],{"class":207},[162,174719,183],{"class":168},[162,174721,213],{"class":207},[162,174723,183],{"class":168},[162,174725,218],{"class":207},[162,174727,183],{"class":168},[162,174729,223],{"class":207},[162,174731,183],{"class":168},[162,174733,637],{"class":207},[162,174735,115262],{"class":168},[162,174737,213],{"class":207},[162,174739,586],{"class":168},[3284,174741,174743],{"id":174742},"_9122-time","9.12.2 time",[153,174745,174747],{"className":155,"code":174746,"language":157,"meta":158,"style":158},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[71,174748,174749,174755,174759,174766,174774],{"__ignoreMap":158},[162,174750,174751,174753],{"class":164,"line":165},[162,174752,33478],{"class":172},[162,174754,34908],{"class":168},[162,174756,174757],{"class":164,"line":197},[162,174758,301],{"emptyLinePlaceholder":300},[162,174760,174761,174763],{"class":164,"line":228},[162,174762,306],{"class":207},[162,174764,174765],{"class":168},"(time.time())\n",[162,174767,174768,174770,174772],{"class":164,"line":252},[162,174769,98136],{"class":168},[162,174771,208],{"class":207},[162,174773,434],{"class":168},[162,174775,174776,174778,174780,174783],{"class":164,"line":328},[162,174777,306],{"class":207},[162,174779,604],{"class":168},[162,174781,174782],{"class":179},"\"1秒后执行\"",[162,174784,434],{"class":168},[3284,174786,174788],{"id":174787},"_9123-datetime","9.12.3 datetime",[153,174790,174792],{"className":155,"code":174791,"language":157,"meta":158,"style":158},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[71,174793,174794,174806,174810,174820,174827],{"__ignoreMap":158},[162,174795,174796,174798,174801,174803],{"class":164,"line":165},[162,174797,33821],{"class":172},[162,174799,174800],{"class":168}," datetime ",[162,174802,33478],{"class":172},[162,174804,174805],{"class":168}," datetime\n",[162,174807,174808],{"class":164,"line":197},[162,174809,301],{"emptyLinePlaceholder":300},[162,174811,174812,174815,174817],{"class":164,"line":228},[162,174813,174814],{"class":168},"now ",[162,174816,173],{"class":172},[162,174818,174819],{"class":168}," datetime.now()\n",[162,174821,174822,174824],{"class":164,"line":252},[162,174823,306],{"class":207},[162,174825,174826],{"class":168},"(now)\n",[162,174828,174829,174831,174834,174837,174839,174842],{"class":164,"line":328},[162,174830,306],{"class":207},[162,174832,174833],{"class":168},"(now.strftime(",[162,174835,174836],{"class":179},"\"%Y-%m-",[162,174838,159725],{"class":207},[162,174840,174841],{"class":179}," %H:%M:%S\"",[162,174843,586],{"class":168},[3284,174845,174847],{"id":174846},"_9124-os","9.12.4 os",[153,174849,174851],{"className":155,"code":174850,"language":157,"meta":158,"style":158},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[71,174852,174853,174859,174863,174870],{"__ignoreMap":158},[162,174854,174855,174857],{"class":164,"line":165},[162,174856,33478],{"class":172},[162,174858,48380],{"class":168},[162,174860,174861],{"class":164,"line":197},[162,174862,301],{"emptyLinePlaceholder":300},[162,174864,174865,174867],{"class":164,"line":228},[162,174866,306],{"class":207},[162,174868,174869],{"class":168},"(os.getcwd())\n",[162,174871,174872,174874,174877,174880],{"class":164,"line":252},[162,174873,306],{"class":207},[162,174875,174876],{"class":168},"(os.listdir(",[162,174878,174879],{"class":179},"\".\"",[162,174881,586],{"class":168},[3284,174883,174885],{"id":174884},"_9125-sys","9.12.5 sys",[153,174887,174889],{"className":155,"code":174888,"language":157,"meta":158,"style":158},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[71,174890,174891,174898,174902,174909],{"__ignoreMap":158},[162,174892,174893,174895],{"class":164,"line":165},[162,174894,33478],{"class":172},[162,174896,174897],{"class":168}," sys\n",[162,174899,174900],{"class":164,"line":197},[162,174901,301],{"emptyLinePlaceholder":300},[162,174903,174904,174906],{"class":164,"line":228},[162,174905,306],{"class":207},[162,174907,174908],{"class":168},"(sys.version)\n",[162,174910,174911,174913],{"class":164,"line":252},[162,174912,306],{"class":207},[162,174914,174915],{"class":168},"(sys.path)\n",[14,174917,174919,174920,174922,174923,979],{"id":174918},"_913-if-name-main","9.13 if ",[3453,174921,82875],{}," == \"",[3453,174924,105121],{},[19,174926,174927,174928,174931],{},"模块被直接运行和被导入时，",[71,174929,174930],{},"__name__"," 的值不同。",[19,174933,174934,174935,27710],{},"创建 ",[71,174936,174937],{},"my_module.py",[153,174939,174941],{"className":155,"code":174940,"language":157,"meta":158,"style":158},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[71,174942,174943,174951,174961,174965,174969,174981],{"__ignoreMap":158},[162,174944,174945,174947,174949],{"class":164,"line":165},[162,174946,35026],{"class":172},[162,174948,8317],{"class":5082},[162,174950,154144],{"class":168},[162,174952,174953,174955,174957,174959],{"class":164,"line":197},[162,174954,7203],{"class":172},[162,174956,13967],{"class":168},[162,174958,3771],{"class":172},[162,174960,154155],{"class":168},[162,174962,174963],{"class":164,"line":228},[162,174964,301],{"emptyLinePlaceholder":300},[162,174966,174967],{"class":164,"line":252},[162,174968,301],{"emptyLinePlaceholder":300},[162,174970,174971,174973,174975,174977,174979],{"class":164,"line":328},[162,174972,2703],{"class":172},[162,174974,34304],{"class":207},[162,174976,2714],{"class":172},[162,174978,104625],{"class":179},[162,174980,2316],{"class":168},[162,174982,174983,174985,174987,174989,174991,174993],{"class":164,"line":466},[162,174984,822],{"class":207},[162,174986,169302],{"class":168},[162,174988,208],{"class":207},[162,174990,183],{"class":168},[162,174992,213],{"class":207},[162,174994,586],{"class":168},[19,174996,174997],{},"作用：",[1452,174999,175000,175003],{},[1455,175001,175002],{},"直接运行该文件时，执行测试代码。",[1455,175004,175005],{},"被其他文件导入时，不执行测试代码。",[19,175007,175008],{},"这是写模块时很常用的习惯。",[14,175010,175012],{"id":175011},"_914-包","9.14 包",[19,175014,175015,175016,175019],{},"包是包含 ",[71,175017,175018],{},"__init__.py"," 的目录，用于组织多个模块。",[19,175021,175022],{},"目录结构：",[153,175024,175027],{"className":175025,"code":175026,"language":8295,"meta":158},[8293],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[71,175028,175026],{"__ignoreMap":158},[19,175030,175031],{},"导入：",[153,175033,175035],{"className":155,"code":175034,"language":157,"meta":158,"style":158},"from utils.file_utils import read_file\n",[71,175036,175037],{"__ignoreMap":158},[162,175038,175039,175041,175044,175046],{"class":164,"line":165},[162,175040,33821],{"class":172},[162,175042,175043],{"class":168}," utils.file_utils ",[162,175045,33478],{"class":172},[162,175047,175048],{"class":168}," read_file\n",[19,175050,175051,175053],{},[71,175052,175018],{}," 可以为空，也可以写包初始化逻辑。",[14,175055,175057],{"id":175056},"_915-第三方包","9.15 第三方包",[19,175059,175060,175061,175063],{},"第三方包通过 ",[71,175062,26922],{}," 安装。",[153,175065,175067],{"className":26913,"code":175066,"language":26915,"meta":158,"style":158},"pip install requests\n",[71,175068,175069],{"__ignoreMap":158},[162,175070,175071,175073,175075],{"class":164,"line":165},[162,175072,26922],{"class":5082},[162,175074,26925],{"class":179},[162,175076,149156],{"class":179},[19,175078,175079],{},"使用：",[153,175081,175083],{"className":155,"code":175082,"language":157,"meta":158,"style":158},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[71,175084,175085,175091,175095,175110],{"__ignoreMap":158},[162,175086,175087,175089],{"class":164,"line":165},[162,175088,33478],{"class":172},[162,175090,149156],{"class":168},[162,175092,175093],{"class":164,"line":197},[162,175094,301],{"emptyLinePlaceholder":300},[162,175096,175097,175100,175102,175105,175108],{"class":164,"line":228},[162,175098,175099],{"class":168},"response ",[162,175101,173],{"class":172},[162,175103,175104],{"class":168}," requests.get(",[162,175106,175107],{"class":179},"\"https:\u002F\u002Fwww.example.com\"",[162,175109,434],{"class":168},[162,175111,175112,175114],{"class":164,"line":252},[162,175113,306],{"class":207},[162,175115,175116],{"class":168},"(response.status_code)\n",[19,175118,175119],{},"查看已安装包：",[153,175121,175123],{"className":26913,"code":175122,"language":26915,"meta":158,"style":158},"pip list\n",[71,175124,175125],{"__ignoreMap":158},[162,175126,175127,175129],{"class":164,"line":165},[162,175128,26922],{"class":5082},[162,175130,122014],{"class":179},[19,175132,175133],{},"导出项目依赖：",[153,175135,175136],{"className":26913,"code":149351,"language":26915,"meta":158,"style":158},[71,175137,175138],{"__ignoreMap":158},[162,175139,175140,175142,175144,175146],{"class":164,"line":165},[162,175141,26922],{"class":5082},[162,175143,149360],{"class":179},[162,175145,29312],{"class":172},[162,175147,149365],{"class":179},[19,175149,175150],{},"安装项目依赖：",[153,175152,175153],{"className":26913,"code":149371,"language":26915,"meta":158,"style":158},[71,175154,175155],{"__ignoreMap":158},[162,175156,175157,175159,175161,175163],{"class":164,"line":165},[162,175158,26922],{"class":5082},[162,175160,26925],{"class":179},[162,175162,122698],{"class":207},[162,175164,149365],{"class":179},[14,175166,175168],{"id":175167},"_916-模块搜索路径","9.16 模块搜索路径",[19,175170,175171,175172,175175],{},"Python 导入模块时会在 ",[71,175173,175174],{},"sys.path"," 中查找。",[153,175177,175179],{"className":155,"code":175178,"language":157,"meta":158,"style":158},"import sys\n\nfor path in sys.path:\n    print(path)\n",[71,175180,175181,175187,175191,175203],{"__ignoreMap":158},[162,175182,175183,175185],{"class":164,"line":165},[162,175184,33478],{"class":172},[162,175186,174897],{"class":168},[162,175188,175189],{"class":164,"line":197},[162,175190,301],{"emptyLinePlaceholder":300},[162,175192,175193,175195,175198,175200],{"class":164,"line":228},[162,175194,808],{"class":172},[162,175196,175197],{"class":168}," path ",[162,175199,814],{"class":172},[162,175201,175202],{"class":168}," sys.path:\n",[162,175204,175205,175207],{"class":164,"line":252},[162,175206,822],{"class":207},[162,175208,171931],{"class":168},[19,175210,175211],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,175213,160655],{},[153,175215,175218],{"className":175216,"code":175217,"language":8295,"meta":158},[8293],"random.py\njson.py\ntime.py\n",[71,175219,175217],{"__ignoreMap":158},[19,175221,175222],{},"这些文件名可能导致导入异常。",[14,175224,175226],{"id":175225},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,175228,175022],{},[153,175230,175233],{"className":175231,"code":175232,"language":8295,"meta":158},[8293],"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",[71,175234,175232],{"__ignoreMap":158},[19,175236,175237,27710],{},[71,175238,175239],{},"utils\u002Ffile_utils.py",[153,175241,175243],{"className":155,"code":175242,"language":157,"meta":158,"style":158},"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",[71,175244,175245,175251,175261,175265,175269,175279,175289,175297,175303,175307,175334,175344,175348,175352,175362,175388],{"__ignoreMap":158},[162,175246,175247,175249],{"class":164,"line":165},[162,175248,33478],{"class":172},[162,175250,150148],{"class":168},[162,175252,175253,175255,175257,175259],{"class":164,"line":197},[162,175254,33821],{"class":172},[162,175256,111372],{"class":168},[162,175258,33478],{"class":172},[162,175260,111377],{"class":168},[162,175262,175263],{"class":164,"line":228},[162,175264,301],{"emptyLinePlaceholder":300},[162,175266,175267],{"class":164,"line":252},[162,175268,301],{"emptyLinePlaceholder":300},[162,175270,175271,175273,175276],{"class":164,"line":328},[162,175272,35026],{"class":172},[162,175274,175275],{"class":5082}," read_json",[162,175277,175278],{"class":168},"(path):\n",[162,175280,175281,175284,175286],{"class":164,"line":466},[162,175282,175283],{"class":168},"    path ",[162,175285,173],{"class":172},[162,175287,175288],{"class":168}," Path(path)\n",[162,175290,175291,175293,175295],{"class":164,"line":471},[162,175292,2283],{"class":172},[162,175294,42005],{"class":172},[162,175296,172012],{"class":168},[162,175298,175299,175301],{"class":164,"line":687},[162,175300,17846],{"class":172},[162,175302,260],{"class":168},[162,175304,175305],{"class":164,"line":692},[162,175306,301],{"emptyLinePlaceholder":300},[162,175308,175309,175311,175313,175316,175318,175320,175322,175324,175326,175328,175330,175332],{"class":164,"line":698},[162,175310,37253],{"class":172},[162,175312,149849],{"class":207},[162,175314,175315],{"class":168},"(path, ",[162,175317,149859],{"class":179},[162,175319,183],{"class":168},[162,175321,149864],{"class":671},[162,175323,173],{"class":172},[162,175325,149869],{"class":179},[162,175327,1823],{"class":168},[162,175329,34466],{"class":172},[162,175331,151210],{"class":671},[162,175333,2316],{"class":168},[162,175335,175336,175338,175340,175342],{"class":164,"line":2955},[162,175337,17846],{"class":172},[162,175339,151221],{"class":168},[162,175341,48429],{"class":671},[162,175343,434],{"class":168},[162,175345,175346],{"class":164,"line":2960},[162,175347,301],{"emptyLinePlaceholder":300},[162,175349,175350],{"class":164,"line":2971},[162,175351,301],{"emptyLinePlaceholder":300},[162,175353,175354,175356,175359],{"class":164,"line":2984},[162,175355,35026],{"class":172},[162,175357,175358],{"class":5082}," write_json",[162,175360,175361],{"class":168},"(path, data):\n",[162,175363,175364,175366,175368,175370,175372,175374,175376,175378,175380,175382,175384,175386],{"class":164,"line":2989},[162,175365,37253],{"class":172},[162,175367,149849],{"class":207},[162,175369,175315],{"class":168},[162,175371,155026],{"class":179},[162,175373,183],{"class":168},[162,175375,149864],{"class":671},[162,175377,173],{"class":172},[162,175379,149869],{"class":179},[162,175381,1823],{"class":168},[162,175383,34466],{"class":172},[162,175385,151210],{"class":671},[162,175387,2316],{"class":168},[162,175389,175390,175393,175395,175397,175399,175401,175403,175405,175407,175409,175411],{"class":164,"line":3011},[162,175391,175392],{"class":168},"        json.dump(data, ",[162,175394,48429],{"class":671},[162,175396,183],{"class":168},[162,175398,150194],{"class":671},[162,175400,173],{"class":172},[162,175402,37062],{"class":207},[162,175404,183],{"class":168},[162,175406,155062],{"class":671},[162,175408,173],{"class":172},[162,175410,213],{"class":207},[162,175412,434],{"class":168},[19,175414,175415,27710],{},[71,175416,157649],{},[153,175418,175420],{"className":155,"code":175419,"language":157,"meta":158,"style":158},"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",[71,175421,175422,175433,175437,175450,175470],{"__ignoreMap":158},[162,175423,175424,175426,175428,175430],{"class":164,"line":165},[162,175425,33821],{"class":172},[162,175427,175043],{"class":168},[162,175429,33478],{"class":172},[162,175431,175432],{"class":168}," read_json, write_json\n",[162,175434,175435],{"class":164,"line":197},[162,175436,301],{"emptyLinePlaceholder":300},[162,175438,175439,175441,175443,175446,175448],{"class":164,"line":228},[162,175440,2025],{"class":168},[162,175442,173],{"class":172},[162,175444,175445],{"class":168}," read_json(",[162,175447,154881],{"class":179},[162,175449,434],{"class":168},[162,175451,175452,175454,175456,175458,175460,175462,175464,175466,175468],{"class":164,"line":252},[162,175453,173236],{"class":168},[162,175455,1778],{"class":179},[162,175457,1730],{"class":168},[162,175459,180],{"class":179},[162,175461,183],{"class":168},[162,175463,1905],{"class":179},[162,175465,1730],{"class":168},[162,175467,2058],{"class":207},[162,175469,2384],{"class":168},[162,175471,175472,175475,175477],{"class":164,"line":328},[162,175473,175474],{"class":168},"write_json(",[162,175476,154881],{"class":179},[162,175478,175479],{"class":168},", students)\n",[14,175481,175483],{"id":175482},"_918-易错点","9.18 易错点",[1452,175485,175486,175489,175494,175499,175502,175505],{},[1455,175487,175488],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[1455,175490,175491,175492,3183],{},"能指定异常类型就不要裸写 ",[71,175493,173596],{},[1455,175495,175496,175498],{},[71,175497,173971],{}," 无论是否出错都会执行。",[1455,175500,175501],{},"模块文件名不要和标准库重名。",[1455,175503,175504],{},"导入自己写的模块时，要注意运行目录。",[1455,175506,175507],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,175509,175511],{"id":175510},"_919-本章练习","9.19 本章练习",[1452,175513,175514,175517,175520,175526,175533],{},[1455,175515,175516],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[1455,175518,175519],{},"写函数读取文件，如果文件不存在则返回空字符串。",[1455,175521,174934,175522,175525],{},[71,175523,175524],{},"math_utils.py","，实现加减乘除函数并导入使用。",[1455,175527,175528,175529,175532],{},"创建一个 ",[71,175530,175531],{},"utils"," 包，把 JSON 读写函数放进去。",[1455,175534,175535],{},"写一个程序，捕获除零异常和输入格式异常。",[3219,175537,175538],{},"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":158,"searchDepth":197,"depth":197,"links":175540},[175541,175542,175543,175544,175545,175546,175547,175548,175549,175550,175551,175557,175564,175566,175567,175568,175569,175570,175571],{"id":173393,"depth":197,"text":173394},{"id":173521,"depth":197,"text":173522},{"id":173570,"depth":197,"text":173571},{"id":173719,"depth":197,"text":173720},{"id":173891,"depth":197,"text":173892},{"id":173960,"depth":197,"text":173961},{"id":174071,"depth":197,"text":174072},{"id":174197,"depth":197,"text":174198},{"id":174322,"depth":197,"text":174323},{"id":174377,"depth":197,"text":174378},{"id":174476,"depth":197,"text":174477,"children":175552},[175553,175554,175555,175556],{"id":174480,"depth":228,"text":174481},{"id":174514,"depth":228,"text":174515},{"id":174553,"depth":228,"text":174554},{"id":174632,"depth":228,"text":174633},{"id":174655,"depth":197,"text":174656,"children":175558},[175559,175560,175561,175562,175563],{"id":174659,"depth":228,"text":174660},{"id":174742,"depth":228,"text":174743},{"id":174787,"depth":228,"text":174788},{"id":174846,"depth":228,"text":174847},{"id":174884,"depth":228,"text":174885},{"id":174918,"depth":197,"text":175565},"9.13 if name == \"main\"",{"id":175011,"depth":197,"text":175012},{"id":175056,"depth":197,"text":175057},{"id":175167,"depth":197,"text":175168},{"id":175225,"depth":197,"text":175226},{"id":175482,"depth":197,"text":175483},{"id":175510,"depth":197,"text":175511},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":173385,"description":3241},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":175578,"title":175579,"body":175580,"description":175743,"extension":3242,"meta":175744,"navigation":300,"path":175745,"seo":175746,"stem":175747,"__hash__":175748},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":175581,"toc":175738},[175582,175585,175588,175591,175602,175604,175678,175681,175684,175687,175690,175693,175696,175699,175702,175705,175708],[10,175583,175579],{"id":175584},"python教程",[19,175586,175587],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,175589,175590],{},"建议学习环境：",[1452,175592,175593,175596,175599],{},[1455,175594,175595],{},"Python 版本：Python 3.10 及以上。",[1455,175597,175598],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[1455,175600,175601],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,175603,120137],{"id":120137},[1452,175605,175606,175612,175618,175624,175630,175636,175642,175648,175654,175660,175666,175672],{},[1455,175607,175608],{},[3538,175609,175611],{"href":175610},".\u002Fch1-Python","Python环境与第一个程序",[1455,175613,175614],{},[3538,175615,175617],{"href":175616},".\u002Fch2","基础语法、变量与字符串",[1455,175619,175620],{},[3538,175621,175623],{"href":175622},".\u002Fch3","判断语句",[1455,175625,175626],{},[3538,175627,175629],{"href":175628},".\u002Fch4","循环语句",[1455,175631,175632],{},[3538,175633,175635],{"href":175634},".\u002Fch5","函数基础",[1455,175637,175638],{},[3538,175639,175641],{"href":175640},".\u002Fch6","数据容器",[1455,175643,175644],{},[3538,175645,175647],{"href":175646},".\u002Fch7","函数进阶",[1455,175649,175650],{},[3538,175651,175653],{"href":175652},".\u002Fch8","文件操作",[1455,175655,175656],{},[3538,175657,175659],{"href":175658},".\u002Fch9","异常、模块与包",[1455,175661,175662],{},[3538,175663,175665],{"href":175664},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[1455,175667,175668],{},[3538,175669,175671],{"href":175670},".\u002Fch11","面向对象基础",[1455,175673,175674],{},[3538,175675,175677],{"href":175676},".\u002Fch12","综合案例与复习路线",[14,175679,175680],{"id":175680},"学习路线",[19,175682,175683],{},"第一阶段：能运行程序。",[19,175685,175686],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,175688,175689],{},"第二阶段：能组织数据。",[19,175691,175692],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,175694,175695],{},"第三阶段：能封装逻辑。",[19,175697,175698],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,175700,175701],{},"第四阶段：能做小项目。",[19,175703,175704],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,175706,175707],{"id":175707},"参考资料",[1452,175709,175710,175717,175724,175731],{},[1455,175711,175712,175713],{},"黑马程序员 Python 入门教程推荐：",[3538,175714,175715],{"href":175715,"rel":175716},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[26956],[1455,175718,175719,175720],{},"Python 官方中文教程：",[3538,175721,175722],{"href":175722,"rel":175723},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[26956],[1455,175725,175726,175727],{},"Python 标准库文档：",[3538,175728,175729],{"href":175729,"rel":175730},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[26956],[1455,175732,175733,175734],{},"pyecharts 文档：",[3538,175735,175736],{"href":175736,"rel":175737},"https:\u002F\u002Fpyecharts.org\u002F",[26956],{"title":158,"searchDepth":197,"depth":197,"links":175739},[175740,175741,175742],{"id":120137,"depth":197,"text":120137},{"id":175680,"depth":197,"text":175680},{"id":175707,"depth":197,"text":175707},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":26469},"\u002Fwiki\u002F2024-10-10-python",{"title":175579,"description":175743},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331478895]